Lines Matching refs:scb

213 #define IPS_DMA_DIR(scb) ((!scb->scsi_cmd || ips_is_passthru(scb->scsi_cmd) || \  argument
214 DMA_NONE == scb->scsi_cmd->sc_data_direction) ? \
216 scb->scsi_cmd->sc_data_direction)
653 ips_scb_t *scb; in ips_release() local
676 scb = &ha->scbs[ha->max_cmds - 1]; in ips_release()
678 ips_init_scb(ha, scb); in ips_release()
680 scb->timeout = ips_cmd_timeout; in ips_release()
681 scb->cdb[0] = IPS_CMD_FLUSH; in ips_release()
683 scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; in ips_release()
684 scb->cmd.flush_cache.command_id = IPS_COMMAND_ID(ha, scb); in ips_release()
685 scb->cmd.flush_cache.state = IPS_NORM_STATE; in ips_release()
686 scb->cmd.flush_cache.reserved = 0; in ips_release()
687 scb->cmd.flush_cache.reserved2 = 0; in ips_release()
688 scb->cmd.flush_cache.reserved3 = 0; in ips_release()
689 scb->cmd.flush_cache.reserved4 = 0; in ips_release()
694 if (ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_ON) == IPS_FAILURE) in ips_release()
727 ips_scb_t *scb; in ips_halt() local
745 scb = &ha->scbs[ha->max_cmds - 1]; in ips_halt()
747 ips_init_scb(ha, scb); in ips_halt()
749 scb->timeout = ips_cmd_timeout; in ips_halt()
750 scb->cdb[0] = IPS_CMD_FLUSH; in ips_halt()
752 scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; in ips_halt()
753 scb->cmd.flush_cache.command_id = IPS_COMMAND_ID(ha, scb); in ips_halt()
754 scb->cmd.flush_cache.state = IPS_NORM_STATE; in ips_halt()
755 scb->cmd.flush_cache.reserved = 0; in ips_halt()
756 scb->cmd.flush_cache.reserved2 = 0; in ips_halt()
757 scb->cmd.flush_cache.reserved3 = 0; in ips_halt()
758 scb->cmd.flush_cache.reserved4 = 0; in ips_halt()
763 if (ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_ON) == in ips_halt()
846 ips_scb_t *scb; in __ips_eh_reset() local
900 scb = &ha->scbs[ha->max_cmds - 1]; in __ips_eh_reset()
902 ips_init_scb(ha, scb); in __ips_eh_reset()
904 scb->timeout = ips_cmd_timeout; in __ips_eh_reset()
905 scb->cdb[0] = IPS_CMD_FLUSH; in __ips_eh_reset()
907 scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; in __ips_eh_reset()
908 scb->cmd.flush_cache.command_id = IPS_COMMAND_ID(ha, scb); in __ips_eh_reset()
909 scb->cmd.flush_cache.state = IPS_NORM_STATE; in __ips_eh_reset()
910 scb->cmd.flush_cache.reserved = 0; in __ips_eh_reset()
911 scb->cmd.flush_cache.reserved2 = 0; in __ips_eh_reset()
912 scb->cmd.flush_cache.reserved3 = 0; in __ips_eh_reset()
913 scb->cmd.flush_cache.reserved4 = 0; in __ips_eh_reset()
916 ret = ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_IORL); in __ips_eh_reset()
946 while ((scb = ips_removeq_scb_head(&ha->scb_activelist))) { in __ips_eh_reset()
947 scb->scsi_cmd->result = DID_ERROR << 16; in __ips_eh_reset()
948 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in __ips_eh_reset()
949 ips_freescb(ha, scb); in __ips_eh_reset()
975 while ((scb = ips_removeq_scb_head(&ha->scb_activelist))) { in __ips_eh_reset()
976 scb->scsi_cmd->result = DID_ERROR << 16; in __ips_eh_reset()
977 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in __ips_eh_reset()
978 ips_freescb(ha, scb); in __ips_eh_reset()
1007 while ((scb = ips_removeq_scb_head(&ha->scb_activelist))) { in __ips_eh_reset()
1008 scb->scsi_cmd->result = DID_RESET << 16; in __ips_eh_reset()
1009 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in __ips_eh_reset()
1010 ips_freescb(ha, scb); in __ips_eh_reset()
1280 ips_scb_t *scb; in ips_intr_copperhead() local
1318 scb = (ips_scb_t *) sp->scb_addr; in ips_intr_copperhead()
1324 (*scb->callback) (ha, scb); in ips_intr_copperhead()
1344 ips_scb_t *scb; in ips_intr_morpheus() local
1388 scb = (ips_scb_t *) sp->scb_addr; in ips_intr_morpheus()
1394 (*scb->callback) (ha, scb); in ips_intr_morpheus()
1568 ips_make_passthru(ips_ha_t *ha, struct scsi_cmnd *SC, ips_scb_t *scb, int intr) in ips_make_passthru() argument
1638 ret = ips_flash_copperhead(ha, pt, scb); in ips_make_passthru()
1643 if (ips_usrcmd(ha, pt, scb)) in ips_make_passthru()
1662 ips_flash_copperhead(ips_ha_t * ha, ips_passthru_t * pt, ips_scb_t * scb) in ips_flash_copperhead() argument
1669 if (ips_usrcmd(ha, pt, scb)) in ips_flash_copperhead()
1676 scb->scsi_cmd->result = DID_OK << 16; in ips_flash_copperhead()
1682 return ips_flash_bios(ha, pt, scb); in ips_flash_copperhead()
1721 return ips_flash_bios(ha, pt, scb); in ips_flash_copperhead()
1723 return ips_flash_firmware(ha, pt, scb); in ips_flash_copperhead()
1734 ips_flash_bios(ips_ha_t * ha, ips_passthru_t * pt, ips_scb_t * scb) in ips_flash_bios() argument
1799 ips_scb_t * scb, int indx, unsigned int e_len) in ips_fill_scb_sg_single() argument
1804 if ((scb->data_len + e_len) > ha->max_xfer) { in ips_fill_scb_sg_single()
1805 e_len = ha->max_xfer - scb->data_len; in ips_fill_scb_sg_single()
1806 scb->breakup = indx; in ips_fill_scb_sg_single()
1807 ++scb->sg_break; in ips_fill_scb_sg_single()
1810 scb->breakup = 0; in ips_fill_scb_sg_single()
1811 scb->sg_break = 0; in ips_fill_scb_sg_single()
1814 scb->sg_list.enh_list[indx].address_lo = in ips_fill_scb_sg_single()
1816 scb->sg_list.enh_list[indx].address_hi = in ips_fill_scb_sg_single()
1818 scb->sg_list.enh_list[indx].length = cpu_to_le32(e_len); in ips_fill_scb_sg_single()
1820 scb->sg_list.std_list[indx].address = in ips_fill_scb_sg_single()
1822 scb->sg_list.std_list[indx].length = cpu_to_le32(e_len); in ips_fill_scb_sg_single()
1825 ++scb->sg_len; in ips_fill_scb_sg_single()
1826 scb->data_len += e_len; in ips_fill_scb_sg_single()
1836 ips_flash_firmware(ips_ha_t * ha, ips_passthru_t * pt, ips_scb_t * scb) in ips_flash_firmware() argument
1853 sg_list.list = scb->sg_list.list; in ips_flash_firmware()
1854 cmd_busaddr = scb->scb_busaddr; in ips_flash_firmware()
1856 memcpy(&scb->cmd, &pt->CoppCP.cmd, sizeof (IPS_IOCTL_CMD)); in ips_flash_firmware()
1858 scb->sg_list.list = sg_list.list; in ips_flash_firmware()
1859 scb->scb_busaddr = cmd_busaddr; in ips_flash_firmware()
1860 scb->bus = scb->scsi_cmd->device->channel; in ips_flash_firmware()
1861 scb->target_id = scb->scsi_cmd->device->id; in ips_flash_firmware()
1862 scb->lun = scb->scsi_cmd->device->lun; in ips_flash_firmware()
1863 scb->sg_len = 0; in ips_flash_firmware()
1864 scb->data_len = 0; in ips_flash_firmware()
1865 scb->flags = 0; in ips_flash_firmware()
1866 scb->op_code = 0; in ips_flash_firmware()
1867 scb->callback = ipsintr_done; in ips_flash_firmware()
1868 scb->timeout = ips_cmd_timeout; in ips_flash_firmware()
1870 scb->data_len = ha->flash_datasize; in ips_flash_firmware()
1871 scb->data_busaddr = in ips_flash_firmware()
1872 pci_map_single(ha->pcidev, ha->flash_data, scb->data_len, in ips_flash_firmware()
1873 IPS_DMA_DIR(scb)); in ips_flash_firmware()
1874 scb->flags |= IPS_SCB_MAP_SINGLE; in ips_flash_firmware()
1875 scb->cmd.flashfw.command_id = IPS_COMMAND_ID(ha, scb); in ips_flash_firmware()
1876 scb->cmd.flashfw.buffer_addr = cpu_to_le32(scb->data_busaddr); in ips_flash_firmware()
1878 scb->timeout = pt->TimeOut; in ips_flash_firmware()
1879 scb->scsi_cmd->result = DID_OK << 16; in ips_flash_firmware()
1909 ips_usrcmd(ips_ha_t * ha, ips_passthru_t * pt, ips_scb_t * scb) in ips_usrcmd() argument
1916 if ((!scb) || (!pt) || (!ha)) in ips_usrcmd()
1920 sg_list.list = scb->sg_list.list; in ips_usrcmd()
1921 cmd_busaddr = scb->scb_busaddr; in ips_usrcmd()
1923 memcpy(&scb->cmd, &pt->CoppCP.cmd, sizeof (IPS_IOCTL_CMD)); in ips_usrcmd()
1924 memcpy(&scb->dcdb, &pt->CoppCP.dcdb, sizeof (IPS_DCDB_TABLE)); in ips_usrcmd()
1927 scb->sg_list.list = sg_list.list; in ips_usrcmd()
1928 scb->scb_busaddr = cmd_busaddr; in ips_usrcmd()
1929 scb->bus = scb->scsi_cmd->device->channel; in ips_usrcmd()
1930 scb->target_id = scb->scsi_cmd->device->id; in ips_usrcmd()
1931 scb->lun = scb->scsi_cmd->device->lun; in ips_usrcmd()
1932 scb->sg_len = 0; in ips_usrcmd()
1933 scb->data_len = 0; in ips_usrcmd()
1934 scb->flags = 0; in ips_usrcmd()
1935 scb->op_code = 0; in ips_usrcmd()
1936 scb->callback = ipsintr_done; in ips_usrcmd()
1937 scb->timeout = ips_cmd_timeout; in ips_usrcmd()
1938 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_usrcmd()
1941 if ((scb->cmd.basic_io.op_code == IPS_CMD_READ_SG) || in ips_usrcmd()
1942 (scb->cmd.basic_io.op_code == IPS_CMD_WRITE_SG) || in ips_usrcmd()
1943 (scb->cmd.basic_io.op_code == IPS_CMD_DCDB_SG)) in ips_usrcmd()
1947 scb->data_len = pt->CmdBSize; in ips_usrcmd()
1948 scb->data_busaddr = ha->ioctl_busaddr + sizeof (ips_passthru_t); in ips_usrcmd()
1950 scb->data_busaddr = 0L; in ips_usrcmd()
1953 if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) in ips_usrcmd()
1954 scb->cmd.dcdb.dcdb_address = cpu_to_le32(scb->scb_busaddr + in ips_usrcmd()
1955 (unsigned long) &scb-> in ips_usrcmd()
1957 (unsigned long) scb); in ips_usrcmd()
1960 if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) in ips_usrcmd()
1961 scb->dcdb.buffer_pointer = in ips_usrcmd()
1962 cpu_to_le32(scb->data_busaddr); in ips_usrcmd()
1964 scb->cmd.basic_io.sg_addr = in ips_usrcmd()
1965 cpu_to_le32(scb->data_busaddr); in ips_usrcmd()
1970 scb->timeout = pt->TimeOut; in ips_usrcmd()
1973 scb->dcdb.cmd_attribute |= IPS_TIMEOUT10; in ips_usrcmd()
1975 scb->dcdb.cmd_attribute |= IPS_TIMEOUT60; in ips_usrcmd()
1977 scb->dcdb.cmd_attribute |= IPS_TIMEOUT20M; in ips_usrcmd()
1981 scb->scsi_cmd->result = DID_OK << 16; in ips_usrcmd()
1997 ips_cleanup_passthru(ips_ha_t * ha, ips_scb_t * scb) in ips_cleanup_passthru() argument
2003 if ((!scb) || (!scb->scsi_cmd) || (!scsi_sglist(scb->scsi_cmd))) { in ips_cleanup_passthru()
2012 if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) /* Copy DCDB Back to Caller's Area */ in ips_cleanup_passthru()
2013 memcpy(&pt->CoppCP.dcdb, &scb->dcdb, sizeof (IPS_DCDB_TABLE)); in ips_cleanup_passthru()
2015 pt->BasicStatus = scb->basic_status; in ips_cleanup_passthru()
2016 pt->ExtendedStatus = scb->extended_status; in ips_cleanup_passthru()
2020 (scb->cmd.flashfw.op_code == IPS_CMD_DOWNLOAD || in ips_cleanup_passthru()
2021 scb->cmd.flashfw.op_code == IPS_CMD_RW_BIOSFW)) in ips_cleanup_passthru()
2024 ips_scmd_buf_write(scb->scsi_cmd, ha->ioctl_data, ha->ioctl_datasize); in ips_cleanup_passthru()
2242 ips_scb_t *scb; in ips_get_bios_version() local
2344 scb = &ha->scbs[ha->max_cmds - 1]; in ips_get_bios_version()
2346 ips_init_scb(ha, scb); in ips_get_bios_version()
2348 scb->timeout = ips_cmd_timeout; in ips_get_bios_version()
2349 scb->cdb[0] = IPS_CMD_RW_BIOSFW; in ips_get_bios_version()
2351 scb->cmd.flashfw.op_code = IPS_CMD_RW_BIOSFW; in ips_get_bios_version()
2352 scb->cmd.flashfw.command_id = IPS_COMMAND_ID(ha, scb); in ips_get_bios_version()
2353 scb->cmd.flashfw.type = 1; in ips_get_bios_version()
2354 scb->cmd.flashfw.direction = 0; in ips_get_bios_version()
2355 scb->cmd.flashfw.count = cpu_to_le32(0x800); in ips_get_bios_version()
2356 scb->cmd.flashfw.total_packets = 1; in ips_get_bios_version()
2357 scb->cmd.flashfw.packet_num = 0; in ips_get_bios_version()
2358 scb->data_len = 0x1000; in ips_get_bios_version()
2359 scb->cmd.flashfw.buffer_addr = ha->ioctl_busaddr; in ips_get_bios_version()
2363 ips_send_wait(ha, scb, ips_cmd_timeout, in ips_get_bios_version()
2366 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) { in ips_get_bios_version()
2541 ips_scb_t *scb; in ips_next() local
2580 (ha->copp_waitlist.head) && (scb = ips_getscb(ha))) { in ips_next()
2586 scb->scsi_cmd = item->scsi_cmd; in ips_next()
2589 ret = ips_make_passthru(ha, scb->scsi_cmd, scb, intr); in ips_next()
2595 if (scb->scsi_cmd) { in ips_next()
2596 scb->scsi_cmd->result = DID_ERROR << 16; in ips_next()
2597 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_next()
2600 ips_freescb(ha, scb); in ips_next()
2603 if (scb->scsi_cmd) { in ips_next()
2604 scb->scsi_cmd->result = DID_OK << 16; in ips_next()
2605 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_next()
2608 ips_freescb(ha, scb); in ips_next()
2619 ret = ips_send_cmd(ha, scb); in ips_next()
2622 ips_putq_scb_head(&ha->scb_activelist, scb); in ips_next()
2628 if (scb->scsi_cmd) { in ips_next()
2629 scb->scsi_cmd->result = DID_ERROR << 16; in ips_next()
2632 ips_freescb(ha, scb); in ips_next()
2635 ips_freescb(ha, scb); in ips_next()
2648 while ((p) && (scb = ips_getscb(ha))) { in ips_next()
2653 ips_freescb(ha, scb); in ips_next()
2667 scb->target_id = SC->device->id; in ips_next()
2668 scb->lun = SC->device->lun; in ips_next()
2669 scb->bus = SC->device->channel; in ips_next()
2670 scb->scsi_cmd = SC; in ips_next()
2671 scb->breakup = 0; in ips_next()
2672 scb->data_len = 0; in ips_next()
2673 scb->callback = ipsintr_done; in ips_next()
2674 scb->timeout = ips_cmd_timeout; in ips_next()
2675 memset(&scb->cmd, 0, 16); in ips_next()
2678 memcpy(scb->cdb, SC->cmnd, SC->cmd_len); in ips_next()
2680 scb->sg_count = scsi_dma_map(SC); in ips_next()
2681 BUG_ON(scb->sg_count < 0); in ips_next()
2682 if (scb->sg_count) { in ips_next()
2686 scb->flags |= IPS_SCB_MAP_SG; in ips_next()
2688 scsi_for_each_sg(SC, sg, scb->sg_count, i) { in ips_next()
2690 (ha, sg_dma_address(sg), scb, i, in ips_next()
2694 scb->dcdb.transfer_length = scb->data_len; in ips_next()
2696 scb->data_busaddr = 0L; in ips_next()
2697 scb->sg_len = 0; in ips_next()
2698 scb->data_len = 0; in ips_next()
2699 scb->dcdb.transfer_length = 0; in ips_next()
2702 scb->dcdb.cmd_attribute = in ips_next()
2703 ips_command_direction[scb->scsi_cmd->cmnd[0]]; in ips_next()
2707 if ((scb->scsi_cmd->cmnd[0] == WRITE_BUFFER) && in ips_next()
2708 (scb->data_len == 0)) in ips_next()
2709 scb->dcdb.cmd_attribute = 0; in ips_next()
2711 if (!(scb->dcdb.cmd_attribute & 0x3)) in ips_next()
2712 scb->dcdb.transfer_length = 0; in ips_next()
2714 if (scb->data_len >= IPS_MAX_XFER) { in ips_next()
2715 scb->dcdb.cmd_attribute |= IPS_TRANSFER64K; in ips_next()
2716 scb->dcdb.transfer_length = 0; in ips_next()
2721 ret = ips_send_cmd(ha, scb); in ips_next()
2725 ips_putq_scb_head(&ha->scb_activelist, scb); in ips_next()
2728 if (scb->scsi_cmd) { in ips_next()
2729 scb->scsi_cmd->result = DID_ERROR << 16; in ips_next()
2730 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_next()
2733 if (scb->bus) in ips_next()
2734 ha->dcdb_active[scb->bus - 1] &= in ips_next()
2735 ~(1 << scb->target_id); in ips_next()
2737 ips_freescb(ha, scb); in ips_next()
2740 if (scb->scsi_cmd) in ips_next()
2741 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_next()
2743 if (scb->bus) in ips_next()
2744 ha->dcdb_active[scb->bus - 1] &= in ips_next()
2745 ~(1 << scb->target_id); in ips_next()
2747 ips_freescb(ha, scb); in ips_next()
3104 ipsintr_blocking(ips_ha_t * ha, ips_scb_t * scb) in ipsintr_blocking() argument
3108 ips_freescb(ha, scb); in ipsintr_blocking()
3109 if ((ha->waitflag == TRUE) && (ha->cmd_in_progress == scb->cdb[0])) { in ipsintr_blocking()
3126 ipsintr_done(ips_ha_t * ha, ips_scb_t * scb) in ipsintr_done() argument
3130 if (!scb) { in ipsintr_done()
3137 if (scb->scsi_cmd == NULL) { in ipsintr_done()
3145 ips_done(ha, scb); in ipsintr_done()
3158 ips_done(ips_ha_t * ha, ips_scb_t * scb) in ips_done() argument
3164 if (!scb) in ips_done()
3167 if ((scb->scsi_cmd) && (ips_is_passthru(scb->scsi_cmd))) { in ips_done()
3168 ips_cleanup_passthru(ha, scb); in ips_done()
3176 if ((scb->breakup) || (scb->sg_break)) { in ips_done()
3181 scb->data_len = 0; in ips_done()
3183 sg = scsi_sglist(scb->scsi_cmd); in ips_done()
3186 sg_dma_index = scb->breakup; in ips_done()
3187 for (i = 0; i < scb->breakup; i++) in ips_done()
3193 scb, ips_sg_index++, in ips_done()
3196 for (; sg_dma_index < scsi_sg_count(scb->scsi_cmd); in ips_done()
3201 scb, ips_sg_index++, in ips_done()
3206 scb->dcdb.transfer_length = scb->data_len; in ips_done()
3207 scb->dcdb.cmd_attribute |= in ips_done()
3208 ips_command_direction[scb->scsi_cmd->cmnd[0]]; in ips_done()
3210 if (!(scb->dcdb.cmd_attribute & 0x3)) in ips_done()
3211 scb->dcdb.transfer_length = 0; in ips_done()
3213 if (scb->data_len >= IPS_MAX_XFER) { in ips_done()
3214 scb->dcdb.cmd_attribute |= IPS_TRANSFER64K; in ips_done()
3215 scb->dcdb.transfer_length = 0; in ips_done()
3218 ret = ips_send_cmd(ha, scb); in ips_done()
3222 if (scb->scsi_cmd) { in ips_done()
3223 scb->scsi_cmd->result = DID_ERROR << 16; in ips_done()
3224 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_done()
3227 ips_freescb(ha, scb); in ips_done()
3230 if (scb->scsi_cmd) { in ips_done()
3231 scb->scsi_cmd->result = DID_ERROR << 16; in ips_done()
3232 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_done()
3235 ips_freescb(ha, scb); in ips_done()
3245 if (scb->bus) { in ips_done()
3246 ha->dcdb_active[scb->bus - 1] &= ~(1 << scb->target_id); in ips_done()
3249 scb->scsi_cmd->scsi_done(scb->scsi_cmd); in ips_done()
3251 ips_freescb(ha, scb); in ips_done()
3264 ips_map_status(ips_ha_t * ha, ips_scb_t * scb, ips_stat_t * sp) in ips_map_status() argument
3274 if (scb->bus) { in ips_map_status()
3278 scb->scsi_cmd->device->channel, in ips_map_status()
3279 scb->scsi_cmd->device->id, scb->scsi_cmd->device->lun, in ips_map_status()
3280 scb->basic_status, scb->extended_status, in ips_map_status()
3281 scb->extended_status == in ips_map_status()
3282 IPS_ERR_CKCOND ? scb->dcdb.sense_info[2] & 0xf : 0, in ips_map_status()
3283 scb->extended_status == in ips_map_status()
3284 IPS_ERR_CKCOND ? scb->dcdb.sense_info[12] : 0, in ips_map_status()
3285 scb->extended_status == in ips_map_status()
3286 IPS_ERR_CKCOND ? scb->dcdb.sense_info[13] : 0); in ips_map_status()
3293 switch (scb->basic_status & IPS_GSC_STATUS_MASK) { in ips_map_status()
3306 switch (scb->extended_status) { in ips_map_status()
3308 if (scb->bus) in ips_map_status()
3314 if ((scb->cmd.dcdb.op_code == IPS_CMD_EXTENDED_DCDB) || in ips_map_status()
3315 (scb->cmd.dcdb.op_code == in ips_map_status()
3317 tapeDCDB = (IPS_DCDB_TABLE_TAPE *) & scb->dcdb; in ips_map_status()
3321 (uint32_t) scb->dcdb.transfer_length; in ips_map_status()
3324 if ((scb->bus) && (transfer_len < scb->data_len)) { in ips_map_status()
3329 if (scb->scsi_cmd->cmnd[0] == INQUIRY) { in ips_map_status()
3330 ips_scmd_buf_read(scb->scsi_cmd, in ips_map_status()
3344 if (scb->bus) in ips_map_status()
3355 if (scb->bus) { in ips_map_status()
3356 if ((scb->cmd.dcdb.op_code == in ips_map_status()
3358 || (scb->cmd.dcdb.op_code == in ips_map_status()
3361 (IPS_DCDB_TABLE_TAPE *) & scb->dcdb; in ips_map_status()
3362 memcpy(scb->scsi_cmd->sense_buffer, in ips_map_status()
3366 memcpy(scb->scsi_cmd->sense_buffer, in ips_map_status()
3367 scb->dcdb.sense_info, in ips_map_status()
3384 scb->scsi_cmd->result = device_error | (errcode << 16); in ips_map_status()
3401 ips_send_wait(ips_ha_t * ha, ips_scb_t * scb, int timeout, int intr) in ips_send_wait() argument
3409 ha->cmd_in_progress = scb->cdb[0]; in ips_send_wait()
3411 scb->callback = ipsintr_blocking; in ips_send_wait()
3412 ret = ips_send_cmd(ha, scb); in ips_send_wait()
3467 ips_send_cmd(ips_ha_t * ha, ips_scb_t * scb) in ips_send_cmd() argument
3479 if (!scb->scsi_cmd) { in ips_send_cmd()
3482 if (scb->bus > 0) { in ips_send_cmd()
3486 (ha->cmd_in_progress == scb->cdb[0])) { in ips_send_cmd()
3492 } else if ((scb->bus == 0) && (!ips_is_passthru(scb->scsi_cmd))) { in ips_send_cmd()
3496 switch (scb->scsi_cmd->cmnd[0]) { in ips_send_cmd()
3502 scb->scsi_cmd->result = DID_ERROR << 16; in ips_send_cmd()
3506 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3510 if (scb->target_id == IPS_ADAPTER_ID) { in ips_send_cmd()
3515 if (scb->scsi_cmd->cmnd[0] == TEST_UNIT_READY) in ips_send_cmd()
3516 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3518 if (scb->scsi_cmd->cmnd[0] == INQUIRY) { in ips_send_cmd()
3544 ips_scmd_buf_write(scb->scsi_cmd, in ips_send_cmd()
3548 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3551 scb->cmd.logical_info.op_code = IPS_CMD_GET_LD_INFO; in ips_send_cmd()
3552 scb->cmd.logical_info.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3553 scb->cmd.logical_info.reserved = 0; in ips_send_cmd()
3554 scb->cmd.logical_info.reserved2 = 0; in ips_send_cmd()
3555 scb->data_len = sizeof (IPS_LD_INFO); in ips_send_cmd()
3556 scb->data_busaddr = ha->logical_drive_info_dma_addr; in ips_send_cmd()
3557 scb->flags = 0; in ips_send_cmd()
3558 scb->cmd.logical_info.buffer_addr = scb->data_busaddr; in ips_send_cmd()
3565 ips_reqsen(ha, scb); in ips_send_cmd()
3566 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3571 if (!scb->sg_len) { in ips_send_cmd()
3572 scb->cmd.basic_io.op_code = in ips_send_cmd()
3573 (scb->scsi_cmd->cmnd[0] == in ips_send_cmd()
3575 scb->cmd.basic_io.enhanced_sg = 0; in ips_send_cmd()
3576 scb->cmd.basic_io.sg_addr = in ips_send_cmd()
3577 cpu_to_le32(scb->data_busaddr); in ips_send_cmd()
3579 scb->cmd.basic_io.op_code = in ips_send_cmd()
3580 (scb->scsi_cmd->cmnd[0] == in ips_send_cmd()
3583 scb->cmd.basic_io.enhanced_sg = in ips_send_cmd()
3585 scb->cmd.basic_io.sg_addr = in ips_send_cmd()
3586 cpu_to_le32(scb->sg_busaddr); in ips_send_cmd()
3589 scb->cmd.basic_io.segment_4G = 0; in ips_send_cmd()
3590 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3591 scb->cmd.basic_io.log_drv = scb->target_id; in ips_send_cmd()
3592 scb->cmd.basic_io.sg_count = scb->sg_len; in ips_send_cmd()
3594 if (scb->cmd.basic_io.lba) in ips_send_cmd()
3595 le32_add_cpu(&scb->cmd.basic_io.lba, in ips_send_cmd()
3596 le16_to_cpu(scb->cmd.basic_io. in ips_send_cmd()
3599 scb->cmd.basic_io.lba = in ips_send_cmd()
3600 (((scb->scsi_cmd-> in ips_send_cmd()
3601 cmnd[1] & 0x1f) << 16) | (scb->scsi_cmd-> in ips_send_cmd()
3603 (scb->scsi_cmd->cmnd[3])); in ips_send_cmd()
3605 scb->cmd.basic_io.sector_count = in ips_send_cmd()
3606 cpu_to_le16(scb->data_len / IPS_BLKSIZE); in ips_send_cmd()
3608 if (le16_to_cpu(scb->cmd.basic_io.sector_count) == 0) in ips_send_cmd()
3609 scb->cmd.basic_io.sector_count = in ips_send_cmd()
3617 if (!scb->sg_len) { in ips_send_cmd()
3618 scb->cmd.basic_io.op_code = in ips_send_cmd()
3619 (scb->scsi_cmd->cmnd[0] == in ips_send_cmd()
3621 scb->cmd.basic_io.enhanced_sg = 0; in ips_send_cmd()
3622 scb->cmd.basic_io.sg_addr = in ips_send_cmd()
3623 cpu_to_le32(scb->data_busaddr); in ips_send_cmd()
3625 scb->cmd.basic_io.op_code = in ips_send_cmd()
3626 (scb->scsi_cmd->cmnd[0] == in ips_send_cmd()
3629 scb->cmd.basic_io.enhanced_sg = in ips_send_cmd()
3631 scb->cmd.basic_io.sg_addr = in ips_send_cmd()
3632 cpu_to_le32(scb->sg_busaddr); in ips_send_cmd()
3635 scb->cmd.basic_io.segment_4G = 0; in ips_send_cmd()
3636 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3637 scb->cmd.basic_io.log_drv = scb->target_id; in ips_send_cmd()
3638 scb->cmd.basic_io.sg_count = scb->sg_len; in ips_send_cmd()
3640 if (scb->cmd.basic_io.lba) in ips_send_cmd()
3641 le32_add_cpu(&scb->cmd.basic_io.lba, in ips_send_cmd()
3642 le16_to_cpu(scb->cmd.basic_io. in ips_send_cmd()
3645 scb->cmd.basic_io.lba = in ips_send_cmd()
3646 ((scb->scsi_cmd->cmnd[2] << 24) | (scb-> in ips_send_cmd()
3650 (scb->scsi_cmd->cmnd[4] << 8) | scb-> in ips_send_cmd()
3653 scb->cmd.basic_io.sector_count = in ips_send_cmd()
3654 cpu_to_le16(scb->data_len / IPS_BLKSIZE); in ips_send_cmd()
3656 if (cpu_to_le16(scb->cmd.basic_io.sector_count) == 0) { in ips_send_cmd()
3662 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3670 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3674 scb->cmd.basic_io.op_code = IPS_CMD_ENQUIRY; in ips_send_cmd()
3675 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3676 scb->cmd.basic_io.segment_4G = 0; in ips_send_cmd()
3677 scb->cmd.basic_io.enhanced_sg = 0; in ips_send_cmd()
3678 scb->data_len = sizeof (*ha->enq); in ips_send_cmd()
3679 scb->cmd.basic_io.sg_addr = ha->enq_busaddr; in ips_send_cmd()
3684 scb->cmd.logical_info.op_code = IPS_CMD_GET_LD_INFO; in ips_send_cmd()
3685 scb->cmd.logical_info.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3686 scb->cmd.logical_info.reserved = 0; in ips_send_cmd()
3687 scb->cmd.logical_info.reserved2 = 0; in ips_send_cmd()
3688 scb->cmd.logical_info.reserved3 = 0; in ips_send_cmd()
3689 scb->data_len = sizeof (IPS_LD_INFO); in ips_send_cmd()
3690 scb->data_busaddr = ha->logical_drive_info_dma_addr; in ips_send_cmd()
3691 scb->flags = 0; in ips_send_cmd()
3692 scb->cmd.logical_info.buffer_addr = scb->data_busaddr; in ips_send_cmd()
3704 scb->scsi_cmd->result = DID_OK << 16; in ips_send_cmd()
3711 sp = (char *) scb->scsi_cmd->sense_buffer; in ips_send_cmd()
3720 scb->scsi_cmd->result = device_error | (DID_OK << 16); in ips_send_cmd()
3729 if (scb->bus > 0) { in ips_send_cmd()
3733 if (ha->conf->dev[scb->bus - 1][scb->target_id].ucState == 0) { in ips_send_cmd()
3734 scb->scsi_cmd->result = DID_NO_CONNECT << 16; in ips_send_cmd()
3738 ha->dcdb_active[scb->bus - 1] |= (1 << scb->target_id); in ips_send_cmd()
3739 scb->cmd.dcdb.command_id = IPS_COMMAND_ID(ha, scb); in ips_send_cmd()
3740 scb->cmd.dcdb.dcdb_address = cpu_to_le32(scb->scb_busaddr + in ips_send_cmd()
3741 (unsigned long) &scb-> in ips_send_cmd()
3743 (unsigned long) scb); in ips_send_cmd()
3744 scb->cmd.dcdb.reserved = 0; in ips_send_cmd()
3745 scb->cmd.dcdb.reserved2 = 0; in ips_send_cmd()
3746 scb->cmd.dcdb.reserved3 = 0; in ips_send_cmd()
3747 scb->cmd.dcdb.segment_4G = 0; in ips_send_cmd()
3748 scb->cmd.dcdb.enhanced_sg = 0; in ips_send_cmd()
3750 TimeOut = scb->scsi_cmd->request->timeout; in ips_send_cmd()
3753 if (!scb->sg_len) { in ips_send_cmd()
3754 scb->cmd.dcdb.op_code = IPS_CMD_EXTENDED_DCDB; in ips_send_cmd()
3756 scb->cmd.dcdb.op_code = in ips_send_cmd()
3758 scb->cmd.dcdb.enhanced_sg = in ips_send_cmd()
3762 tapeDCDB = (IPS_DCDB_TABLE_TAPE *) & scb->dcdb; /* Use Same Data Area as Old DCDB Struct */ in ips_send_cmd()
3764 ((scb->bus - 1) << 4) | scb->target_id; in ips_send_cmd()
3777 tapeDCDB->cdb_length = scb->scsi_cmd->cmd_len; in ips_send_cmd()
3779 tapeDCDB->transfer_length = scb->data_len; in ips_send_cmd()
3780 if (scb->cmd.dcdb.op_code == IPS_CMD_EXTENDED_DCDB_SG) in ips_send_cmd()
3782 cpu_to_le32(scb->sg_busaddr); in ips_send_cmd()
3785 cpu_to_le32(scb->data_busaddr); in ips_send_cmd()
3786 tapeDCDB->sg_count = scb->sg_len; in ips_send_cmd()
3790 memcpy(tapeDCDB->scsi_cdb, scb->scsi_cmd->cmnd, in ips_send_cmd()
3791 scb->scsi_cmd->cmd_len); in ips_send_cmd()
3793 if (!scb->sg_len) { in ips_send_cmd()
3794 scb->cmd.dcdb.op_code = IPS_CMD_DCDB; in ips_send_cmd()
3796 scb->cmd.dcdb.op_code = IPS_CMD_DCDB_SG; in ips_send_cmd()
3797 scb->cmd.dcdb.enhanced_sg = in ips_send_cmd()
3801 scb->dcdb.device_address = in ips_send_cmd()
3802 ((scb->bus - 1) << 4) | scb->target_id; in ips_send_cmd()
3803 scb->dcdb.cmd_attribute |= IPS_DISCONNECT_ALLOWED; in ips_send_cmd()
3807 scb->dcdb.cmd_attribute |= IPS_TIMEOUT10; /* TimeOut is 10 Seconds */ in ips_send_cmd()
3809 scb->dcdb.cmd_attribute |= IPS_TIMEOUT60; /* TimeOut is 60 Seconds */ in ips_send_cmd()
3811 scb->dcdb.cmd_attribute |= IPS_TIMEOUT20M; /* TimeOut is 20 Minutes */ in ips_send_cmd()
3814 scb->dcdb.transfer_length = scb->data_len; in ips_send_cmd()
3815 if (scb->dcdb.cmd_attribute & IPS_TRANSFER64K) in ips_send_cmd()
3816 scb->dcdb.transfer_length = 0; in ips_send_cmd()
3817 if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB_SG) in ips_send_cmd()
3818 scb->dcdb.buffer_pointer = in ips_send_cmd()
3819 cpu_to_le32(scb->sg_busaddr); in ips_send_cmd()
3821 scb->dcdb.buffer_pointer = in ips_send_cmd()
3822 cpu_to_le32(scb->data_busaddr); in ips_send_cmd()
3823 scb->dcdb.cdb_length = scb->scsi_cmd->cmd_len; in ips_send_cmd()
3824 scb->dcdb.sense_length = sizeof (scb->dcdb.sense_info); in ips_send_cmd()
3825 scb->dcdb.sg_count = scb->sg_len; in ips_send_cmd()
3826 scb->dcdb.reserved = 0; in ips_send_cmd()
3827 memcpy(scb->dcdb.scsi_cdb, scb->scsi_cmd->cmnd, in ips_send_cmd()
3828 scb->scsi_cmd->cmd_len); in ips_send_cmd()
3829 scb->dcdb.scsi_status = 0; in ips_send_cmd()
3830 scb->dcdb.reserved2[0] = 0; in ips_send_cmd()
3831 scb->dcdb.reserved2[1] = 0; in ips_send_cmd()
3832 scb->dcdb.reserved2[2] = 0; in ips_send_cmd()
3836 return ((*ha->func.issue) (ha, scb)); in ips_send_cmd()
3851 ips_scb_t *scb; in ips_chkstatus() local
3860 scb = &ha->scbs[pstatus->fields.command_id]; in ips_chkstatus()
3861 scb->basic_status = basic_status = in ips_chkstatus()
3863 scb->extended_status = ext_status = pstatus->fields.extended_status; in ips_chkstatus()
3867 sp->scb_addr = (void *) scb; in ips_chkstatus()
3870 ips_removeq_scb(&ha->scb_activelist, scb); in ips_chkstatus()
3872 if (!scb->scsi_cmd) in ips_chkstatus()
3879 scb->cdb[0], in ips_chkstatus()
3880 scb->cmd.basic_io.command_id, in ips_chkstatus()
3881 scb->bus, scb->target_id, scb->lun); in ips_chkstatus()
3883 if ((scb->scsi_cmd) && (ips_is_passthru(scb->scsi_cmd))) in ips_chkstatus()
3892 if (scb->bus == 0) { in ips_chkstatus()
3898 scb->cmd.basic_io.op_code, in ips_chkstatus()
3902 switch (scb->scsi_cmd->cmnd[0]) { in ips_chkstatus()
3915 if (!ips_online(ha, scb)) { in ips_chkstatus()
3921 if (ips_online(ha, scb)) { in ips_chkstatus()
3922 ips_inquiry(ha, scb); in ips_chkstatus()
3929 ips_reqsen(ha, scb); in ips_chkstatus()
3941 if (!ips_online(ha, scb) in ips_chkstatus()
3942 || !ips_msense(ha, scb)) { in ips_chkstatus()
3948 if (ips_online(ha, scb)) in ips_chkstatus()
3949 ips_rdcap(ha, scb); in ips_chkstatus()
3974 scb->scsi_cmd->result = errcode << 16; in ips_chkstatus()
3977 if (scb->scsi_cmd->cmnd[0] == INQUIRY) { in ips_chkstatus()
3978 ips_scmd_buf_read(scb->scsi_cmd, in ips_chkstatus()
3981 scb->scsi_cmd->result = DID_TIME_OUT << 16; in ips_chkstatus()
3985 if (scb->bus == 0) { in ips_chkstatus()
3989 scb->cmd.basic_io.op_code, basic_status, in ips_chkstatus()
3993 ips_map_status(ha, scb, sp); in ips_chkstatus()
4007 ips_online(ips_ha_t * ha, ips_scb_t * scb) in ips_online() argument
4011 if (scb->target_id >= IPS_MAX_LD) in ips_online()
4014 if ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1) { in ips_online()
4019 if (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()
4023 && ha->logical_drive_info->drive_info[scb->target_id].state != in ips_online()
4025 && ha->logical_drive_info->drive_info[scb->target_id].state != in ips_online()
4042 ips_inquiry(ips_ha_t * ha, ips_scb_t * scb) in ips_inquiry() argument
4062 ips_scmd_buf_write(scb->scsi_cmd, &inquiry, sizeof (inquiry)); in ips_inquiry()
4077 ips_rdcap(ips_ha_t * ha, ips_scb_t * scb) in ips_rdcap() argument
4083 if (scsi_bufflen(scb->scsi_cmd) < 8) in ips_rdcap()
4089 drive_info[scb->target_id].sector_count) - 1); in ips_rdcap()
4092 ips_scmd_buf_write(scb->scsi_cmd, &cap, sizeof (cap)); in ips_rdcap()
4107 ips_msense(ips_ha_t * ha, ips_scb_t * scb) in ips_msense() argument
4116 if (le32_to_cpu(ha->enq->ulDriveSize[scb->target_id]) > 0x400000 && in ips_msense()
4126 (le32_to_cpu(ha->enq->ulDriveSize[scb->target_id]) - in ips_msense()
4133 switch (scb->scsi_cmd->cmnd[2] & 0x3f) { in ips_msense()
4183 ips_scmd_buf_write(scb->scsi_cmd, &mdata, sizeof (mdata)); in ips_msense()
4198 ips_reqsen(ips_ha_t * ha, ips_scb_t * scb) in ips_reqsen() argument
4212 ips_scmd_buf_write(scb->scsi_cmd, &reqsen, sizeof (reqsen)); in ips_reqsen()
4384 ips_init_scb(ips_ha_t * ha, ips_scb_t * scb) in ips_init_scb() argument
4390 if (scb == NULL) in ips_init_scb()
4393 sg_list.list = scb->sg_list.list; in ips_init_scb()
4394 cmd_busaddr = scb->scb_busaddr; in ips_init_scb()
4395 sg_busaddr = scb->sg_busaddr; in ips_init_scb()
4397 memset(scb, 0, sizeof (ips_scb_t)); in ips_init_scb()
4407 scb->scb_busaddr = cmd_busaddr; in ips_init_scb()
4408 scb->sg_busaddr = sg_busaddr; in ips_init_scb()
4409 scb->sg_list.list = sg_list.list; in ips_init_scb()
4412 scb->cmd.basic_io.cccr = cpu_to_le32((uint32_t) IPS_BIT_ILE); in ips_init_scb()
4413 scb->cmd.basic_io.ccsar = cpu_to_le32(ha->adapt->hw_status_start in ips_init_scb()
4431 ips_scb_t *scb; in ips_getscb() local
4435 if ((scb = ha->scb_freelist) == NULL) { in ips_getscb()
4440 ha->scb_freelist = scb->q_next; in ips_getscb()
4441 scb->flags = 0; in ips_getscb()
4442 scb->q_next = NULL; in ips_getscb()
4444 ips_init_scb(ha, scb); in ips_getscb()
4446 return (scb); in ips_getscb()
4461 ips_freescb(ips_ha_t * ha, ips_scb_t * scb) in ips_freescb() argument
4465 if (scb->flags & IPS_SCB_MAP_SG) in ips_freescb()
4466 scsi_dma_unmap(scb->scsi_cmd); in ips_freescb()
4467 else if (scb->flags & IPS_SCB_MAP_SINGLE) in ips_freescb()
4468 pci_unmap_single(ha->pcidev, scb->data_busaddr, scb->data_len, in ips_freescb()
4469 IPS_DMA_DIR(scb)); in ips_freescb()
4472 if (IPS_COMMAND_ID(ha, scb) < (ha->max_cmds - 1)) { in ips_freescb()
4473 scb->q_next = ha->scb_freelist; in ips_freescb()
4474 ha->scb_freelist = scb; in ips_freescb()
4574 ips_scb_t *scb; in ips_flush_and_reset() local
4581 scb = pci_alloc_consistent(ha->pcidev, sizeof(ips_scb_t), &command_dma); in ips_flush_and_reset()
4582 if (scb) { in ips_flush_and_reset()
4583 memset(scb, 0, sizeof(ips_scb_t)); in ips_flush_and_reset()
4584 ips_init_scb(ha, scb); in ips_flush_and_reset()
4585 scb->scb_busaddr = command_dma; in ips_flush_and_reset()
4587 scb->timeout = ips_cmd_timeout; in ips_flush_and_reset()
4588 scb->cdb[0] = IPS_CMD_FLUSH; in ips_flush_and_reset()
4590 scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; in ips_flush_and_reset()
4591scb->cmd.flush_cache.command_id = IPS_MAX_CMDS; /* Use an ID that would otherwise not exist */ in ips_flush_and_reset()
4592 scb->cmd.flush_cache.state = IPS_NORM_STATE; in ips_flush_and_reset()
4593 scb->cmd.flush_cache.reserved = 0; in ips_flush_and_reset()
4594 scb->cmd.flush_cache.reserved2 = 0; in ips_flush_and_reset()
4595 scb->cmd.flush_cache.reserved3 = 0; in ips_flush_and_reset()
4596 scb->cmd.flush_cache.reserved4 = 0; in ips_flush_and_reset()
4598 ret = ips_send_cmd(ha, scb); /* Send the Flush Command */ in ips_flush_and_reset()
4616 pci_free_consistent(ha->pcidev, sizeof(ips_scb_t), scb, command_dma); in ips_flush_and_reset()
5291 ips_issue_copperhead(ips_ha_t * ha, ips_scb_t * scb) in ips_issue_copperhead() argument
5298 if (scb->scsi_cmd) { in ips_issue_copperhead()
5302 scb->cdb[0], in ips_issue_copperhead()
5303 scb->cmd.basic_io.command_id, in ips_issue_copperhead()
5304 scb->bus, scb->target_id, scb->lun); in ips_issue_copperhead()
5307 ips_name, ha->host_num, scb->cmd.basic_io.command_id); in ips_issue_copperhead()
5329 outl(scb->scb_busaddr, ha->io_addr + IPS_REG_CCSAR); in ips_issue_copperhead()
5345 ips_issue_copperhead_memio(ips_ha_t * ha, ips_scb_t * scb) in ips_issue_copperhead_memio() argument
5352 if (scb->scsi_cmd) { in ips_issue_copperhead_memio()
5356 scb->cdb[0], in ips_issue_copperhead_memio()
5357 scb->cmd.basic_io.command_id, in ips_issue_copperhead_memio()
5358 scb->bus, scb->target_id, scb->lun); in ips_issue_copperhead_memio()
5361 ips_name, ha->host_num, scb->cmd.basic_io.command_id); in ips_issue_copperhead_memio()
5382 writel(scb->scb_busaddr, ha->mem_ptr + IPS_REG_CCSAR); in ips_issue_copperhead_memio()
5398 ips_issue_i2o(ips_ha_t * ha, ips_scb_t * scb) in ips_issue_i2o() argument
5403 if (scb->scsi_cmd) { in ips_issue_i2o()
5407 scb->cdb[0], in ips_issue_i2o()
5408 scb->cmd.basic_io.command_id, in ips_issue_i2o()
5409 scb->bus, scb->target_id, scb->lun); in ips_issue_i2o()
5412 ips_name, ha->host_num, scb->cmd.basic_io.command_id); in ips_issue_i2o()
5415 outl(scb->scb_busaddr, ha->io_addr + IPS_REG_I2O_INMSGQ); in ips_issue_i2o()
5430 ips_issue_i2o_memio(ips_ha_t * ha, ips_scb_t * scb) in ips_issue_i2o_memio() argument
5435 if (scb->scsi_cmd) { in ips_issue_i2o_memio()
5439 scb->cdb[0], in ips_issue_i2o_memio()
5440 scb->cmd.basic_io.command_id, in ips_issue_i2o_memio()
5441 scb->bus, scb->target_id, scb->lun); in ips_issue_i2o_memio()
5444 ips_name, ha->host_num, scb->cmd.basic_io.command_id); in ips_issue_i2o_memio()
5447 writel(scb->scb_busaddr, ha->mem_ptr + IPS_REG_I2O_INMSGQ); in ips_issue_i2o_memio()
5677 ips_scb_t *scb; in ips_read_adapter_status() local
5682 scb = &ha->scbs[ha->max_cmds - 1]; in ips_read_adapter_status()
5684 ips_init_scb(ha, scb); in ips_read_adapter_status()
5686 scb->timeout = ips_cmd_timeout; in ips_read_adapter_status()
5687 scb->cdb[0] = IPS_CMD_ENQUIRY; in ips_read_adapter_status()
5689 scb->cmd.basic_io.op_code = IPS_CMD_ENQUIRY; in ips_read_adapter_status()
5690 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_read_adapter_status()
5691 scb->cmd.basic_io.sg_count = 0; in ips_read_adapter_status()
5692 scb->cmd.basic_io.lba = 0; in ips_read_adapter_status()
5693 scb->cmd.basic_io.sector_count = 0; in ips_read_adapter_status()
5694 scb->cmd.basic_io.log_drv = 0; in ips_read_adapter_status()
5695 scb->data_len = sizeof (*ha->enq); in ips_read_adapter_status()
5696 scb->cmd.basic_io.sg_addr = ha->enq_busaddr; in ips_read_adapter_status()
5700 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_read_adapter_status()
5702 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) in ips_read_adapter_status()
5720 ips_scb_t *scb; in ips_read_subsystem_parameters() local
5725 scb = &ha->scbs[ha->max_cmds - 1]; in ips_read_subsystem_parameters()
5727 ips_init_scb(ha, scb); in ips_read_subsystem_parameters()
5729 scb->timeout = ips_cmd_timeout; in ips_read_subsystem_parameters()
5730 scb->cdb[0] = IPS_CMD_GET_SUBSYS; in ips_read_subsystem_parameters()
5732 scb->cmd.basic_io.op_code = IPS_CMD_GET_SUBSYS; in ips_read_subsystem_parameters()
5733 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_read_subsystem_parameters()
5734 scb->cmd.basic_io.sg_count = 0; in ips_read_subsystem_parameters()
5735 scb->cmd.basic_io.lba = 0; in ips_read_subsystem_parameters()
5736 scb->cmd.basic_io.sector_count = 0; in ips_read_subsystem_parameters()
5737 scb->cmd.basic_io.log_drv = 0; in ips_read_subsystem_parameters()
5738 scb->data_len = sizeof (*ha->subsys); in ips_read_subsystem_parameters()
5739 scb->cmd.basic_io.sg_addr = ha->ioctl_busaddr; in ips_read_subsystem_parameters()
5743 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_read_subsystem_parameters()
5745 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) in ips_read_subsystem_parameters()
5764 ips_scb_t *scb; in ips_read_config() local
5774 scb = &ha->scbs[ha->max_cmds - 1]; in ips_read_config()
5776 ips_init_scb(ha, scb); in ips_read_config()
5778 scb->timeout = ips_cmd_timeout; in ips_read_config()
5779 scb->cdb[0] = IPS_CMD_READ_CONF; in ips_read_config()
5781 scb->cmd.basic_io.op_code = IPS_CMD_READ_CONF; in ips_read_config()
5782 scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); in ips_read_config()
5783 scb->data_len = sizeof (*ha->conf); in ips_read_config()
5784 scb->cmd.basic_io.sg_addr = ha->ioctl_busaddr; in ips_read_config()
5788 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_read_config()
5790 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) { in ips_read_config()
5799 if ((scb->basic_status & IPS_GSC_STATUS_MASK) == in ips_read_config()
5822 ips_scb_t *scb; in ips_readwrite_page5() local
5827 scb = &ha->scbs[ha->max_cmds - 1]; in ips_readwrite_page5()
5829 ips_init_scb(ha, scb); in ips_readwrite_page5()
5831 scb->timeout = ips_cmd_timeout; in ips_readwrite_page5()
5832 scb->cdb[0] = IPS_CMD_RW_NVRAM_PAGE; in ips_readwrite_page5()
5834 scb->cmd.nvram.op_code = IPS_CMD_RW_NVRAM_PAGE; in ips_readwrite_page5()
5835 scb->cmd.nvram.command_id = IPS_COMMAND_ID(ha, scb); in ips_readwrite_page5()
5836 scb->cmd.nvram.page = 5; in ips_readwrite_page5()
5837 scb->cmd.nvram.write = write; in ips_readwrite_page5()
5838 scb->cmd.nvram.reserved = 0; in ips_readwrite_page5()
5839 scb->cmd.nvram.reserved2 = 0; in ips_readwrite_page5()
5840 scb->data_len = sizeof (*ha->nvram); in ips_readwrite_page5()
5841 scb->cmd.nvram.buffer_addr = ha->ioctl_busaddr; in ips_readwrite_page5()
5847 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_readwrite_page5()
5849 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) { in ips_readwrite_page5()
5872 ips_scb_t *scb; in ips_clear_adapter() local
5877 scb = &ha->scbs[ha->max_cmds - 1]; in ips_clear_adapter()
5879 ips_init_scb(ha, scb); in ips_clear_adapter()
5881 scb->timeout = ips_reset_timeout; in ips_clear_adapter()
5882 scb->cdb[0] = IPS_CMD_CONFIG_SYNC; in ips_clear_adapter()
5884 scb->cmd.config_sync.op_code = IPS_CMD_CONFIG_SYNC; in ips_clear_adapter()
5885 scb->cmd.config_sync.command_id = IPS_COMMAND_ID(ha, scb); in ips_clear_adapter()
5886 scb->cmd.config_sync.channel = 0; in ips_clear_adapter()
5887 scb->cmd.config_sync.source_target = IPS_POCL; in ips_clear_adapter()
5888 scb->cmd.config_sync.reserved = 0; in ips_clear_adapter()
5889 scb->cmd.config_sync.reserved2 = 0; in ips_clear_adapter()
5890 scb->cmd.config_sync.reserved3 = 0; in ips_clear_adapter()
5894 ips_send_wait(ha, scb, ips_reset_timeout, intr)) == IPS_FAILURE) in ips_clear_adapter()
5896 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) in ips_clear_adapter()
5900 ips_init_scb(ha, scb); in ips_clear_adapter()
5902 scb->cdb[0] = IPS_CMD_ERROR_TABLE; in ips_clear_adapter()
5903 scb->timeout = ips_reset_timeout; in ips_clear_adapter()
5905 scb->cmd.unlock_stripe.op_code = IPS_CMD_ERROR_TABLE; in ips_clear_adapter()
5906 scb->cmd.unlock_stripe.command_id = IPS_COMMAND_ID(ha, scb); in ips_clear_adapter()
5907 scb->cmd.unlock_stripe.log_drv = 0; in ips_clear_adapter()
5908 scb->cmd.unlock_stripe.control = IPS_CSL; in ips_clear_adapter()
5909 scb->cmd.unlock_stripe.reserved = 0; in ips_clear_adapter()
5910 scb->cmd.unlock_stripe.reserved2 = 0; in ips_clear_adapter()
5911 scb->cmd.unlock_stripe.reserved3 = 0; in ips_clear_adapter()
5915 ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) in ips_clear_adapter()
5917 || ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) in ips_clear_adapter()
5935 ips_scb_t *scb; in ips_ffdc_reset() local
5939 scb = &ha->scbs[ha->max_cmds - 1]; in ips_ffdc_reset()
5941 ips_init_scb(ha, scb); in ips_ffdc_reset()
5943 scb->timeout = ips_cmd_timeout; in ips_ffdc_reset()
5944 scb->cdb[0] = IPS_CMD_FFDC; in ips_ffdc_reset()
5945 scb->cmd.ffdc.op_code = IPS_CMD_FFDC; in ips_ffdc_reset()
5946 scb->cmd.ffdc.command_id = IPS_COMMAND_ID(ha, scb); in ips_ffdc_reset()
5947 scb->cmd.ffdc.reset_count = ha->reset_count; in ips_ffdc_reset()
5948 scb->cmd.ffdc.reset_type = 0x80; in ips_ffdc_reset()
5951 ips_fix_ffdc_time(ha, scb, ha->last_ffdc); in ips_ffdc_reset()
5954 ips_send_wait(ha, scb, ips_cmd_timeout, intr); in ips_ffdc_reset()
5969 ips_scb_t *scb; in ips_ffdc_time() local
5975 scb = &ha->scbs[ha->max_cmds - 1]; in ips_ffdc_time()
5977 ips_init_scb(ha, scb); in ips_ffdc_time()
5979 scb->timeout = ips_cmd_timeout; in ips_ffdc_time()
5980 scb->cdb[0] = IPS_CMD_FFDC; in ips_ffdc_time()
5981 scb->cmd.ffdc.op_code = IPS_CMD_FFDC; in ips_ffdc_time()
5982 scb->cmd.ffdc.command_id = IPS_COMMAND_ID(ha, scb); in ips_ffdc_time()
5983 scb->cmd.ffdc.reset_count = 0; in ips_ffdc_time()
5984 scb->cmd.ffdc.reset_type = 0; in ips_ffdc_time()
5987 ips_fix_ffdc_time(ha, scb, ha->last_ffdc); in ips_ffdc_time()
5990 ips_send_wait(ha, scb, ips_cmd_timeout, IPS_FFDC); in ips_ffdc_time()
6002 ips_fix_ffdc_time(ips_ha_t * ha, ips_scb_t * scb, time_t current_time) in ips_fix_ffdc_time() argument
6029 scb->cmd.ffdc.hour = (rem / IPS_SECS_HOUR); in ips_fix_ffdc_time()
6031 scb->cmd.ffdc.minute = (rem / IPS_SECS_MIN); in ips_fix_ffdc_time()
6032 scb->cmd.ffdc.second = (rem % IPS_SECS_MIN); in ips_fix_ffdc_time()
6047 scb->cmd.ffdc.yearH = year / 100; in ips_fix_ffdc_time()
6048 scb->cmd.ffdc.yearL = year % 100; in ips_fix_ffdc_time()
6053 scb->cmd.ffdc.month = i + 1; in ips_fix_ffdc_time()
6054 scb->cmd.ffdc.day = days + 1; in ips_fix_ffdc_time()