Lines Matching refs:scsicmd
212 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *sgmap);
213 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg);
214 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg);
215 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd,
219 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd);
319 static inline int aac_valid_context(struct scsi_cmnd *scsicmd, in aac_valid_context() argument
323 if (unlikely(!scsicmd || !scsicmd->scsi_done)) { in aac_valid_context()
329 scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL; in aac_valid_context()
330 device = scsicmd->device; in aac_valid_context()
422 static void aac_expose_phy_device(struct scsi_cmnd *scsicmd) in aac_expose_phy_device() argument
425 scsi_sg_copy_to_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_expose_phy_device()
428 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_expose_phy_device()
508 struct scsi_cmnd * scsicmd; in get_container_name_callback() local
510 scsicmd = (struct scsi_cmnd *) context; in get_container_name_callback()
512 if (!aac_valid_context(scsicmd, fibptr)) in get_container_name_callback()
535 scsi_sg_copy_to_buffer(scsicmd, &inq, sizeof(inq)); in get_container_name_callback()
537 scsi_sg_copy_from_buffer(scsicmd, &inq, sizeof(inq)); in get_container_name_callback()
541 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in get_container_name_callback()
545 scsicmd->scsi_done(scsicmd); in get_container_name_callback()
551 static int aac_get_container_name(struct scsi_cmnd * scsicmd) in aac_get_container_name() argument
558 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_get_container_name()
568 dinfo->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_get_container_name()
577 (void *) scsicmd); in aac_get_container_name()
583 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_get_container_name()
593 static int aac_probe_container_callback2(struct scsi_cmnd * scsicmd) in aac_probe_container_callback2() argument
595 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev; in aac_probe_container_callback2()
597 if ((fsa_dev_ptr[scmd_id(scsicmd)].valid & 1)) in aac_probe_container_callback2()
598 return aac_scsi_cmd(scsicmd); in aac_probe_container_callback2()
600 scsicmd->result = DID_NO_CONNECT << 16; in aac_probe_container_callback2()
601 scsicmd->scsi_done(scsicmd); in aac_probe_container_callback2()
609 struct scsi_cmnd * scsicmd = (struct scsi_cmnd *)context; in _aac_probe_container2() local
612 if (!aac_valid_context(scsicmd, fibptr)) in _aac_probe_container2()
615 scsicmd->SCp.Status = 0; in _aac_probe_container2()
619 fsa_dev_ptr += scmd_id(scsicmd); in _aac_probe_container2()
646 scsicmd->SCp.Status = le32_to_cpu(dresp->count); in _aac_probe_container2()
650 callback = (int (*)(struct scsi_cmnd *))(scsicmd->SCp.ptr); in _aac_probe_container2()
651 scsicmd->SCp.ptr = NULL; in _aac_probe_container2()
652 (*callback)(scsicmd); in _aac_probe_container2()
658 struct scsi_cmnd * scsicmd; in _aac_probe_container1() local
672 scsicmd = (struct scsi_cmnd *) context; in _aac_probe_container1()
674 if (!aac_valid_context(scsicmd, fibptr)) in _aac_probe_container1()
687 dinfo->count = cpu_to_le32(scmd_id(scsicmd)); in _aac_probe_container1()
696 (void *) scsicmd); in _aac_probe_container1()
701 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in _aac_probe_container1()
709 static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(struct scsi_cmnd *)) in _aac_probe_container() argument
714 if ((fibptr = aac_fib_alloc((struct aac_dev *)scsicmd->device->host->hostdata))) { in _aac_probe_container()
727 dinfo->count = cpu_to_le32(scmd_id(scsicmd)); in _aac_probe_container()
729 scsicmd->SCp.ptr = (char *)callback; in _aac_probe_container()
737 (void *) scsicmd); in _aac_probe_container()
742 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in _aac_probe_container()
746 scsicmd->SCp.ptr = NULL; in _aac_probe_container()
752 struct fsa_dev_info *fsa_dev_ptr = ((struct aac_dev *)(scsicmd->device->host->hostdata))->fsa_dev; in _aac_probe_container()
754 fsa_dev_ptr += scmd_id(scsicmd); in _aac_probe_container()
757 return (*callback)(scsicmd); in _aac_probe_container()
772 static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd) in aac_probe_container_callback1() argument
774 scsicmd->device = NULL; in aac_probe_container_callback1()
780 struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL); in aac_probe_container() local
784 if (!scsicmd || !scsidev) { in aac_probe_container()
785 kfree(scsicmd); in aac_probe_container()
789 scsicmd->list.next = NULL; in aac_probe_container()
790 scsicmd->scsi_done = (void (*)(struct scsi_cmnd*))aac_probe_container_callback1; in aac_probe_container()
792 scsicmd->device = scsidev; in aac_probe_container()
797 if (_aac_probe_container(scsicmd, aac_probe_container_callback1) == 0) in aac_probe_container()
798 while (scsicmd->device == scsidev) in aac_probe_container()
801 status = scsicmd->SCp.Status; in aac_probe_container()
802 kfree(scsicmd); in aac_probe_container()
929 struct scsi_cmnd * scsicmd; in get_container_serial_callback() local
933 scsicmd = (struct scsi_cmnd *) context; in get_container_serial_callback()
934 if (!aac_valid_context(scsicmd, fibptr)) in get_container_serial_callback()
941 if (scsicmd->cmnd[2] == 0x83) { in get_container_serial_callback()
1008 scsi_sg_copy_from_buffer(scsicmd, &VPDPage83Data, in get_container_serial_callback()
1015 sp[1] = scsicmd->cmnd[2]; in get_container_serial_callback()
1019 scsi_sg_copy_from_buffer(scsicmd, sp, in get_container_serial_callback()
1024 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in get_container_serial_callback()
1028 scsicmd->scsi_done(scsicmd); in get_container_serial_callback()
1034 static int aac_get_container_serial(struct scsi_cmnd * scsicmd) in aac_get_container_serial() argument
1041 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_get_container_serial()
1051 dinfo->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_get_container_serial()
1059 (void *) scsicmd); in aac_get_container_serial()
1065 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_get_container_serial()
1790 struct scsi_cmnd *scsicmd; in io_callback() local
1793 scsicmd = (struct scsi_cmnd *) context; in io_callback()
1795 if (!aac_valid_context(scsicmd, fibptr)) in io_callback()
1799 cid = scmd_id(scsicmd); in io_callback()
1803 switch (scsicmd->cmnd[0]) { in io_callback()
1806 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | in io_callback()
1807 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in io_callback()
1811 lba = ((u64)scsicmd->cmnd[2] << 56) | in io_callback()
1812 ((u64)scsicmd->cmnd[3] << 48) | in io_callback()
1813 ((u64)scsicmd->cmnd[4] << 40) | in io_callback()
1814 ((u64)scsicmd->cmnd[5] << 32) | in io_callback()
1815 ((u64)scsicmd->cmnd[6] << 24) | in io_callback()
1816 (scsicmd->cmnd[7] << 16) | in io_callback()
1817 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in io_callback()
1821 lba = ((u64)scsicmd->cmnd[2] << 24) | in io_callback()
1822 (scsicmd->cmnd[3] << 16) | in io_callback()
1823 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in io_callback()
1826 lba = ((u64)scsicmd->cmnd[2] << 24) | in io_callback()
1827 (scsicmd->cmnd[3] << 16) | in io_callback()
1828 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in io_callback()
1838 scsi_dma_unmap(scsicmd); in io_callback()
1843 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
1848 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
1852 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
1861 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in io_callback()
1866 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in io_callback()
1874 scsicmd->scsi_done(scsicmd); in io_callback()
1877 static int aac_read(struct scsi_cmnd * scsicmd) in aac_read() argument
1886 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_read()
1890 switch (scsicmd->cmnd[0]) { in aac_read()
1892 dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
1894 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | in aac_read()
1895 (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in aac_read()
1896 count = scsicmd->cmnd[4]; in aac_read()
1902 dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
1904 lba = ((u64)scsicmd->cmnd[2] << 56) | in aac_read()
1905 ((u64)scsicmd->cmnd[3] << 48) | in aac_read()
1906 ((u64)scsicmd->cmnd[4] << 40) | in aac_read()
1907 ((u64)scsicmd->cmnd[5] << 32) | in aac_read()
1908 ((u64)scsicmd->cmnd[6] << 24) | in aac_read()
1909 (scsicmd->cmnd[7] << 16) | in aac_read()
1910 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_read()
1911 count = (scsicmd->cmnd[10] << 24) | in aac_read()
1912 (scsicmd->cmnd[11] << 16) | in aac_read()
1913 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; in aac_read()
1916 dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
1918 lba = ((u64)scsicmd->cmnd[2] << 24) | in aac_read()
1919 (scsicmd->cmnd[3] << 16) | in aac_read()
1920 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_read()
1921 count = (scsicmd->cmnd[6] << 24) | in aac_read()
1922 (scsicmd->cmnd[7] << 16) | in aac_read()
1923 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_read()
1926 dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd))); in aac_read()
1928 lba = ((u64)scsicmd->cmnd[2] << 24) | in aac_read()
1929 (scsicmd->cmnd[3] << 16) | in aac_read()
1930 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_read()
1931 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_read()
1935 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) { in aac_read()
1936 cid = scmd_id(scsicmd); in aac_read()
1938 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_read()
1943 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_read()
1946 scsicmd->scsi_done(scsicmd); in aac_read()
1952 if (aac_adapter_bounds(dev,scsicmd,lba)) in aac_read()
1962 status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count); in aac_read()
1968 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_read()
1976 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL; in aac_read()
1977 scsicmd->scsi_done(scsicmd); in aac_read()
1983 static int aac_write(struct scsi_cmnd * scsicmd) in aac_write() argument
1993 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_write()
1997 if (scsicmd->cmnd[0] == WRITE_6) /* 6 byte command */ in aac_write()
1999 lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; in aac_write()
2000 count = scsicmd->cmnd[4]; in aac_write()
2004 } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */ in aac_write()
2005 dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2007 lba = ((u64)scsicmd->cmnd[2] << 56) | in aac_write()
2008 ((u64)scsicmd->cmnd[3] << 48) | in aac_write()
2009 ((u64)scsicmd->cmnd[4] << 40) | in aac_write()
2010 ((u64)scsicmd->cmnd[5] << 32) | in aac_write()
2011 ((u64)scsicmd->cmnd[6] << 24) | in aac_write()
2012 (scsicmd->cmnd[7] << 16) | in aac_write()
2013 (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_write()
2014 count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) | in aac_write()
2015 (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; in aac_write()
2016 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2017 } else if (scsicmd->cmnd[0] == WRITE_12) { /* 12 byte command */ in aac_write()
2018 dprintk((KERN_DEBUG "aachba: received a write(12) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2020 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) in aac_write()
2021 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_write()
2022 count = (scsicmd->cmnd[6] << 24) | (scsicmd->cmnd[7] << 16) in aac_write()
2023 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; in aac_write()
2024 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2026 dprintk((KERN_DEBUG "aachba: received a write(10) command on id %d.\n", scmd_id(scsicmd))); in aac_write()
2027 …lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | (scsicmd->cmnd[4] << 8) | scsicmd… in aac_write()
2028 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_write()
2029 fua = scsicmd->cmnd[1] & 0x8; in aac_write()
2032 if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) { in aac_write()
2033 cid = scmd_id(scsicmd); in aac_write()
2035 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_write()
2040 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_write()
2043 scsicmd->scsi_done(scsicmd); in aac_write()
2049 if (aac_adapter_bounds(dev,scsicmd,lba)) in aac_write()
2065 status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua); in aac_write()
2071 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_write()
2079 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_TASK_SET_FULL; in aac_write()
2080 scsicmd->scsi_done(scsicmd); in aac_write()
2128 static int aac_synchronize(struct scsi_cmnd *scsicmd) in aac_synchronize() argument
2134 struct scsi_device *sdev = scsicmd->device; in aac_synchronize()
2137 u64 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) | in aac_synchronize()
2138 (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; in aac_synchronize()
2139 u32 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; in aac_synchronize()
2220 synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd)); in aac_synchronize()
2233 (void *)scsicmd); in aac_synchronize()
2239 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_synchronize()
2252 struct scsi_cmnd *scsicmd = context; in aac_start_stop_callback() local
2254 if (!aac_valid_context(scsicmd, fibptr)) in aac_start_stop_callback()
2259 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_start_stop_callback()
2263 scsicmd->scsi_done(scsicmd); in aac_start_stop_callback()
2266 static int aac_start_stop(struct scsi_cmnd *scsicmd) in aac_start_stop() argument
2271 struct scsi_device *sdev = scsicmd->device; in aac_start_stop()
2276 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_start_stop()
2278 scsicmd->scsi_done(scsicmd); in aac_start_stop()
2298 pmcmd->sub = (scsicmd->cmnd[4] & 1) ? in aac_start_stop()
2301 pmcmd->parm = (scsicmd->cmnd[1] & 1) ? in aac_start_stop()
2313 (void *)scsicmd); in aac_start_stop()
2319 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_start_stop()
2336 int aac_scsi_cmd(struct scsi_cmnd * scsicmd) in aac_scsi_cmd() argument
2339 struct Scsi_Host *host = scsicmd->device->host; in aac_scsi_cmd()
2350 cid = scmd_id(scsicmd); in aac_scsi_cmd()
2352 if (scmd_channel(scsicmd) == CONTAINER_CHANNEL) { in aac_scsi_cmd()
2354 (scsicmd->device->lun != 0)) { in aac_scsi_cmd()
2355 scsicmd->result = DID_NO_CONNECT << 16; in aac_scsi_cmd()
2356 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2367 switch (scsicmd->cmnd[0]) { in aac_scsi_cmd()
2371 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16)) in aac_scsi_cmd()
2378 return _aac_probe_container(scsicmd, in aac_scsi_cmd()
2389 return aac_send_srb_fib(scsicmd); in aac_scsi_cmd()
2391 scsicmd->result = DID_NO_CONNECT << 16; in aac_scsi_cmd()
2392 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2400 else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */ in aac_scsi_cmd()
2401 (scsicmd->cmnd[0] != TEST_UNIT_READY)) in aac_scsi_cmd()
2403 …_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0])); in aac_scsi_cmd()
2404 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; in aac_scsi_cmd()
2408 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
2411 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2417 switch (scsicmd->cmnd[0]) { in aac_scsi_cmd()
2425 if ((scsicmd->cmnd[1] & 0x1) && aac_wwn) { in aac_scsi_cmd()
2429 arr[0] = (scmd_id(scsicmd) == host->this_id) ? in aac_scsi_cmd()
2431 if (scsicmd->cmnd[2] == 0) { in aac_scsi_cmd()
2437 arr[1] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2438 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2440 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2442 } else if (scsicmd->cmnd[2] == 0x80) { in aac_scsi_cmd()
2445 scmd_id(scsicmd)); in aac_scsi_cmd()
2446 arr[1] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2447 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2451 scsicmd); in aac_scsi_cmd()
2452 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2454 } else if (scsicmd->cmnd[2] == 0x83) { in aac_scsi_cmd()
2458 scmd_id(scsicmd)); in aac_scsi_cmd()
2461 scsicmd); in aac_scsi_cmd()
2462 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2466 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2472 memcpy(scsicmd->sense_buffer, in aac_scsi_cmd()
2478 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2493 scsi_sg_copy_from_buffer(scsicmd, &inq_data, in aac_scsi_cmd()
2495 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_scsi_cmd()
2496 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2503 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data)); in aac_scsi_cmd()
2504 return aac_get_container_name(scsicmd); in aac_scsi_cmd()
2509 ((scsicmd->cmnd[1] & 0x1f) != SAI_READ_CAPACITY_16)) in aac_scsi_cmd()
2532 alloc_len = ((scsicmd->cmnd[10] << 24) in aac_scsi_cmd()
2533 + (scsicmd->cmnd[11] << 16) in aac_scsi_cmd()
2534 + (scsicmd->cmnd[12] << 8) + scsicmd->cmnd[13]); in aac_scsi_cmd()
2537 scsi_sg_copy_from_buffer(scsicmd, cp, alloc_len); in aac_scsi_cmd()
2538 if (alloc_len < scsi_bufflen(scsicmd)) in aac_scsi_cmd()
2539 scsi_set_resid(scsicmd, in aac_scsi_cmd()
2540 scsi_bufflen(scsicmd) - alloc_len); in aac_scsi_cmd()
2543 scsicmd->device->removable = 1; in aac_scsi_cmd()
2545 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_scsi_cmd()
2546 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2570 scsi_sg_copy_from_buffer(scsicmd, cp, sizeof(cp)); in aac_scsi_cmd()
2572 scsicmd->device->removable = 1; in aac_scsi_cmd()
2573 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
2575 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2605 if (scsicmd->cmnd[1] & 0x8) in aac_scsi_cmd()
2617 mpd.mpc_buf[0] = scsicmd->cmnd[2]; in aac_scsi_cmd()
2618 if (scsicmd->cmnd[2] == 0x1C) { in aac_scsi_cmd()
2638 if (((scsicmd->cmnd[2] & 0x3f) == 8) || in aac_scsi_cmd()
2639 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) { in aac_scsi_cmd()
2648 if (mode_buf_length > scsicmd->cmnd[4]) in aac_scsi_cmd()
2649 mode_buf_length = scsicmd->cmnd[4]; in aac_scsi_cmd()
2652 scsi_sg_copy_from_buffer(scsicmd, in aac_scsi_cmd()
2655 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_scsi_cmd()
2656 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2688 if (scsicmd->cmnd[1] & 0x8) { in aac_scsi_cmd()
2719 if (((scsicmd->cmnd[2] & 0x3f) == 8) || in aac_scsi_cmd()
2720 ((scsicmd->cmnd[2] & 0x3f) == 0x3f)) { in aac_scsi_cmd()
2727 if (mode_buf_length > scsicmd->cmnd[8]) in aac_scsi_cmd()
2728 mode_buf_length = scsicmd->cmnd[8]; in aac_scsi_cmd()
2730 scsi_sg_copy_from_buffer(scsicmd, in aac_scsi_cmd()
2734 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_scsi_cmd()
2735 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2741 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, sizeof (struct sense_data)); in aac_scsi_cmd()
2743 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_scsi_cmd()
2744 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2749 if (scsicmd->cmnd[4]) in aac_scsi_cmd()
2754 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_scsi_cmd()
2755 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2762 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | in aac_scsi_cmd()
2767 memcpy(scsicmd->sense_buffer, in aac_scsi_cmd()
2772 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2781 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD; in aac_scsi_cmd()
2782 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2786 return aac_start_stop(scsicmd); in aac_scsi_cmd()
2789 switch (scsicmd->cmnd[0]) in aac_scsi_cmd()
2803 if (scsicmd->request->rq_disk) in aac_scsi_cmd()
2805 scsicmd->request->rq_disk->disk_name, in aac_scsi_cmd()
2807 sizeof(scsicmd->request->rq_disk->disk_name) + 1)); in aac_scsi_cmd()
2809 return aac_read(scsicmd); in aac_scsi_cmd()
2817 return aac_write(scsicmd); in aac_scsi_cmd()
2821 scsicmd->result = DID_OK << 16 | in aac_scsi_cmd()
2823 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2828 return aac_synchronize(scsicmd); in aac_scsi_cmd()
2834 dprintk((KERN_WARNING "Unhandled SCSI Command: 0x%x.\n", scsicmd->cmnd[0])); in aac_scsi_cmd()
2835 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; in aac_scsi_cmd()
2839 memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, in aac_scsi_cmd()
2843 scsicmd->scsi_done(scsicmd); in aac_scsi_cmd()
2972 struct scsi_cmnd *scsicmd; in aac_srb_callback() local
2974 scsicmd = (struct scsi_cmnd *) context; in aac_srb_callback()
2976 if (!aac_valid_context(scsicmd, fibptr)) in aac_srb_callback()
2982 scsi_dma_unmap(scsicmd); in aac_srb_callback()
2985 if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01) in aac_srb_callback()
2987 aac_expose_phy_device(scsicmd); in aac_srb_callback()
2990 scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */ in aac_srb_callback()
3000 scsi_set_resid(scsicmd, scsi_bufflen(scsicmd) in aac_srb_callback()
3012 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3015 memcpy(scsicmd->sense_buffer, in aac_srb_callback()
3026 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_srb_callback()
3029 switch (scsicmd->cmnd[0]) { in aac_srb_callback()
3039 < scsicmd->underflow) in aac_srb_callback()
3043 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3047 scsicmd->result = DID_OK << 16 in aac_srb_callback()
3052 scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; in aac_srb_callback()
3057 scsicmd->result = DID_ABORT << 16 | ABORT << 8; in aac_srb_callback()
3064 scsicmd->result = DID_ERROR << 16 | ABORT << 8; in aac_srb_callback()
3067 scsicmd->result = DID_PARITY << 16 in aac_srb_callback()
3075 scsicmd->result = DID_NO_CONNECT << 16 in aac_srb_callback()
3081 scsicmd->result = DID_TIME_OUT << 16 in aac_srb_callback()
3086 scsicmd->result = DID_BUS_BUSY << 16 in aac_srb_callback()
3091 scsicmd->result = DID_RESET << 16 in aac_srb_callback()
3096 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3119 scsicmd->cmnd[0], in aac_srb_callback()
3122 if ((scsicmd->cmnd[0] == ATA_12) in aac_srb_callback()
3123 || (scsicmd->cmnd[0] == ATA_16)) { in aac_srb_callback()
3124 if (scsicmd->cmnd[2] & (0x01 << 5)) { in aac_srb_callback()
3125 scsicmd->result = DID_OK << 16 in aac_srb_callback()
3129 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3134 scsicmd->result = DID_ERROR << 16 in aac_srb_callback()
3143 scsicmd->result |= SAM_STAT_CHECK_CONDITION; in aac_srb_callback()
3150 memcpy(scsicmd->sense_buffer, in aac_srb_callback()
3157 scsicmd->result |= le32_to_cpu(srbreply->scsi_status); in aac_srb_callback()
3161 scsicmd->scsi_done(scsicmd); in aac_srb_callback()
3173 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd) in aac_send_srb_fib() argument
3179 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_send_srb_fib()
3180 if (scmd_id(scsicmd) >= dev->maximum_num_physicals || in aac_send_srb_fib()
3181 scsicmd->device->lun > 7) { in aac_send_srb_fib()
3182 scsicmd->result = DID_NO_CONNECT << 16; in aac_send_srb_fib()
3183 scsicmd->scsi_done(scsicmd); in aac_send_srb_fib()
3193 status = aac_adapter_scsi(cmd_fibcontext, scsicmd); in aac_send_srb_fib()
3199 scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; in aac_send_srb_fib()
3210 static long aac_build_sg(struct scsi_cmnd *scsicmd, struct sgmap *psg) in aac_build_sg() argument
3216 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_build_sg()
3222 nseg = scsi_dma_map(scsicmd); in aac_build_sg()
3231 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sg()
3237 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sg()
3239 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sg()
3241 byte_count = scsi_bufflen(scsicmd); in aac_build_sg()
3244 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){ in aac_build_sg()
3246 byte_count, scsicmd->underflow); in aac_build_sg()
3253 static long aac_build_sg64(struct scsi_cmnd *scsicmd, struct sgmap64 *psg) in aac_build_sg64() argument
3260 dev = (struct aac_dev *)scsicmd->device->host->hostdata; in aac_build_sg64()
3267 nseg = scsi_dma_map(scsicmd); in aac_build_sg64()
3274 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sg64()
3284 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sg64()
3286 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sg64()
3288 byte_count = scsi_bufflen(scsicmd); in aac_build_sg64()
3291 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){ in aac_build_sg64()
3293 byte_count, scsicmd->underflow); in aac_build_sg64()
3299 static long aac_build_sgraw(struct scsi_cmnd *scsicmd, struct sgmapraw *psg) in aac_build_sgraw() argument
3313 nseg = scsi_dma_map(scsicmd); in aac_build_sgraw()
3320 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sgraw()
3333 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sgraw()
3335 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sgraw()
3337 byte_count = scsi_bufflen(scsicmd); in aac_build_sgraw()
3340 if(scsicmd->underflow && (byte_count < scsicmd->underflow)){ in aac_build_sgraw()
3342 byte_count, scsicmd->underflow); in aac_build_sgraw()
3348 static long aac_build_sgraw2(struct scsi_cmnd *scsicmd, in aac_build_sgraw2() argument
3354 nseg = scsi_dma_map(scsicmd); in aac_build_sgraw2()
3362 scsi_for_each_sg(scsicmd, sg, nseg, i) { in aac_build_sgraw2()
3387 if (byte_count > scsi_bufflen(scsicmd)) { in aac_build_sgraw2()
3389 (byte_count - scsi_bufflen(scsicmd)); in aac_build_sgraw2()
3391 byte_count = scsi_bufflen(scsicmd); in aac_build_sgraw2()
3418 if (scsicmd->underflow && (byte_count < scsicmd->underflow)) { in aac_build_sgraw2()
3420 byte_count, scsicmd->underflow); in aac_build_sgraw2()