• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/scsi/aacraid/

Lines Matching defs:scsicmd

133 static unsigned long aac_build_sg(struct scsi_cmnd* scsicmd, struct sgmap* sgmap);
134 static unsigned long aac_build_sg64(struct scsi_cmnd* scsicmd, struct sgmap64* psg);
135 static unsigned long aac_build_sgraw(struct scsi_cmnd* scsicmd, struct sgmapraw* psg);
136 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd);
228 static inline int aac_valid_context(struct scsi_cmnd *scsicmd,
232 if (unlikely(!scsicmd || !scsicmd->scsi_done)) {
238 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL;
239 device = scsicmd->device;
331 static void aac_expose_phy_device(struct scsi_cmnd *scsicmd)
334 scsi_sg_copy_to_buffer(scsicmd, &inq_data, sizeof(inq_data));
337 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data));
412 struct scsi_cmnd * scsicmd;
414 scsicmd = (struct scsi_cmnd *) context;
416 if (!aac_valid_context(scsicmd, fibptr))
439 scsi_sg_copy_to_buffer(scsicmd, &inq, sizeof(inq));
441 scsi_sg_copy_from_buffer(scsicmd, &inq, sizeof(inq));
445 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
449 scsicmd->scsi_done(scsicmd);
455 static int aac_get_container_name(struct scsi_cmnd * scsicmd)
462 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
472 dinfo->cid = cpu_to_le32(scmd_id(scsicmd));
481 (void *) scsicmd);
487 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
497 static int aac_probe_container_callback2(struct scsi_cmnd * scsicmd)
499 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev;
501 if ((fsa_dev_ptr[scmd_id(scsicmd)].valid & 1))
502 return aac_scsi_cmd(scsicmd);
504 scsicmd->result = DID_NO_CONNECT << 16;
505 scsicmd->scsi_done(scsicmd);
513 struct scsi_cmnd * scsicmd = (struct scsi_cmnd *)context;
516 if (!aac_valid_context(scsicmd, fibptr))
519 scsicmd->SCp.Status = 0;
523 fsa_dev_ptr += scmd_id(scsicmd);
542 scsicmd->SCp.Status = le32_to_cpu(dresp->count);
546 callback = (int (*)(struct scsi_cmnd *))(scsicmd->SCp.ptr);
547 scsicmd->SCp.ptr = NULL;
548 (*callback)(scsicmd);
554 struct scsi_cmnd * scsicmd;
566 scsicmd = (struct scsi_cmnd *) context;
568 if (!aac_valid_context(scsicmd, fibptr))
576 dinfo->count = cpu_to_le32(scmd_id(scsicmd));
585 (void *) scsicmd);
590 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
598 static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(struct scsi_cmnd *))
603 if ((fibptr = aac_fib_alloc((struct aac_dev *)scsicmd->device->host->hostdata))) {
611 dinfo->count = cpu_to_le32(scmd_id(scsicmd));
613 scsicmd->SCp.ptr = (char *)callback;
621 (void *) scsicmd);
626 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
630 scsicmd->SCp.ptr = NULL;
636 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev;
638 fsa_dev_ptr += scmd_id(scsicmd);
641 return (*callback)(scsicmd);
656 static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd)
658 scsicmd->device = NULL;
664 struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL);
668 if (!scsicmd || !scsidev) {
669 kfree(scsicmd);
673 scsicmd->list.next = NULL;
674 scsicmd->scsi_done = (void (*)(struct scsi_cmnd*))aac_probe_container_callback1;
676 scsicmd->device = scsidev;
681 if (_aac_probe_container(scsicmd, aac_probe_container_callback1) == 0)
682 while (scsicmd->device == scsidev)
685 status = scsicmd->SCp.Status;
686 kfree(scsicmd);
813 struct scsi_cmnd * scsicmd;
817 scsicmd = (struct scsi_cmnd *) context;
818 if (!aac_valid_context(scsicmd, fibptr))
827 sp[1] = scsicmd->cmnd[2];
831 scsi_sg_copy_from_buffer(scsicmd, sp, sizeof(sp));
834 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
838 scsicmd->scsi_done(scsicmd);
844 static int aac_get_container_serial(struct scsi_cmnd * scsicmd)
851 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
861 dinfo->cid = cpu_to_le32(scmd_id(scsicmd));
869 (void *) scsicmd);
875 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
1517 struct scsi_cmnd *scsicmd;
1520 scsicmd = (struct scsi_cmnd *) context;
1522 if (!aac_valid_context(scsicmd, fibptr))
1526 cid = scmd_id(scsicmd);
1530 switch (scsicmd->cmnd[0]) {
1533 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) |
1534 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
1538 lba = ((u64)scsicmd->cmnd[2] << 56) |
1539 ((u64)scsicmd->cmnd[3] << 48) |
1540 ((u64)scsicmd->cmnd[4] << 40) |
1541 ((u64)scsicmd->cmnd[5] << 32) |
1542 ((u64)scsicmd->cmnd[6] << 24) |
1543 (scsicmd->cmnd[7] << 16) |
1544 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1548 lba = ((u64)scsicmd->cmnd[2] << 24) |
1549 (scsicmd->cmnd[3] << 16) |
1550 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1553 lba = ((u64)scsicmd->cmnd[2] << 24) |
1554 (scsicmd->cmnd[3] << 16) |
1555 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1565 scsi_dma_unmap(scsicmd);
1570 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1575 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1579 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
1588 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1593 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
1601 scsicmd->scsi_done(scsicmd);
1604 static int aac_read(struct scsi_cmnd * scsicmd)
1613 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
1617 switch (scsicmd->cmnd[0]) {
1619 dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd)));
1621 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) |
1622 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
1623 count = scsicmd->cmnd[4];
1629 dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd)));
1631 lba = ((u64)scsicmd->cmnd[2] << 56) |
1632 ((u64)scsicmd->cmnd[3] << 48) |
1633 ((u64)scsicmd->cmnd[4] << 40) |
1634 ((u64)scsicmd->cmnd[5] << 32) |
1635 ((u64)scsicmd->cmnd[6] << 24) |
1636 (scsicmd->cmnd[7] << 16) |
1637 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1638 count = (scsicmd->cmnd[10] << 24) |
1639 (scsicmd->cmnd[11] << 16) |
1640 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13];
1643 dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd)));
1645 lba = ((u64)scsicmd->cmnd[2] << 24) |
1646 (scsicmd->cmnd[3] << 16) |
1647 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1648 count = (scsicmd->cmnd[6] << 24) |
1649 (scsicmd->cmnd[7] << 16) |
1650 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1653 dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd)));
1655 lba = ((u64)scsicmd->cmnd[2] << 24) |
1656 (scsicmd->cmnd[3] << 16) |
1657 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1658 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
1662 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
1663 cid = scmd_id(scsicmd);
1665 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1670 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
1673 scsicmd->scsi_done(scsicmd);
1679 if (aac_adapter_bounds(dev,scsicmd,lba))
1689 status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count);
1695 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
1703 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL;
1704 scsicmd->scsi_done(scsicmd);
1710 static int aac_write(struct scsi_cmnd * scsicmd)
1720 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
1724 if (scsicmd->cmnd[0] == WRITE_6) /* 6 byte command */
1726 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
1727 count = scsicmd->cmnd[4];
1731 } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */
1732 dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd)));
1734 lba = ((u64)scsicmd->cmnd[2] << 56) |
1735 ((u64)scsicmd->cmnd[3] << 48) |
1736 ((u64)scsicmd->cmnd[4] << 40) |
1737 ((u64)scsicmd->cmnd[5] << 32) |
1738 ((u64)scsicmd->cmnd[6] << 24) |
1739 (scsicmd->cmnd[7] << 16) |
1740 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1741 count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) |
1742 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13];
1743 fua = scsicmd->cmnd[1] & 0x8;
1744 } else if (scsicmd->cmnd[0] == WRITE_12) { /* 12 byte command */
1745 dprintk((KERN_DEBUG "aachba: received a write(12) command on id %d.\n", scmd_id(scsicmd)));
1747 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16)
1748 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1749 count = (scsicmd->cmnd[6] << 24) | (scsicmd->cmnd[7] << 16)
1750 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];
1751 fua = scsicmd->cmnd[1] & 0x8;
1753 dprintk((KERN_DEBUG "aachba: received a write(10) command on id %d.\n", scmd_id(scsicmd)));
1754 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1755 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
1756 fua = scsicmd->cmnd[1] & 0x8;
1759 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
1760 cid = scmd_id(scsicmd);
1762 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
1767 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
1770 scsicmd->scsi_done(scsicmd);
1776 if (aac_adapter_bounds(dev,scsicmd,lba))
1784 /* scsicmd->result = DID_ERROR << 16;
1785 * scsicmd->scsi_done(scsicmd);
1792 status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua);
1798 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
1806 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL;
1807 scsicmd->scsi_done(scsicmd);
1855 static int aac_synchronize(struct scsi_cmnd *scsicmd)
1861 struct scsi_device *sdev = scsicmd->device;
1864 u64 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) |
1865 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
1866 u32 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
1947 synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd));
1960 (void *)scsicmd);
1966 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
1979 struct scsi_cmnd *scsicmd = context;
1981 if (!aac_valid_context(scsicmd, fibptr))
1986 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
1990 scsicmd->scsi_done(scsicmd);
1993 static int aac_start_stop(struct scsi_cmnd *scsicmd)
1998 struct scsi_device *sdev = scsicmd->device;
2003 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
2005 scsicmd->scsi_done(scsicmd);
2025 pmcmd->sub = (scsicmd->cmnd[4] & 1) ?
2028 pmcmd->parm = (scsicmd->cmnd[1] & 1) ?
2040 (void *)scsicmd);
2046 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
2057 * @scsicmd: SCSI command block
2063 int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
2066 struct Scsi_Host *host = scsicmd->device->host;
2077 cid = scmd_id(scsicmd);
2079 if (scmd_channel(scsicmd) == CONTAINER_CHANNEL) {
2081 (scsicmd->device->lun != 0)) {
2082 scsicmd->result = DID_NO_CONNECT << 16;
2083 scsicmd->scsi_done(scsicmd);
2094 switch (scsicmd->cmnd[0]) {
2098 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16))
2105 return _aac_probe_container(scsicmd,
2116 return aac_send_srb_fib(scsicmd);
2118 scsicmd->result = DID_NO_CONNECT << 16;
2119 scsicmd->scsi_done(scsicmd);
2127 else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */
2128 (scsicmd->cmnd[0] != TEST_UNIT_READY))
2130 dprintk((KERN_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0]));
2131 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
2135 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2138 scsicmd->scsi_done(scsicmd);
2144 switch (scsicmd->cmnd[0]) {
2152 if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) {
2156 arr[0] = (scmd_id(scsicmd) == host->this_id) ?
2158 if (scsicmd->cmnd[2] == 0) {
2163 arr[1] = scsicmd->cmnd[2];
2164 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2166 scsicmd->result = DID_OK << 16 |
2168 } else if (scsicmd->cmnd[2] == 0x80) {
2171 scmd_id(scsicmd));
2172 arr[1] = scsicmd->cmnd[2];
2173 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2177 scsicmd);
2179 scsicmd->result = DID_OK << 16 |
2183 scsicmd->result = DID_OK << 16 |
2189 memcpy(scsicmd->sense_buffer,
2195 scsicmd->scsi_done(scsicmd);
2210 scsi_sg_copy_from_buffer(scsicmd, &inq_data,
2212 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2213 scsicmd->scsi_done(scsicmd);
2220 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data));
2221 return aac_get_container_name(scsicmd);
2226 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16))
2249 alloc_len = ((scsicmd->cmnd[10] << 24)
2250 + (scsicmd->cmnd[11] << 16)
2251 + (scsicmd->cmnd[12] << 8) + scsicmd->cmnd[13]);
2254 scsi_sg_copy_from_buffer(scsicmd, cp, alloc_len);
2255 if (alloc_len < scsi_bufflen(scsicmd))
2256 scsi_set_resid(scsicmd,
2257 scsi_bufflen(scsicmd) - alloc_len);
2260 scsicmd->device->removable = 1;
2262 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2263 scsicmd->scsi_done(scsicmd);
2287 scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp));
2289 scsicmd->device->removable = 1;
2290 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
2292 scsicmd->scsi_done(scsicmd);
2311 if (((scsicmd->cmnd[2] & 0x3f) == 8) ||
2312 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) {
2319 if (mode_buf_length > scsicmd->cmnd[4])
2320 mode_buf_length = scsicmd->cmnd[4];
2322 scsi_sg_copy_from_buffer(scsicmd, mode_buf, mode_buf_length);
2323 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2324 scsicmd->scsi_done(scsicmd);
2346 if (((scsicmd->cmnd[2] & 0x3f) == 8) ||
2347 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) {
2354 if (mode_buf_length > scsicmd->cmnd[8])
2355 mode_buf_length = scsicmd->cmnd[8];
2357 scsi_sg_copy_from_buffer(scsicmd, mode_buf, mode_buf_length);
2359 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2360 scsicmd->scsi_done(scsicmd);
2366 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, sizeof (struct sense_data));
2368 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2369 scsicmd->scsi_done(scsicmd);
2374 if (scsicmd->cmnd[4])
2379 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2380 scsicmd->scsi_done(scsicmd);
2387 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
2392 memcpy(scsicmd->sense_buffer,
2397 scsicmd->scsi_done(scsicmd);
2406 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
2407 scsicmd->scsi_done(scsicmd);
2411 return aac_start_stop(scsicmd);
2414 switch (scsicmd->cmnd[0])
2428 if (scsicmd->request->rq_disk)
2430 scsicmd->request->rq_disk->disk_name,
2432 sizeof(scsicmd->request->rq_disk->disk_name) + 1));
2434 return aac_read(scsicmd);
2442 return aac_write(scsicmd);
2446 scsicmd->result = DID_OK << 16 |
2448 scsicmd->scsi_done(scsicmd);
2453 return aac_synchronize(scsicmd);
2459 dprintk((KERN_WARNING "Unhandled SCSI Command: 0x%x.\n", scsicmd->cmnd[0]));
2460 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
2464 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
2468 scsicmd->scsi_done(scsicmd);
2597 struct scsi_cmnd *scsicmd;
2599 scsicmd = (struct scsi_cmnd *) context;
2601 if (!aac_valid_context(scsicmd, fibptr))
2610 scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */
2615 scsi_set_resid(scsicmd, scsi_bufflen(scsicmd)
2618 scsi_dma_unmap(scsicmd);
2621 if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01)
2623 aac_expose_phy_device(scsicmd);
2634 scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
2635 memcpy(scsicmd->sense_buffer, srbreply->sense_data, len);
2645 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
2648 switch(scsicmd->cmnd[0]){
2657 if (le32_to_cpu(srbreply->data_xfer_length) < scsicmd->underflow) {
2662 scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8;
2665 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
2669 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
2674 scsicmd->result = DID_ABORT << 16 | ABORT << 8;
2678 scsicmd->result = DID_ERROR << 16 | ABORT << 8;
2681 scsicmd->result = DID_PARITY << 16 | MSG_PARITY_ERROR << 8;
2688 scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8;
2693 scsicmd->result = DID_TIME_OUT << 16 | COMMAND_COMPLETE << 8;
2697 scsicmd->result = DID_BUS_BUSY << 16 | COMMAND_COMPLETE << 8;
2701 scsicmd->result = DID_RESET << 16 | COMMAND_COMPLETE << 8;
2705 scsicmd->result = DID_ERROR << 16 | MESSAGE_REJECT << 8;
2727 scsicmd->cmnd[0],
2730 if ((scsicmd->cmnd[0] == ATA_12)
2731 || (scsicmd->cmnd[0] == ATA_16)) {
2732 if (scsicmd->cmnd[2] & (0x01 << 5)) {
2733 scsicmd->result = DID_OK << 16
2737 scsicmd->result = DID_ERROR << 16
2742 scsicmd->result = DID_ERROR << 16
2749 scsicmd->result |= SAM_STAT_CHECK_CONDITION;
2756 memcpy(scsicmd->sense_buffer, srbreply->sense_data, len);
2761 scsicmd->result |= le32_to_cpu(srbreply->scsi_status);
2765 scsicmd->scsi_done(scsicmd);
2771 * @scsicmd: the scsi command block
2774 * scsicmd passed in.
2777 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd)
2783 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
2784 if (scmd_id(scsicmd) >= dev->maximum_num_physicals ||
2785 scsicmd->device->lun > 7) {
2786 scsicmd->result = DID_NO_CONNECT << 16;
2787 scsicmd->scsi_done(scsicmd);
2797 status = aac_adapter_scsi(cmd_fibcontext, scsicmd);
2803 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
2814 static unsigned long aac_build_sg(struct scsi_cmnd* scsicmd, struct sgmap* psg)
2820 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
2826 nseg = scsi_dma_map(scsicmd);
2834 scsi_for_each_sg(scsicmd, sg, nseg, i) {
2840 if (byte_count > scsi_bufflen(scsicmd)) {
2842 (byte_count - scsi_bufflen(scsicmd));
2844 byte_count = scsi_bufflen(scsicmd);
2847 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){
2849 byte_count, scsicmd->underflow);
2856 static unsigned long aac_build_sg64(struct scsi_cmnd* scsicmd, struct sgmap64* psg)
2863 dev = (struct aac_dev *)scsicmd->device->host->hostdata;
2870 nseg = scsi_dma_map(scsicmd);
2876 scsi_for_each_sg(scsicmd, sg, nseg, i) {
2886 if (byte_count > scsi_bufflen(scsicmd)) {
2888 (byte_count - scsi_bufflen(scsicmd));
2890 byte_count = scsi_bufflen(scsicmd);
2893 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){
2895 byte_count, scsicmd->underflow);
2901 static unsigned long aac_build_sgraw(struct scsi_cmnd* scsicmd, struct sgmapraw* psg)
2915 nseg = scsi_dma_map(scsicmd);
2921 scsi_for_each_sg(scsicmd, sg, nseg, i) {
2934 if (byte_count > scsi_bufflen(scsicmd)) {
2936 (byte_count - scsi_bufflen(scsicmd));
2938 byte_count = scsi_bufflen(scsicmd);
2941 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){
2943 byte_count, scsicmd->underflow);