Lines Matching refs:scb
209 #define IPS_DMA_DIR(scb) ((!scb->scsi_cmd || ips_is_passthru(scb->scsi_cmd) || \ argument
210 DMA_NONE == scb->scsi_cmd->sc_data_direction) ? \
212 scb->scsi_cmd->sc_data_direction)
649 ips_scb_t *scb; in ips_release() local
672 scb = &ha->scbs[ha->max_cmds - 1]; in ips_release()
674 ips_init_scb(ha, scb); in ips_release()
676 scb->timeout = ips_cmd_timeout; in ips_release()
677 scb->cdb[0] = IPS_CMD_FLUSH; in ips_release()
679 scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; in ips_release()
680 scb->cmd.flush_cache.command_id = IPS_COMMAND_ID(ha, scb); in ips_release()
681 scb->cmd.flush_cache.state = IPS_NORM_STATE; in ips_release()
682 scb->cmd.flush_cache.reserved = 0; in ips_release()
683 scb->cmd.flush_cache.reserved2 = 0; in ips_release()
684 scb->cmd.flush_cache.reserved3 = 0; in ips_release()
685 scb->cmd.flush_cache.reserved4 = 0; in ips_release()
690 if (ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_ON) == IPS_FAILURE) in ips_release()
723 ips_scb_t *scb; in ips_halt() local
741 scb = &ha->scbs[ha->max_cmds - 1]; in ips_halt()
743 ips_init_scb(ha, scb); in ips_halt()
745 scb->timeout = ips_cmd_timeout; in ips_halt()
746 scb->cdb[0] = IPS_CMD_FLUSH; in ips_halt()
748 scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; in ips_halt()
749 scb->cmd.flush_cache.command_id = IPS_COMMAND_ID(ha, scb); in ips_halt()
750 scb->cmd.flush_cache.state = IPS_NORM_STATE; in ips_halt()
751 scb->cmd.flush_cache.reserved = 0; in ips_halt()
752 scb->cmd.flush_cache.reserved2 = 0; in ips_halt()
753 scb->cmd.flush_cache.reserved3 = 0; in ips_halt()
754 scb->cmd.flush_cache.reserved4 = 0; in ips_halt()
759 if (ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_ON) == in ips_halt()
842 ips_scb_t *scb; in __ips_eh_reset() local
896 scb = &ha->scbs[ha->max_cmds - 1]; in __ips_eh_reset()
898 ips_init_scb(ha, scb); in __ips_eh_reset()
900 scb->timeout = ips_cmd_timeout; in __ips_eh_reset()
901 scb->cdb[0] = IPS_CMD_FLUSH; in __ips_eh_reset()
903 scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; in __ips_eh_reset()
904 scb->cmd.flush_cache.command_id = IPS_COMMAND_ID(ha, scb); in __ips_eh_reset()
905 scb->cmd.flush_cache.state = IPS_NORM_STATE; in __ips_eh_reset()
906 scb->cmd.flush_cache.reserved = 0; in __ips_eh_reset()
907 scb->cmd.flush_cache.reserved2 = 0; in __ips_eh_reset()
908 scb->cmd.flush_cache.reserved3 = 0; in __ips_eh_reset()
909 scb->cmd.flush_cache.reserved4 = 0; in __ips_eh_reset()
912 ret = ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_IORL); in __ips_eh_reset()
942 while ((scb = ips_removeq_scb_head(&ha->scb_activelist))) { in __ips_eh_reset()
943 scb->scsi_cmd->result = DID_ERROR << 16; in __ips_eh_reset()
944 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in __ips_eh_reset()
945 ips_freescb(ha, scb); in __ips_eh_reset()
971 while ((scb = ips_removeq_scb_head(&ha->scb_activelist))) { in __ips_eh_reset()
972 scb->scsi_cmd->result = DID_ERROR << 16; in __ips_eh_reset()
973 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in __ips_eh_reset()
974 ips_freescb(ha, scb); in __ips_eh_reset()
1003 while ((scb = ips_removeq_scb_head(&ha->scb_activelist))) { in __ips_eh_reset()
1004 scb->scsi_cmd->result = DID_RESET << 16; in __ips_eh_reset()
1005 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in __ips_eh_reset()
1006 ips_freescb(ha, scb); in __ips_eh_reset()
1276 ips_scb_t *scb; in ips_intr_copperhead() local
1314 scb = (ips_scb_t *) sp->scb_addr; in ips_intr_copperhead()
1320 (*scb->callback) (ha, scb); in ips_intr_copperhead()
1340 ips_scb_t *scb; in ips_intr_morpheus() local
1384 scb = (ips_scb_t *) sp->scb_addr; in ips_intr_morpheus()
1390 (*scb->callback) (ha, scb); in ips_intr_morpheus()
1564 ips_make_passthru(ips_ha_t *ha, struct scsi_cmnd *SC, ips_scb_t *scb, int intr) in ips_make_passthru() argument
1634 ret = ips_flash_copperhead(ha, pt, scb); in ips_make_passthru()
1639 if (ips_usrcmd(ha, pt, scb)) in ips_make_passthru()
1658 ips_flash_copperhead(ips_ha_t * ha, ips_passthru_t * pt, ips_scb_t * scb) in ips_flash_copperhead() argument
1665 if (ips_usrcmd(ha, pt, scb)) in ips_flash_copperhead()
1672 scb->scsi_cmd->result = DID_OK << 16; in ips_flash_copperhead()
1678 return ips_flash_bios(ha, pt, scb); in ips_flash_copperhead()
1717 return ips_flash_bios(ha, pt, scb); in ips_flash_copperhead()
1719 return ips_flash_firmware(ha, pt, scb); in ips_flash_copperhead()
1730 ips_flash_bios(ips_ha_t * ha, ips_passthru_t * pt, ips_scb_t * scb) in ips_flash_bios() argument
1795 ips_scb_t * scb, int indx, unsigned int e_len) in ips_fill_scb_sg_single() argument
1800 if ((scb->data_len + e_len) > ha->max_xfer) { in ips_fill_scb_sg_single()
1801 e_len = ha->max_xfer - scb->data_len; in ips_fill_scb_sg_single()
1802 scb->breakup = indx; in ips_fill_scb_sg_single()
1803 ++scb->sg_break; in ips_fill_scb_sg_single()
1806 scb->breakup = 0; in ips_fill_scb_sg_single()
1807 scb->sg_break = 0; in ips_fill_scb_sg_single()
1810 scb->sg_list.enh_list[indx].address_lo = in ips_fill_scb_sg_single()
1812 scb->sg_list.enh_list[indx].address_hi = in ips_fill_scb_sg_single()
1814 scb->sg_list.enh_list[indx].length = cpu_to_le32(e_len); in ips_fill_scb_sg_single()
1816 scb->sg_list.std_list[indx].address = in ips_fill_scb_sg_single()
1818 scb->sg_list.std_list[indx].length = cpu_to_le32(e_len); in ips_fill_scb_sg_single()
1821 ++scb->sg_len; in ips_fill_scb_sg_single()
1822 scb->data_len += e_len; in ips_fill_scb_sg_single()
1832 ips_flash_firmware(ips_ha_t * ha, ips_passthru_t * pt, ips_scb_t * scb) in ips_flash_firmware() argument
1849 sg_list.list = scb->sg_list.list; in ips_flash_firmware()
1850 cmd_busaddr = scb->scb_busaddr; in ips_flash_firmware()
1852 memcpy(&scb->cmd, &pt->CoppCP.cmd, sizeof (IPS_IOCTL_CMD)); in ips_flash_firmware()
1854 scb->sg_list.list = sg_list.list; in ips_flash_firmware()
1855 scb->scb_busaddr = cmd_busaddr; in ips_flash_firmware()
1856 scb->bus = scb->scsi_cmd->device->channel; in ips_flash_firmware()
1857 scb->target_id = scb->scsi_cmd->device->id; in ips_flash_firmware()
1858 scb->lun = scb->scsi_cmd->device->lun; in ips_flash_firmware()
1859 scb->sg_len = 0; in ips_flash_firmware()
1860 scb->data_len = 0; in ips_flash_firmware()
1861 scb->flags = 0; in ips_flash_firmware()
1862 scb->op_code = 0; in ips_flash_firmware()
1863 scb->callback = ipsintr_done; in ips_flash_firmware()
1864 scb->timeout = ips_cmd_timeout; in ips_flash_firmware()
1866 scb->data_len = ha->flash_datasize; in ips_flash_firmware()
1867 scb->data_busaddr = in ips_flash_firmware()
1868 pci_map_single(ha->pcidev, ha->flash_data, scb->data_len, in ips_flash_firmware()
1869 IPS_DMA_DIR(scb)); in ips_flash_firmware()
1870 scb->flags |= IPS_SCB_MAP_SINGLE; in ips_flash_firmware()
1871 scb->cmd.flashfw.command_id = IPS_COMMAND_ID(ha, scb); in ips_flash_firmware()
1872 scb->cmd.flashfw.buffer_addr = cpu_to_le32(scb->data_busaddr); in ips_flash_firmware()
1874 scb->timeout = pt->TimeOut; in ips_flash_firmware()
1875 scb->scsi_cmd->result = DID_OK << 16; in ips_flash_firmware()
1905 ips_usrcmd(ips_ha_t * ha, ips_passthru_t * pt, ips_scb_t * scb) in ips_usrcmd() argument
1912 if ((!scb) || (!pt) || (!ha)) in ips_usrcmd()
1916 sg_list.list = scb->sg_list.list; in ips_usrcmd()
1917 cmd_busaddr = scb->scb_busaddr; in ips_usrcmd()
1919 memcpy(&scb->cmd, &pt->CoppCP.cmd, sizeof (IPS_IOCTL_CMD)); in ips_usrcmd()
1920 memcpy(&scb->dcdb, &pt->CoppCP.dcdb, sizeof (IPS_DCDB_TABLE)); in ips_usrcmd()
1923 scb->sg_list.list = sg_list.list; in ips_usrcmd()
1924 scb->scb_busaddr = cmd_busaddr; in ips_usrcmd()
1925 scb->bus = scb->scsi_cmd->device->channel; in ips_usrcmd()
1926 scb->target_id = scb->scsi_cmd->device->id; in ips_usrcmd()
1927 scb->lun = scb->scsi_cmd->device->lun; in ips_usrcmd()
1928 scb->sg_len = 0; in ips_usrcmd()
1929 scb->data_len = 0; in ips_usrcmd()
1930 scb->flags = 0; in ips_usrcmd()
1931 scb->op_code = 0; in ips_usrcmd()
1932 scb->callback = ipsintr_done; in ips_usrcmd()
1933 scb->timeout = ips_cmd_timeout; in ips_usrcmd()
1934 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_usrcmd()
1937 if ((scb->cmd.basic_io.op_code == IPS_CMD_READ_SG) || in ips_usrcmd()
1938 (scb->cmd.basic_io.op_code == IPS_CMD_WRITE_SG) || in ips_usrcmd()
1939 (scb->cmd.basic_io.op_code == IPS_CMD_DCDB_SG)) in ips_usrcmd()
1943 scb->data_len = pt->CmdBSize; in ips_usrcmd()
1944 scb->data_busaddr = ha->ioctl_busaddr + sizeof (ips_passthru_t); in ips_usrcmd()
1946 scb->data_busaddr = 0L; in ips_usrcmd()
1949 if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) in ips_usrcmd()
1950 scb->cmd.dcdb.dcdb_address = cpu_to_le32(scb->scb_busaddr + in ips_usrcmd()
1951 (unsigned long) &scb-> in ips_usrcmd()
1953 (unsigned long) scb); in ips_usrcmd()
1956 if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) in ips_usrcmd()
1957 scb->dcdb.buffer_pointer = in ips_usrcmd()
1958 cpu_to_le32(scb->data_busaddr); in ips_usrcmd()
1960 scb->cmd.basic_io.sg_addr = in ips_usrcmd()
1961 cpu_to_le32(scb->data_busaddr); in ips_usrcmd()
1966 scb->timeout = pt->TimeOut; in ips_usrcmd()
1969 scb->dcdb.cmd_attribute |= IPS_TIMEOUT10; in ips_usrcmd()
1971 scb->dcdb.cmd_attribute |= IPS_TIMEOUT60; in ips_usrcmd()
1973 scb->dcdb.cmd_attribute |= IPS_TIMEOUT20M; in ips_usrcmd()
1977 scb->scsi_cmd->result = DID_OK << 16; in ips_usrcmd()
1993 ips_cleanup_passthru(ips_ha_t * ha, ips_scb_t * scb) in ips_cleanup_passthru() argument
1999 if ((!scb) || (!scb->scsi_cmd) || (!scsi_sglist(scb->scsi_cmd))) { in ips_cleanup_passthru()
2008 if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) /* Copy DCDB Back to Caller's Area */ in ips_cleanup_passthru()
2009 memcpy(&pt->CoppCP.dcdb, &scb->dcdb, sizeof (IPS_DCDB_TABLE)); in ips_cleanup_passthru()
2011 pt->BasicStatus = scb->basic_status; in ips_cleanup_passthru()
2012 pt->ExtendedStatus = scb->extended_status; in ips_cleanup_passthru()
2016 (scb->cmd.flashfw.op_code == IPS_CMD_DOWNLOAD || in ips_cleanup_passthru()
2017 scb->cmd.flashfw.op_code == IPS_CMD_RW_BIOSFW)) in ips_cleanup_passthru()
2020 ips_scmd_buf_write(scb->scsi_cmd, ha->ioctl_data, ha->ioctl_datasize); in ips_cleanup_passthru()
2238 ips_scb_t *scb; in ips_get_bios_version() local
2340 scb = &ha->scbs[ha->max_cmds - 1]; in ips_get_bios_version()
2342 ips_init_scb(ha, scb); in ips_get_bios_version()
2344 scb->timeout = ips_cmd_timeout; in ips_get_bios_version()
2345 scb->cdb[0] = IPS_CMD_RW_BIOSFW; in ips_get_bios_version()
2347 scb->cmd.flashfw.op_code = IPS_CMD_RW_BIOSFW; in ips_get_bios_version()
2348 scb->cmd.flashfw.command_id = IPS_COMMAND_ID(ha, scb); in ips_get_bios_version()
2349 scb->cmd.flashfw.type = 1; in ips_get_bios_version()
2350 scb->cmd.flashfw.direction = 0; in ips_get_bios_version()
2351 scb->cmd.flashfw.count = cpu_to_le32(0x800); in ips_get_bios_version()
2352 scb->cmd.flashfw.total_packets = 1; in ips_get_bios_version()
2353 scb->cmd.flashfw.packet_num = 0; in ips_get_bios_version()
2354 scb->data_len = 0x1000; in ips_get_bios_version()
2355 scb->cmd.flashfw.buffer_addr = ha->ioctl_busaddr; in ips_get_bios_version()
2359 ips_send_wait(ha, scb, ips_cmd_timeout, in ips_get_bios_version()
2362 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) { in ips_get_bios_version()
2537 ips_scb_t *scb; in ips_next() local
2576 (ha->copp_waitlist.head) && (scb = ips_getscb(ha))) { in ips_next()
2582 scb->scsi_cmd = item->scsi_cmd; in ips_next()
2585 ret = ips_make_passthru(ha, scb->scsi_cmd, scb, intr); in ips_next()
2591 if (scb->scsi_cmd) { in ips_next()
2592 scb->scsi_cmd->result = DID_ERROR << 16; in ips_next()
2593 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_next()
2596 ips_freescb(ha, scb); in ips_next()
2599 if (scb->scsi_cmd) { in ips_next()
2600 scb->scsi_cmd->result = DID_OK << 16; in ips_next()
2601 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_next()
2604 ips_freescb(ha, scb); in ips_next()
2615 ret = ips_send_cmd(ha, scb); in ips_next()
2618 ips_putq_scb_head(&ha->scb_activelist, scb); in ips_next()
2624 if (scb->scsi_cmd) { in ips_next()
2625 scb->scsi_cmd->result = DID_ERROR << 16; in ips_next()
2628 ips_freescb(ha, scb); in ips_next()
2631 ips_freescb(ha, scb); in ips_next()
2644 while ((p) && (scb = ips_getscb(ha))) { in ips_next()
2649 ips_freescb(ha, scb); in ips_next()
2663 scb->target_id = SC->device->id; in ips_next()
2664 scb->lun = SC->device->lun; in ips_next()
2665 scb->bus = SC->device->channel; in ips_next()
2666 scb->scsi_cmd = SC; in ips_next()
2667 scb->breakup = 0; in ips_next()
2668 scb->data_len = 0; in ips_next()
2669 scb->callback = ipsintr_done; in ips_next()
2670 scb->timeout = ips_cmd_timeout; in ips_next()
2671 memset(&scb->cmd, 0, 16); in ips_next()
2674 memcpy(scb->cdb, SC->cmnd, SC->cmd_len); in ips_next()
2676 scb->sg_count = scsi_dma_map(SC); in ips_next()
2677 BUG_ON(scb->sg_count < 0); in ips_next()
2678 if (scb->sg_count) { in ips_next()
2682 scb->flags |= IPS_SCB_MAP_SG; in ips_next()
2684 scsi_for_each_sg(SC, sg, scb->sg_count, i) { in ips_next()
2686 (ha, sg_dma_address(sg), scb, i, in ips_next()
2690 scb->dcdb.transfer_length = scb->data_len; in ips_next()
2692 scb->data_busaddr = 0L; in ips_next()
2693 scb->sg_len = 0; in ips_next()
2694 scb->data_len = 0; in ips_next()
2695 scb->dcdb.transfer_length = 0; in ips_next()
2698 scb->dcdb.cmd_attribute = in ips_next()
2699 ips_command_direction[scb->scsi_cmd->cmnd[0]]; in ips_next()
2703 if ((scb->scsi_cmd->cmnd[0] == WRITE_BUFFER) && in ips_next()
2704 (scb->data_len == 0)) in ips_next()
2705 scb->dcdb.cmd_attribute = 0; in ips_next()
2707 if (!(scb->dcdb.cmd_attribute & 0x3)) in ips_next()
2708 scb->dcdb.transfer_length = 0; in ips_next()
2710 if (scb->data_len >= IPS_MAX_XFER) { in ips_next()
2711 scb->dcdb.cmd_attribute |= IPS_TRANSFER64K; in ips_next()
2712 scb->dcdb.transfer_length = 0; in ips_next()
2717 ret = ips_send_cmd(ha, scb); in ips_next()
2721 ips_putq_scb_head(&ha->scb_activelist, scb); in ips_next()
2724 if (scb->scsi_cmd) { in ips_next()
2725 scb->scsi_cmd->result = DID_ERROR << 16; in ips_next()
2726 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_next()
2729 if (scb->bus) in ips_next()
2730 ha->dcdb_active[scb->bus - 1] &= in ips_next()
2731 ~(1 << scb->target_id); in ips_next()
2733 ips_freescb(ha, scb); in ips_next()
2736 if (scb->scsi_cmd) in ips_next()
2737 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_next()
2739 if (scb->bus) in ips_next()
2740 ha->dcdb_active[scb->bus - 1] &= in ips_next()
2741 ~(1 << scb->target_id); in ips_next()
2743 ips_freescb(ha, scb); in ips_next()
3100 ipsintr_blocking(ips_ha_t * ha, ips_scb_t * scb) in ipsintr_blocking() argument
3104 ips_freescb(ha, scb); in ipsintr_blocking()
3105 if ((ha->waitflag == TRUE) && (ha->cmd_in_progress == scb->cdb[0])) { in ipsintr_blocking()
3122 ipsintr_done(ips_ha_t * ha, ips_scb_t * scb) in ipsintr_done() argument
3126 if (!scb) { in ipsintr_done()
3133 if (scb->scsi_cmd == NULL) { in ipsintr_done()
3141 ips_done(ha, scb); in ipsintr_done()
3154 ips_done(ips_ha_t * ha, ips_scb_t * scb) in ips_done() argument
3160 if (!scb) in ips_done()
3163 if ((scb->scsi_cmd) && (ips_is_passthru(scb->scsi_cmd))) { in ips_done()
3164 ips_cleanup_passthru(ha, scb); in ips_done()
3172 if ((scb->breakup) || (scb->sg_break)) { in ips_done()
3177 scb->data_len = 0; in ips_done()
3179 sg = scsi_sglist(scb->scsi_cmd); in ips_done()
3182 sg_dma_index = scb->breakup; in ips_done()
3183 for (i = 0; i < scb->breakup; i++) in ips_done()
3189 scb, ips_sg_index++, in ips_done()
3192 for (; sg_dma_index < scsi_sg_count(scb->scsi_cmd); in ips_done()
3197 scb, ips_sg_index++, in ips_done()
3202 scb->dcdb.transfer_length = scb->data_len; in ips_done()
3203 scb->dcdb.cmd_attribute |= in ips_done()
3204 ips_command_direction[scb->scsi_cmd->cmnd[0]]; in ips_done()
3206 if (!(scb->dcdb.cmd_attribute & 0x3)) in ips_done()
3207 scb->dcdb.transfer_length = 0; in ips_done()
3209 if (scb->data_len >= IPS_MAX_XFER) { in ips_done()
3210 scb->dcdb.cmd_attribute |= IPS_TRANSFER64K; in ips_done()
3211 scb->dcdb.transfer_length = 0; in ips_done()
3214 ret = ips_send_cmd(ha, scb); in ips_done()
3218 if (scb->scsi_cmd) { in ips_done()
3219 scb->scsi_cmd->result = DID_ERROR << 16; in ips_done()
3220 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_done()
3223 ips_freescb(ha, scb); in ips_done()
3226 if (scb->scsi_cmd) { in ips_done()
3227 scb->scsi_cmd->result = DID_ERROR << 16; in ips_done()
3228 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_done()
3231 ips_freescb(ha, scb); in ips_done()
3241 if (scb->bus) { in ips_done()
3242 ha->dcdb_active[scb->bus - 1] &= ~(1 << scb->target_id); in ips_done()
3245 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_done()
3247 ips_freescb(ha, scb); in ips_done()
3260 ips_map_status(ips_ha_t * ha, ips_scb_t * scb, ips_stat_t * sp) in ips_map_status() argument
3270 if (scb->bus) { in ips_map_status()
3274 scb->scsi_cmd->device->channel, in ips_map_status()
3275 scb->scsi_cmd->device->id, scb->scsi_cmd->device->lun, in ips_map_status()
3276 scb->basic_status, scb->extended_status, in ips_map_status()
3277 scb->extended_status == in ips_map_status()
3278 IPS_ERR_CKCOND ? scb->dcdb.sense_info[2] & 0xf : 0, in ips_map_status()
3279 scb->extended_status == in ips_map_status()
3280 IPS_ERR_CKCOND ? scb->dcdb.sense_info[12] : 0, in ips_map_status()
3281 scb->extended_status == in ips_map_status()
3282 IPS_ERR_CKCOND ? scb->dcdb.sense_info[13] : 0); in ips_map_status()
3289 switch (scb->basic_status & IPS_GSC_STATUS_MASK) { in ips_map_status()
3302 switch (scb->extended_status) { in ips_map_status()
3304 if (scb->bus) in ips_map_status()
3310 if ((scb->cmd.dcdb.op_code == IPS_CMD_EXTENDED_DCDB) || in ips_map_status()
3311 (scb->cmd.dcdb.op_code == in ips_map_status()
3313 tapeDCDB = (IPS_DCDB_TABLE_TAPE *) & scb->dcdb; in ips_map_status()
3317 (uint32_t) scb->dcdb.transfer_length; in ips_map_status()
3320 if ((scb->bus) && (transfer_len < scb->data_len)) { in ips_map_status()
3325 if (scb->scsi_cmd->cmnd[0] == INQUIRY) { in ips_map_status()
3326 ips_scmd_buf_read(scb->scsi_cmd, in ips_map_status()
3340 if (scb->bus) in ips_map_status()
3351 if (scb->bus) { in ips_map_status()
3352 if ((scb->cmd.dcdb.op_code == in ips_map_status()
3354 || (scb->cmd.dcdb.op_code == in ips_map_status()
3357 (IPS_DCDB_TABLE_TAPE *) & scb->dcdb; in ips_map_status()
3358 memcpy(scb->scsi_cmd->sense_buffer, in ips_map_status()
3362 memcpy(scb->scsi_cmd->sense_buffer, in ips_map_status()
3363 scb->dcdb.sense_info, in ips_map_status()
3380 scb->scsi_cmd->result = device_error | (errcode << 16); in ips_map_status()
3397 ips_send_wait(ips_ha_t * ha, ips_scb_t * scb, int timeout, int intr) in ips_send_wait() argument
3405 ha->cmd_in_progress = scb->cdb[0]; in ips_send_wait()
3407 scb->callback = ipsintr_blocking; in ips_send_wait()
3408 ret = ips_send_cmd(ha, scb); in ips_send_wait()
3463 ips_send_cmd(ips_ha_t * ha, ips_scb_t * scb) in ips_send_cmd() argument
3475 if (!scb->scsi_cmd) { in ips_send_cmd()
3478 if (scb->bus > 0) { in ips_send_cmd()
3482 (ha->cmd_in_progress == scb->cdb[0])) { in ips_send_cmd()
3488 } else if ((scb->bus == 0) && (!ips_is_passthru(scb->scsi_cmd))) { in ips_send_cmd()
3492 switch (scb->scsi_cmd->cmnd[0]) { in ips_send_cmd()
3498 scb->scsi_cmd->result = DID_ERROR << 16; in ips_send_cmd()
3502 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3506 if (scb->target_id == IPS_ADAPTER_ID) { in ips_send_cmd()
3511 if (scb->scsi_cmd->cmnd[0] == TEST_UNIT_READY) in ips_send_cmd()
3512 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3514 if (scb->scsi_cmd->cmnd[0] == INQUIRY) { in ips_send_cmd()
3540 ips_scmd_buf_write(scb->scsi_cmd, in ips_send_cmd()
3544 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3547 scb->cmd.logical_info.op_code = IPS_CMD_GET_LD_INFO; in ips_send_cmd()
3548 scb->cmd.logical_info.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3549 scb->cmd.logical_info.reserved = 0; in ips_send_cmd()
3550 scb->cmd.logical_info.reserved2 = 0; in ips_send_cmd()
3551 scb->data_len = sizeof (IPS_LD_INFO); in ips_send_cmd()
3552 scb->data_busaddr = ha->logical_drive_info_dma_addr; in ips_send_cmd()
3553 scb->flags = 0; in ips_send_cmd()
3554 scb->cmd.logical_info.buffer_addr = scb->data_busaddr; in ips_send_cmd()
3561 ips_reqsen(ha, scb); in ips_send_cmd()
3562 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3567 if (!scb->sg_len) { in ips_send_cmd()
3568 scb->cmd.basic_io.op_code = in ips_send_cmd()
3569 (scb->scsi_cmd->cmnd[0] == in ips_send_cmd()
3571 scb->cmd.basic_io.enhanced_sg = 0; in ips_send_cmd()
3572 scb->cmd.basic_io.sg_addr = in ips_send_cmd()
3573 cpu_to_le32(scb->data_busaddr); in ips_send_cmd()
3575 scb->cmd.basic_io.op_code = in ips_send_cmd()
3576 (scb->scsi_cmd->cmnd[0] == in ips_send_cmd()
3579 scb->cmd.basic_io.enhanced_sg = in ips_send_cmd()
3581 scb->cmd.basic_io.sg_addr = in ips_send_cmd()
3582 cpu_to_le32(scb->sg_busaddr); in ips_send_cmd()
3585 scb->cmd.basic_io.segment_4G = 0; in ips_send_cmd()
3586 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3587 scb->cmd.basic_io.log_drv = scb->target_id; in ips_send_cmd()
3588 scb->cmd.basic_io.sg_count = scb->sg_len; in ips_send_cmd()
3590 if (scb->cmd.basic_io.lba) in ips_send_cmd()
3591 le32_add_cpu(&scb->cmd.basic_io.lba, in ips_send_cmd()
3592 le16_to_cpu(scb->cmd.basic_io. in ips_send_cmd()
3595 scb->cmd.basic_io.lba = in ips_send_cmd()
3596 (((scb->scsi_cmd-> in ips_send_cmd()
3597 cmnd[1] & 0x1f) << 16) | (scb->scsi_cmd-> in ips_send_cmd()
3599 (scb->scsi_cmd->cmnd[3])); in ips_send_cmd()
3601 scb->cmd.basic_io.sector_count = in ips_send_cmd()
3602 cpu_to_le16(scb->data_len / IPS_BLKSIZE); in ips_send_cmd()
3604 if (le16_to_cpu(scb->cmd.basic_io.sector_count) == 0) in ips_send_cmd()
3605 scb->cmd.basic_io.sector_count = in ips_send_cmd()
3613 if (!scb->sg_len) { in ips_send_cmd()
3614 scb->cmd.basic_io.op_code = in ips_send_cmd()
3615 (scb->scsi_cmd->cmnd[0] == in ips_send_cmd()
3617 scb->cmd.basic_io.enhanced_sg = 0; in ips_send_cmd()
3618 scb->cmd.basic_io.sg_addr = in ips_send_cmd()
3619 cpu_to_le32(scb->data_busaddr); in ips_send_cmd()
3621 scb->cmd.basic_io.op_code = in ips_send_cmd()
3622 (scb->scsi_cmd->cmnd[0] == in ips_send_cmd()
3625 scb->cmd.basic_io.enhanced_sg = in ips_send_cmd()
3627 scb->cmd.basic_io.sg_addr = in ips_send_cmd()
3628 cpu_to_le32(scb->sg_busaddr); in ips_send_cmd()
3631 scb->cmd.basic_io.segment_4G = 0; in ips_send_cmd()
3632 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3633 scb->cmd.basic_io.log_drv = scb->target_id; in ips_send_cmd()
3634 scb->cmd.basic_io.sg_count = scb->sg_len; in ips_send_cmd()
3636 if (scb->cmd.basic_io.lba) in ips_send_cmd()
3637 le32_add_cpu(&scb->cmd.basic_io.lba, in ips_send_cmd()
3638 le16_to_cpu(scb->cmd.basic_io. in ips_send_cmd()
3641 scb->cmd.basic_io.lba = in ips_send_cmd()
3642 ((scb->scsi_cmd->cmnd[2] << 24) | (scb-> in ips_send_cmd()
3646 (scb->scsi_cmd->cmnd[4] << 8) | scb-> in ips_send_cmd()
3649 scb->cmd.basic_io.sector_count = in ips_send_cmd()
3650 cpu_to_le16(scb->data_len / IPS_BLKSIZE); in ips_send_cmd()
3652 if (cpu_to_le16(scb->cmd.basic_io.sector_count) == 0) { in ips_send_cmd()
3658 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3666 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3670 scb->cmd.basic_io.op_code = IPS_CMD_ENQUIRY; in ips_send_cmd()
3671 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3672 scb->cmd.basic_io.segment_4G = 0; in ips_send_cmd()
3673 scb->cmd.basic_io.enhanced_sg = 0; in ips_send_cmd()
3674 scb->data_len = sizeof (*ha->enq); in ips_send_cmd()
3675 scb->cmd.basic_io.sg_addr = ha->enq_busaddr; in ips_send_cmd()
3680 scb->cmd.logical_info.op_code = IPS_CMD_GET_LD_INFO; in ips_send_cmd()
3681 scb->cmd.logical_info.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3682 scb->cmd.logical_info.reserved = 0; in ips_send_cmd()
3683 scb->cmd.logical_info.reserved2 = 0; in ips_send_cmd()
3684 scb->cmd.logical_info.reserved3 = 0; in ips_send_cmd()
3685 scb->data_len = sizeof (IPS_LD_INFO); in ips_send_cmd()
3686 scb->data_busaddr = ha->logical_drive_info_dma_addr; in ips_send_cmd()
3687 scb->flags = 0; in ips_send_cmd()
3688 scb->cmd.logical_info.buffer_addr = scb->data_busaddr; in ips_send_cmd()
3700 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3707 sp = (char *) scb->scsi_cmd->sense_buffer; in ips_send_cmd()
3716 scb->scsi_cmd->result = device_error | (DID_OK << 16); in ips_send_cmd()
3725 if (scb->bus > 0) { in ips_send_cmd()
3729 if (ha->conf->dev[scb->bus - 1][scb->target_id].ucState == 0) { in ips_send_cmd()
3730 scb->scsi_cmd->result = DID_NO_CONNECT << 16; in ips_send_cmd()
3734 ha->dcdb_active[scb->bus - 1] |= (1 << scb->target_id); in ips_send_cmd()
3735 scb->cmd.dcdb.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3736 scb->cmd.dcdb.dcdb_address = cpu_to_le32(scb->scb_busaddr + in ips_send_cmd()
3737 (unsigned long) &scb-> in ips_send_cmd()
3739 (unsigned long) scb); in ips_send_cmd()
3740 scb->cmd.dcdb.reserved = 0; in ips_send_cmd()
3741 scb->cmd.dcdb.reserved2 = 0; in ips_send_cmd()
3742 scb->cmd.dcdb.reserved3 = 0; in ips_send_cmd()
3743 scb->cmd.dcdb.segment_4G = 0; in ips_send_cmd()
3744 scb->cmd.dcdb.enhanced_sg = 0; in ips_send_cmd()
3746 TimeOut = scb->scsi_cmd->request->timeout; in ips_send_cmd()
3749 if (!scb->sg_len) { in ips_send_cmd()
3750 scb->cmd.dcdb.op_code = IPS_CMD_EXTENDED_DCDB; in ips_send_cmd()
3752 scb->cmd.dcdb.op_code = in ips_send_cmd()
3754 scb->cmd.dcdb.enhanced_sg = in ips_send_cmd()
3758 tapeDCDB = (IPS_DCDB_TABLE_TAPE *) & scb->dcdb; /* Use Same Data Area as Old DCDB Struct */ in ips_send_cmd()
3760 ((scb->bus - 1) << 4) | scb->target_id; in ips_send_cmd()
3773 tapeDCDB->cdb_length = scb->scsi_cmd->cmd_len; in ips_send_cmd()
3775 tapeDCDB->transfer_length = scb->data_len; in ips_send_cmd()
3776 if (scb->cmd.dcdb.op_code == IPS_CMD_EXTENDED_DCDB_SG) in ips_send_cmd()
3778 cpu_to_le32(scb->sg_busaddr); in ips_send_cmd()
3781 cpu_to_le32(scb->data_busaddr); in ips_send_cmd()
3782 tapeDCDB->sg_count = scb->sg_len; in ips_send_cmd()
3786 memcpy(tapeDCDB->scsi_cdb, scb->scsi_cmd->cmnd, in ips_send_cmd()
3787 scb->scsi_cmd->cmd_len); in ips_send_cmd()
3789 if (!scb->sg_len) { in ips_send_cmd()
3790 scb->cmd.dcdb.op_code = IPS_CMD_DCDB; in ips_send_cmd()
3792 scb->cmd.dcdb.op_code = IPS_CMD_DCDB_SG; in ips_send_cmd()
3793 scb->cmd.dcdb.enhanced_sg = in ips_send_cmd()
3797 scb->dcdb.device_address = in ips_send_cmd()
3798 ((scb->bus - 1) << 4) | scb->target_id; in ips_send_cmd()
3799 scb->dcdb.cmd_attribute |= IPS_DISCONNECT_ALLOWED; in ips_send_cmd()
3803 scb->dcdb.cmd_attribute |= IPS_TIMEOUT10; /* TimeOut is 10 Seconds */ in ips_send_cmd()
3805 scb->dcdb.cmd_attribute |= IPS_TIMEOUT60; /* TimeOut is 60 Seconds */ in ips_send_cmd()
3807 scb->dcdb.cmd_attribute |= IPS_TIMEOUT20M; /* TimeOut is 20 Minutes */ in ips_send_cmd()
3810 scb->dcdb.transfer_length = scb->data_len; in ips_send_cmd()
3811 if (scb->dcdb.cmd_attribute & IPS_TRANSFER64K) in ips_send_cmd()
3812 scb->dcdb.transfer_length = 0; in ips_send_cmd()
3813 if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB_SG) in ips_send_cmd()
3814 scb->dcdb.buffer_pointer = in ips_send_cmd()
3815 cpu_to_le32(scb->sg_busaddr); in ips_send_cmd()
3817 scb->dcdb.buffer_pointer = in ips_send_cmd()
3818 cpu_to_le32(scb->data_busaddr); in ips_send_cmd()
3819 scb->dcdb.cdb_length = scb->scsi_cmd->cmd_len; in ips_send_cmd()
3820 scb->dcdb.sense_length = sizeof (scb->dcdb.sense_info); in ips_send_cmd()
3821 scb->dcdb.sg_count = scb->sg_len; in ips_send_cmd()
3822 scb->dcdb.reserved = 0; in ips_send_cmd()
3823 memcpy(scb->dcdb.scsi_cdb, scb->scsi_cmd->cmnd, in ips_send_cmd()
3824 scb->scsi_cmd->cmd_len); in ips_send_cmd()
3825 scb->dcdb.scsi_status = 0; in ips_send_cmd()
3826 scb->dcdb.reserved2[0] = 0; in ips_send_cmd()
3827 scb->dcdb.reserved2[1] = 0; in ips_send_cmd()
3828 scb->dcdb.reserved2[2] = 0; in ips_send_cmd()
3832 return ((*ha->func.issue) (ha, scb)); in ips_send_cmd()
3847 ips_scb_t *scb; in ips_chkstatus() local
3856 scb = &ha->scbs[pstatus->fields.command_id]; in ips_chkstatus()
3857 scb->basic_status = basic_status = in ips_chkstatus()
3859 scb->extended_status = ext_status = pstatus->fields.extended_status; in ips_chkstatus()
3863 sp->scb_addr = (void *) scb; in ips_chkstatus()
3866 ips_removeq_scb(&ha->scb_activelist, scb); in ips_chkstatus()
3868 if (!scb->scsi_cmd) in ips_chkstatus()
3875 scb->cdb[0], in ips_chkstatus()
3876 scb->cmd.basic_io.command_id, in ips_chkstatus()
3877 scb->bus, scb->target_id, scb->lun); in ips_chkstatus()
3879 if ((scb->scsi_cmd) && (ips_is_passthru(scb->scsi_cmd))) in ips_chkstatus()
3888 if (scb->bus == 0) { in ips_chkstatus()
3894 scb->cmd.basic_io.op_code, in ips_chkstatus()
3898 switch (scb->scsi_cmd->cmnd[0]) { in ips_chkstatus()
3911 if (!ips_online(ha, scb)) { in ips_chkstatus()
3917 if (ips_online(ha, scb)) { in ips_chkstatus()
3918 ips_inquiry(ha, scb); in ips_chkstatus()
3925 ips_reqsen(ha, scb); in ips_chkstatus()
3937 if (!ips_online(ha, scb) in ips_chkstatus()
3938 || !ips_msense(ha, scb)) { in ips_chkstatus()
3944 if (ips_online(ha, scb)) in ips_chkstatus()
3945 ips_rdcap(ha, scb); in ips_chkstatus()
3970 scb->scsi_cmd->result = errcode << 16; in ips_chkstatus()
3973 if (scb->scsi_cmd->cmnd[0] == INQUIRY) { in ips_chkstatus()
3974 ips_scmd_buf_read(scb->scsi_cmd, in ips_chkstatus()
3977 scb->scsi_cmd->result = DID_TIME_OUT << 16; in ips_chkstatus()
3981 if (scb->bus == 0) { in ips_chkstatus()
3985 scb->cmd.basic_io.op_code, basic_status, in ips_chkstatus()
3989 ips_map_status(ha, scb, sp); in ips_chkstatus()
4003 ips_online(ips_ha_t * ha, ips_scb_t * scb) in ips_online() argument
4007 if (scb->target_id >= IPS_MAX_LD) in ips_online()
4010 if ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1) { in ips_online()
4015 if (ha->logical_drive_info->drive_info[scb->target_id].state != in ips_online()
4017 && ha->logical_drive_info->drive_info[scb->target_id].state != in ips_online()
4019 && ha->logical_drive_info->drive_info[scb->target_id].state != in ips_online()
4021 && ha->logical_drive_info->drive_info[scb->target_id].state != in ips_online()
4038 ips_inquiry(ips_ha_t * ha, ips_scb_t * scb) in ips_inquiry() argument
4058 ips_scmd_buf_write(scb->scsi_cmd, &inquiry, sizeof (inquiry)); in ips_inquiry()
4073 ips_rdcap(ips_ha_t * ha, ips_scb_t * scb) in ips_rdcap() argument
4079 if (scsi_bufflen(scb->scsi_cmd) < 8) in ips_rdcap()
4085 drive_info[scb->target_id].sector_count) - 1); in ips_rdcap()
4088 ips_scmd_buf_write(scb->scsi_cmd, &cap, sizeof (cap)); in ips_rdcap()
4103 ips_msense(ips_ha_t * ha, ips_scb_t * scb) in ips_msense() argument
4112 if (le32_to_cpu(ha->enq->ulDriveSize[scb->target_id]) > 0x400000 && in ips_msense()
4122 (le32_to_cpu(ha->enq->ulDriveSize[scb->target_id]) - in ips_msense()
4129 switch (scb->scsi_cmd->cmnd[2] & 0x3f) { in ips_msense()
4179 ips_scmd_buf_write(scb->scsi_cmd, &mdata, sizeof (mdata)); in ips_msense()
4194 ips_reqsen(ips_ha_t * ha, ips_scb_t * scb) in ips_reqsen() argument
4208 ips_scmd_buf_write(scb->scsi_cmd, &reqsen, sizeof (reqsen)); in ips_reqsen()
4380 ips_init_scb(ips_ha_t * ha, ips_scb_t * scb) in ips_init_scb() argument
4386 if (scb == NULL) in ips_init_scb()
4389 sg_list.list = scb->sg_list.list; in ips_init_scb()
4390 cmd_busaddr = scb->scb_busaddr; in ips_init_scb()
4391 sg_busaddr = scb->sg_busaddr; in ips_init_scb()
4393 memset(scb, 0, sizeof (ips_scb_t)); in ips_init_scb()
4403 scb->scb_busaddr = cmd_busaddr; in ips_init_scb()
4404 scb->sg_busaddr = sg_busaddr; in ips_init_scb()
4405 scb->sg_list.list = sg_list.list; in ips_init_scb()
4408 scb->cmd.basic_io.cccr = cpu_to_le32((uint32_t) IPS_BIT_ILE); in ips_init_scb()
4409 scb->cmd.basic_io.ccsar = cpu_to_le32(ha->adapt->hw_status_start in ips_init_scb()
4427 ips_scb_t *scb; in ips_getscb() local
4431 if ((scb = ha->scb_freelist) == NULL) { in ips_getscb()
4436 ha->scb_freelist = scb->q_next; in ips_getscb()
4437 scb->flags = 0; in ips_getscb()
4438 scb->q_next = NULL; in ips_getscb()
4440 ips_init_scb(ha, scb); in ips_getscb()
4442 return (scb); in ips_getscb()
4457 ips_freescb(ips_ha_t * ha, ips_scb_t * scb) in ips_freescb() argument
4461 if (scb->flags & IPS_SCB_MAP_SG) in ips_freescb()
4462 scsi_dma_unmap(scb->scsi_cmd); in ips_freescb()
4463 else if (scb->flags & IPS_SCB_MAP_SINGLE) in ips_freescb()
4464 pci_unmap_single(ha->pcidev, scb->data_busaddr, scb->data_len, in ips_freescb()
4465 IPS_DMA_DIR(scb)); in ips_freescb()
4468 if (IPS_COMMAND_ID(ha, scb) < (ha->max_cmds - 1)) { in ips_freescb()
4469 scb->q_next = ha->scb_freelist; in ips_freescb()
4470 ha->scb_freelist = scb; in ips_freescb()
4570 ips_scb_t *scb; in ips_flush_and_reset() local
4577 scb = pci_alloc_consistent(ha->pcidev, sizeof(ips_scb_t), &command_dma); in ips_flush_and_reset()
4578 if (scb) { in ips_flush_and_reset()
4579 memset(scb, 0, sizeof(ips_scb_t)); in ips_flush_and_reset()
4580 ips_init_scb(ha, scb); in ips_flush_and_reset()
4581 scb->scb_busaddr = command_dma; in ips_flush_and_reset()
4583 scb->timeout = ips_cmd_timeout; in ips_flush_and_reset()
4584 scb->cdb[0] = IPS_CMD_FLUSH; in ips_flush_and_reset()
4586 scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; in ips_flush_and_reset()
4587 … scb->cmd.flush_cache.command_id = IPS_MAX_CMDS; /* Use an ID that would otherwise not exist */ in ips_flush_and_reset()
4588 scb->cmd.flush_cache.state = IPS_NORM_STATE; in ips_flush_and_reset()
4589 scb->cmd.flush_cache.reserved = 0; in ips_flush_and_reset()
4590 scb->cmd.flush_cache.reserved2 = 0; in ips_flush_and_reset()
4591 scb->cmd.flush_cache.reserved3 = 0; in ips_flush_and_reset()
4592 scb->cmd.flush_cache.reserved4 = 0; in ips_flush_and_reset()
4594 ret = ips_send_cmd(ha, scb); /* Send the Flush Command */ in ips_flush_and_reset()
4612 pci_free_consistent(ha->pcidev, sizeof(ips_scb_t), scb, command_dma); in ips_flush_and_reset()
5287 ips_issue_copperhead(ips_ha_t * ha, ips_scb_t * scb) in ips_issue_copperhead() argument
5294 if (scb->scsi_cmd) { in ips_issue_copperhead()
5298 scb->cdb[0], in ips_issue_copperhead()
5299 scb->cmd.basic_io.command_id, in ips_issue_copperhead()
5300 scb->bus, scb->target_id, scb->lun); in ips_issue_copperhead()
5303 ips_name, ha->host_num, scb->cmd.basic_io.command_id); in ips_issue_copperhead()
5325 outl(scb->scb_busaddr, ha->io_addr + IPS_REG_CCSAR); in ips_issue_copperhead()
5341 ips_issue_copperhead_memio(ips_ha_t * ha, ips_scb_t * scb) in ips_issue_copperhead_memio() argument
5348 if (scb->scsi_cmd) { in ips_issue_copperhead_memio()
5352 scb->cdb[0], in ips_issue_copperhead_memio()
5353 scb->cmd.basic_io.command_id, in ips_issue_copperhead_memio()
5354 scb->bus, scb->target_id, scb->lun); in ips_issue_copperhead_memio()
5357 ips_name, ha->host_num, scb->cmd.basic_io.command_id); in ips_issue_copperhead_memio()
5378 writel(scb->scb_busaddr, ha->mem_ptr + IPS_REG_CCSAR); in ips_issue_copperhead_memio()
5394 ips_issue_i2o(ips_ha_t * ha, ips_scb_t * scb) in ips_issue_i2o() argument
5399 if (scb->scsi_cmd) { in ips_issue_i2o()
5403 scb->cdb[0], in ips_issue_i2o()
5404 scb->cmd.basic_io.command_id, in ips_issue_i2o()
5405 scb->bus, scb->target_id, scb->lun); in ips_issue_i2o()
5408 ips_name, ha->host_num, scb->cmd.basic_io.command_id); in ips_issue_i2o()
5411 outl(scb->scb_busaddr, ha->io_addr + IPS_REG_I2O_INMSGQ); in ips_issue_i2o()
5426 ips_issue_i2o_memio(ips_ha_t * ha, ips_scb_t * scb) in ips_issue_i2o_memio() argument
5431 if (scb->scsi_cmd) { in ips_issue_i2o_memio()
5435 scb->cdb[0], in ips_issue_i2o_memio()
5436 scb->cmd.basic_io.command_id, in ips_issue_i2o_memio()
5437 scb->bus, scb->target_id, scb->lun); in ips_issue_i2o_memio()
5440 ips_name, ha->host_num, scb->cmd.basic_io.command_id); in ips_issue_i2o_memio()
5443 writel(scb->scb_busaddr, ha->mem_ptr + IPS_REG_I2O_INMSGQ); in ips_issue_i2o_memio()
5673 ips_scb_t *scb; in ips_read_adapter_status() local
5678 scb = &ha->scbs[ha->max_cmds - 1]; in ips_read_adapter_status()
5680 ips_init_scb(ha, scb); in ips_read_adapter_status()
5682 scb->timeout = ips_cmd_timeout; in ips_read_adapter_status()
5683 scb->cdb[0] = IPS_CMD_ENQUIRY; in ips_read_adapter_status()
5685 scb->cmd.basic_io.op_code = IPS_CMD_ENQUIRY; in ips_read_adapter_status()
5686 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_read_adapter_status()
5687 scb->cmd.basic_io.sg_count = 0; in ips_read_adapter_status()
5688 scb->cmd.basic_io.lba = 0; in ips_read_adapter_status()
5689 scb->cmd.basic_io.sector_count = 0; in ips_read_adapter_status()
5690 scb->cmd.basic_io.log_drv = 0; in ips_read_adapter_status()
5691 scb->data_len = sizeof (*ha->enq); in ips_read_adapter_status()
5692 scb->cmd.basic_io.sg_addr = ha->enq_busaddr; in ips_read_adapter_status()
5696 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_read_adapter_status()
5698 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) in ips_read_adapter_status()
5716 ips_scb_t *scb; in ips_read_subsystem_parameters() local
5721 scb = &ha->scbs[ha->max_cmds - 1]; in ips_read_subsystem_parameters()
5723 ips_init_scb(ha, scb); in ips_read_subsystem_parameters()
5725 scb->timeout = ips_cmd_timeout; in ips_read_subsystem_parameters()
5726 scb->cdb[0] = IPS_CMD_GET_SUBSYS; in ips_read_subsystem_parameters()
5728 scb->cmd.basic_io.op_code = IPS_CMD_GET_SUBSYS; in ips_read_subsystem_parameters()
5729 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_read_subsystem_parameters()
5730 scb->cmd.basic_io.sg_count = 0; in ips_read_subsystem_parameters()
5731 scb->cmd.basic_io.lba = 0; in ips_read_subsystem_parameters()
5732 scb->cmd.basic_io.sector_count = 0; in ips_read_subsystem_parameters()
5733 scb->cmd.basic_io.log_drv = 0; in ips_read_subsystem_parameters()
5734 scb->data_len = sizeof (*ha->subsys); in ips_read_subsystem_parameters()
5735 scb->cmd.basic_io.sg_addr = ha->ioctl_busaddr; in ips_read_subsystem_parameters()
5739 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_read_subsystem_parameters()
5741 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) in ips_read_subsystem_parameters()
5760 ips_scb_t *scb; in ips_read_config() local
5770 scb = &ha->scbs[ha->max_cmds - 1]; in ips_read_config()
5772 ips_init_scb(ha, scb); in ips_read_config()
5774 scb->timeout = ips_cmd_timeout; in ips_read_config()
5775 scb->cdb[0] = IPS_CMD_READ_CONF; in ips_read_config()
5777 scb->cmd.basic_io.op_code = IPS_CMD_READ_CONF; in ips_read_config()
5778 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_read_config()
5779 scb->data_len = sizeof (*ha->conf); in ips_read_config()
5780 scb->cmd.basic_io.sg_addr = ha->ioctl_busaddr; in ips_read_config()
5784 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_read_config()
5786 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) { in ips_read_config()
5795 if ((scb->basic_status & IPS_GSC_STATUS_MASK) == in ips_read_config()
5818 ips_scb_t *scb; in ips_readwrite_page5() local
5823 scb = &ha->scbs[ha->max_cmds - 1]; in ips_readwrite_page5()
5825 ips_init_scb(ha, scb); in ips_readwrite_page5()
5827 scb->timeout = ips_cmd_timeout; in ips_readwrite_page5()
5828 scb->cdb[0] = IPS_CMD_RW_NVRAM_PAGE; in ips_readwrite_page5()
5830 scb->cmd.nvram.op_code = IPS_CMD_RW_NVRAM_PAGE; in ips_readwrite_page5()
5831 scb->cmd.nvram.command_id = IPS_COMMAND_ID(ha, scb); in ips_readwrite_page5()
5832 scb->cmd.nvram.page = 5; in ips_readwrite_page5()
5833 scb->cmd.nvram.write = write; in ips_readwrite_page5()
5834 scb->cmd.nvram.reserved = 0; in ips_readwrite_page5()
5835 scb->cmd.nvram.reserved2 = 0; in ips_readwrite_page5()
5836 scb->data_len = sizeof (*ha->nvram); in ips_readwrite_page5()
5837 scb->cmd.nvram.buffer_addr = ha->ioctl_busaddr; in ips_readwrite_page5()
5843 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_readwrite_page5()
5845 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) { in ips_readwrite_page5()
5868 ips_scb_t *scb; in ips_clear_adapter() local
5873 scb = &ha->scbs[ha->max_cmds - 1]; in ips_clear_adapter()
5875 ips_init_scb(ha, scb); in ips_clear_adapter()
5877 scb->timeout = ips_reset_timeout; in ips_clear_adapter()
5878 scb->cdb[0] = IPS_CMD_CONFIG_SYNC; in ips_clear_adapter()
5880 scb->cmd.config_sync.op_code = IPS_CMD_CONFIG_SYNC; in ips_clear_adapter()
5881 scb->cmd.config_sync.command_id = IPS_COMMAND_ID(ha, scb); in ips_clear_adapter()
5882 scb->cmd.config_sync.channel = 0; in ips_clear_adapter()
5883 scb->cmd.config_sync.source_target = IPS_POCL; in ips_clear_adapter()
5884 scb->cmd.config_sync.reserved = 0; in ips_clear_adapter()
5885 scb->cmd.config_sync.reserved2 = 0; in ips_clear_adapter()
5886 scb->cmd.config_sync.reserved3 = 0; in ips_clear_adapter()
5890 ips_send_wait(ha, scb, ips_reset_timeout, intr)) == IPS_FAILURE) in ips_clear_adapter()
5892 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) in ips_clear_adapter()
5896 ips_init_scb(ha, scb); in ips_clear_adapter()
5898 scb->cdb[0] = IPS_CMD_ERROR_TABLE; in ips_clear_adapter()
5899 scb->timeout = ips_reset_timeout; in ips_clear_adapter()
5901 scb->cmd.unlock_stripe.op_code = IPS_CMD_ERROR_TABLE; in ips_clear_adapter()
5902 scb->cmd.unlock_stripe.command_id = IPS_COMMAND_ID(ha, scb); in ips_clear_adapter()
5903 scb->cmd.unlock_stripe.log_drv = 0; in ips_clear_adapter()
5904 scb->cmd.unlock_stripe.control = IPS_CSL; in ips_clear_adapter()
5905 scb->cmd.unlock_stripe.reserved = 0; in ips_clear_adapter()
5906 scb->cmd.unlock_stripe.reserved2 = 0; in ips_clear_adapter()
5907 scb->cmd.unlock_stripe.reserved3 = 0; in ips_clear_adapter()
5911 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_clear_adapter()
5913 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) in ips_clear_adapter()
5931 ips_scb_t *scb; in ips_ffdc_reset() local
5935 scb = &ha->scbs[ha->max_cmds - 1]; in ips_ffdc_reset()
5937 ips_init_scb(ha, scb); in ips_ffdc_reset()
5939 scb->timeout = ips_cmd_timeout; in ips_ffdc_reset()
5940 scb->cdb[0] = IPS_CMD_FFDC; in ips_ffdc_reset()
5941 scb->cmd.ffdc.op_code = IPS_CMD_FFDC; in ips_ffdc_reset()
5942 scb->cmd.ffdc.command_id = IPS_COMMAND_ID(ha, scb); in ips_ffdc_reset()
5943 scb->cmd.ffdc.reset_count = ha->reset_count; in ips_ffdc_reset()
5944 scb->cmd.ffdc.reset_type = 0x80; in ips_ffdc_reset()
5947 ips_fix_ffdc_time(ha, scb, ha->last_ffdc); in ips_ffdc_reset()
5950 ips_send_wait(ha, scb, ips_cmd_timeout, intr); in ips_ffdc_reset()
5965 ips_scb_t *scb; in ips_ffdc_time() local
5971 scb = &ha->scbs[ha->max_cmds - 1]; in ips_ffdc_time()
5973 ips_init_scb(ha, scb); in ips_ffdc_time()
5975 scb->timeout = ips_cmd_timeout; in ips_ffdc_time()
5976 scb->cdb[0] = IPS_CMD_FFDC; in ips_ffdc_time()
5977 scb->cmd.ffdc.op_code = IPS_CMD_FFDC; in ips_ffdc_time()
5978 scb->cmd.ffdc.command_id = IPS_COMMAND_ID(ha, scb); in ips_ffdc_time()
5979 scb->cmd.ffdc.reset_count = 0; in ips_ffdc_time()
5980 scb->cmd.ffdc.reset_type = 0; in ips_ffdc_time()
5983 ips_fix_ffdc_time(ha, scb, ha->last_ffdc); in ips_ffdc_time()
5986 ips_send_wait(ha, scb, ips_cmd_timeout, IPS_FFDC); in ips_ffdc_time()
5998 ips_fix_ffdc_time(ips_ha_t * ha, ips_scb_t * scb, time_t current_time) in ips_fix_ffdc_time() argument
6025 scb->cmd.ffdc.hour = (rem / IPS_SECS_HOUR); in ips_fix_ffdc_time()
6027 scb->cmd.ffdc.minute = (rem / IPS_SECS_MIN); in ips_fix_ffdc_time()
6028 scb->cmd.ffdc.second = (rem % IPS_SECS_MIN); in ips_fix_ffdc_time()
6043 scb->cmd.ffdc.yearH = year / 100; in ips_fix_ffdc_time()
6044 scb->cmd.ffdc.yearL = year % 100; in ips_fix_ffdc_time()
6049 scb->cmd.ffdc.month = i + 1; in ips_fix_ffdc_time()
6050 scb->cmd.ffdc.day = days + 1; in ips_fix_ffdc_time()