Lines Matching refs:ipr_cmd

597 static void ipr_trc_hook(struct ipr_cmnd *ipr_cmd,  in ipr_trc_hook()  argument
601 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_trc_hook()
607 trace_entry->op_code = ipr_cmd->ioarcb.cmd_pkt.cdb[0]; in ipr_trc_hook()
609 if (ipr_cmd->ioa_cfg->sis64) in ipr_trc_hook()
610 trace_entry->ata_op_code = ipr_cmd->i.ata_ioadl.regs.command; in ipr_trc_hook()
612 trace_entry->ata_op_code = ipr_cmd->ioarcb.u.add_data.u.regs.command; in ipr_trc_hook()
613 trace_entry->cmd_index = ipr_cmd->cmd_index & 0xff; in ipr_trc_hook()
614 trace_entry->res_handle = ipr_cmd->ioarcb.res_handle; in ipr_trc_hook()
619 #define ipr_trc_hook(ipr_cmd, type, add_data) do { } while (0) argument
629 static void ipr_lock_and_done(struct ipr_cmnd *ipr_cmd) in ipr_lock_and_done() argument
632 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_lock_and_done()
635 ipr_cmd->done(ipr_cmd); in ipr_lock_and_done()
646 static void ipr_reinit_ipr_cmnd(struct ipr_cmnd *ipr_cmd) in ipr_reinit_ipr_cmnd() argument
648 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_reinit_ipr_cmnd()
649 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_reinit_ipr_cmnd()
650 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64; in ipr_reinit_ipr_cmnd()
651 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_reinit_ipr_cmnd()
662 if (ipr_cmd->ioa_cfg->sis64) { in ipr_reinit_ipr_cmnd()
675 ipr_cmd->scsi_cmd = NULL; in ipr_reinit_ipr_cmnd()
676 ipr_cmd->qc = NULL; in ipr_reinit_ipr_cmnd()
677 ipr_cmd->sense_buffer[0] = 0; in ipr_reinit_ipr_cmnd()
678 ipr_cmd->dma_use_sg = 0; in ipr_reinit_ipr_cmnd()
688 static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd, in ipr_init_ipr_cmnd() argument
691 ipr_reinit_ipr_cmnd(ipr_cmd); in ipr_init_ipr_cmnd()
692 ipr_cmd->u.scratch = 0; in ipr_init_ipr_cmnd()
693 ipr_cmd->sibling = NULL; in ipr_init_ipr_cmnd()
694 ipr_cmd->eh_comp = NULL; in ipr_init_ipr_cmnd()
695 ipr_cmd->fast_done = fast_done; in ipr_init_ipr_cmnd()
696 init_timer(&ipr_cmd->timer); in ipr_init_ipr_cmnd()
709 struct ipr_cmnd *ipr_cmd = NULL; in __ipr_get_free_ipr_cmnd() local
712 ipr_cmd = list_entry(hrrq->hrrq_free_q.next, in __ipr_get_free_ipr_cmnd()
714 list_del(&ipr_cmd->queue); in __ipr_get_free_ipr_cmnd()
718 return ipr_cmd; in __ipr_get_free_ipr_cmnd()
731 struct ipr_cmnd *ipr_cmd = in ipr_get_free_ipr_cmnd() local
733 ipr_init_ipr_cmnd(ipr_cmd, ipr_lock_and_done); in ipr_get_free_ipr_cmnd()
734 return ipr_cmd; in ipr_get_free_ipr_cmnd()
831 static void ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd) in ipr_sata_eh_done() argument
833 struct ata_queued_cmd *qc = ipr_cmd->qc; in ipr_sata_eh_done()
838 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_sata_eh_done()
852 static void ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd) in ipr_scsi_eh_done() argument
854 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_scsi_eh_done()
858 scsi_dma_unmap(ipr_cmd->scsi_cmd); in ipr_scsi_eh_done()
860 if (ipr_cmd->eh_comp) in ipr_scsi_eh_done()
861 complete(ipr_cmd->eh_comp); in ipr_scsi_eh_done()
862 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_scsi_eh_done()
876 struct ipr_cmnd *ipr_cmd, *temp; in ipr_fail_all_ops() local
882 list_for_each_entry_safe(ipr_cmd, in ipr_fail_all_ops()
884 list_del(&ipr_cmd->queue); in ipr_fail_all_ops()
886 ipr_cmd->s.ioasa.hdr.ioasc = in ipr_fail_all_ops()
888 ipr_cmd->s.ioasa.hdr.ilid = in ipr_fail_all_ops()
891 if (ipr_cmd->scsi_cmd) in ipr_fail_all_ops()
892 ipr_cmd->done = ipr_scsi_eh_done; in ipr_fail_all_ops()
893 else if (ipr_cmd->qc) in ipr_fail_all_ops()
894 ipr_cmd->done = ipr_sata_eh_done; in ipr_fail_all_ops()
896 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, in ipr_fail_all_ops()
898 del_timer(&ipr_cmd->timer); in ipr_fail_all_ops()
899 ipr_cmd->done(ipr_cmd); in ipr_fail_all_ops()
917 static void ipr_send_command(struct ipr_cmnd *ipr_cmd) in ipr_send_command() argument
919 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_send_command()
920 dma_addr_t send_dma_addr = ipr_cmd->dma_addr; in ipr_send_command()
928 if (ipr_cmd->dma_use_sg * sizeof(struct ipr_ioadl64_desc) > 128 ) in ipr_send_command()
948 static void ipr_do_req(struct ipr_cmnd *ipr_cmd, in ipr_do_req() argument
952 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_do_req()
954 ipr_cmd->done = done; in ipr_do_req()
956 ipr_cmd->timer.data = (unsigned long) ipr_cmd; in ipr_do_req()
957 ipr_cmd->timer.expires = jiffies + timeout; in ipr_do_req()
958 ipr_cmd->timer.function = (void (*)(unsigned long))timeout_func; in ipr_do_req()
960 add_timer(&ipr_cmd->timer); in ipr_do_req()
962 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, 0); in ipr_do_req()
964 ipr_send_command(ipr_cmd); in ipr_do_req()
977 static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd) in ipr_internal_cmd_done() argument
979 if (ipr_cmd->sibling) in ipr_internal_cmd_done()
980 ipr_cmd->sibling = NULL; in ipr_internal_cmd_done()
982 complete(&ipr_cmd->completion); in ipr_internal_cmd_done()
998 static void ipr_init_ioadl(struct ipr_cmnd *ipr_cmd, dma_addr_t dma_addr, in ipr_init_ioadl() argument
1001 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_init_ioadl()
1002 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_init_ioadl()
1004 ipr_cmd->dma_use_sg = 1; in ipr_init_ioadl()
1006 if (ipr_cmd->ioa_cfg->sis64) { in ipr_init_ioadl()
1011 ipr_cmd->ioarcb.ioadl_len = in ipr_init_ioadl()
1013 ipr_cmd->ioarcb.data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1019 ipr_cmd->ioarcb.read_ioadl_len = in ipr_init_ioadl()
1021 ipr_cmd->ioarcb.read_data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1023 ipr_cmd->ioarcb.ioadl_len = in ipr_init_ioadl()
1025 ipr_cmd->ioarcb.data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1039 static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd, in ipr_send_blocking_cmd() argument
1040 void (*timeout_func) (struct ipr_cmnd *ipr_cmd), in ipr_send_blocking_cmd()
1043 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_send_blocking_cmd()
1045 init_completion(&ipr_cmd->completion); in ipr_send_blocking_cmd()
1046 ipr_do_req(ipr_cmd, ipr_internal_cmd_done, timeout_func, timeout); in ipr_send_blocking_cmd()
1049 wait_for_completion(&ipr_cmd->completion); in ipr_send_blocking_cmd()
1082 struct ipr_cmnd *ipr_cmd; in ipr_send_hcam() local
1086 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_send_hcam()
1087 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_send_hcam()
1090 ipr_cmd->u.hostrcb = hostrcb; in ipr_send_hcam()
1091 ioarcb = &ipr_cmd->ioarcb; in ipr_send_hcam()
1100 ipr_init_ioadl(ipr_cmd, hostrcb->hostrcb_dma, in ipr_send_hcam()
1104 ipr_cmd->done = ipr_process_ccn; in ipr_send_hcam()
1106 ipr_cmd->done = ipr_process_error; in ipr_send_hcam()
1108 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_IOA_RES_ADDR); in ipr_send_hcam()
1110 ipr_send_command(ipr_cmd); in ipr_send_hcam()
1468 static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd) in ipr_process_ccn() argument
1470 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_process_ccn()
1471 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; in ipr_process_ccn()
1472 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_ccn()
1475 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_process_ccn()
2564 static void ipr_process_error(struct ipr_cmnd *ipr_cmd) in ipr_process_error() argument
2566 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_process_error()
2567 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; in ipr_process_error()
2568 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_error()
2577 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_process_error()
2602 static void ipr_timeout(struct ipr_cmnd *ipr_cmd) in ipr_timeout() argument
2605 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_timeout()
2617 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) in ipr_timeout()
2634 static void ipr_oper_timeout(struct ipr_cmnd *ipr_cmd) in ipr_oper_timeout() argument
2637 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_oper_timeout()
2649 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) { in ipr_oper_timeout()
3875 static void ipr_build_ucode_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ucode_ioadl64() argument
3878 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ucode_ioadl64()
3879 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ucode_ioadl64()
3883 ipr_cmd->dma_use_sg = sglist->num_dma_sg; in ipr_build_ucode_ioadl64()
3888 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ucode_ioadl64()
3889 for (i = 0; i < ipr_cmd->dma_use_sg; i++) { in ipr_build_ucode_ioadl64()
3906 static void ipr_build_ucode_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ucode_ioadl() argument
3909 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ucode_ioadl()
3910 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ucode_ioadl()
3914 ipr_cmd->dma_use_sg = sglist->num_dma_sg; in ipr_build_ucode_ioadl()
3919 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ucode_ioadl()
3921 for (i = 0; i < ipr_cmd->dma_use_sg; i++) { in ipr_build_ucode_ioadl()
4912 static int ipr_match_lun(struct ipr_cmnd *ipr_cmd, void *device) in ipr_match_lun() argument
4914 if (ipr_cmd->scsi_cmd && ipr_cmd->scsi_cmd->device == device) in ipr_match_lun()
4931 struct ipr_cmnd *ipr_cmd; in ipr_wait_for_ops() local
4944 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_wait_for_ops()
4945 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
4946 ipr_cmd->eh_comp = &comp; in ipr_wait_for_ops()
4961 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_wait_for_ops()
4962 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
4963 ipr_cmd->eh_comp = NULL; in ipr_wait_for_ops()
5034 struct ipr_cmnd *ipr_cmd; in ipr_device_reset() local
5041 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_device_reset()
5042 ioarcb = &ipr_cmd->ioarcb; in ipr_device_reset()
5045 if (ipr_cmd->ioa_cfg->sis64) { in ipr_device_reset()
5046 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_device_reset()
5060 ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_device_reset()
5061 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_device_reset()
5062 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_device_reset()
5064 if (ipr_cmd->ioa_cfg->sis64) in ipr_device_reset()
5065 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_device_reset()
5068 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_device_reset()
5127 struct ipr_cmnd *ipr_cmd; in __ipr_eh_dev_reset() local
5153 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in __ipr_eh_dev_reset()
5154 if (ipr_cmd->ioarcb.res_handle == res->res_handle) { in __ipr_eh_dev_reset()
5155 if (ipr_cmd->scsi_cmd) in __ipr_eh_dev_reset()
5156 ipr_cmd->done = ipr_scsi_eh_done; in __ipr_eh_dev_reset()
5157 if (ipr_cmd->qc) in __ipr_eh_dev_reset()
5158 ipr_cmd->done = ipr_sata_eh_done; in __ipr_eh_dev_reset()
5159 if (ipr_cmd->qc && in __ipr_eh_dev_reset()
5160 !(ipr_cmd->qc->flags & ATA_QCFLAG_FAILED)) { in __ipr_eh_dev_reset()
5161 ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT; in __ipr_eh_dev_reset()
5162 ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED; in __ipr_eh_dev_reset()
5179 list_for_each_entry(ipr_cmd, in __ipr_eh_dev_reset()
5181 if (ipr_cmd->ioarcb.res_handle == in __ipr_eh_dev_reset()
5224 static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_bus_reset_done() argument
5226 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_bus_reset_done()
5232 if (res->res_handle == ipr_cmd->ioarcb.res_handle) { in ipr_bus_reset_done()
5242 if (ipr_cmd->sibling->sibling) in ipr_bus_reset_done()
5243 ipr_cmd->sibling->sibling = NULL; in ipr_bus_reset_done()
5245 ipr_cmd->sibling->done(ipr_cmd->sibling); in ipr_bus_reset_done()
5247 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_bus_reset_done()
5262 static void ipr_abort_timeout(struct ipr_cmnd *ipr_cmd) in ipr_abort_timeout() argument
5265 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_abort_timeout()
5271 if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) { in ipr_abort_timeout()
5276 sdev_printk(KERN_ERR, ipr_cmd->u.sdev, "Abort timed out. Resetting bus.\n"); in ipr_abort_timeout()
5278 ipr_cmd->sibling = reset_cmd; in ipr_abort_timeout()
5279 reset_cmd->sibling = ipr_cmd; in ipr_abort_timeout()
5280 reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle; in ipr_abort_timeout()
5302 struct ipr_cmnd *ipr_cmd; in ipr_cancel_op() local
5336 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_cancel_op()
5337 if (ipr_cmd->scsi_cmd == scsi_cmd) { in ipr_cancel_op()
5338 ipr_cmd->done = ipr_scsi_eh_done; in ipr_cancel_op()
5349 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_cancel_op()
5350 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_cancel_op()
5351 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_cancel_op()
5354 ipr_cmd->u.sdev = scsi_cmd->device; in ipr_cancel_op()
5358 ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_CANCEL_ALL_TIMEOUT); in ipr_cancel_op()
5359 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_cancel_op()
5370 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_cancel_op()
5527 struct ipr_cmnd *ipr_cmd; in ipr_process_hrrq() local
5550 ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index]; in ipr_process_hrrq()
5551 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_hrrq()
5553 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc); in ipr_process_hrrq()
5555 list_move_tail(&ipr_cmd->queue, doneq); in ipr_process_hrrq()
5575 struct ipr_cmnd *ipr_cmd, *temp; in ipr_iopoll() local
5590 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_iopoll()
5591 list_del(&ipr_cmd->queue); in ipr_iopoll()
5592 del_timer(&ipr_cmd->timer); in ipr_iopoll()
5593 ipr_cmd->fast_done(ipr_cmd); in ipr_iopoll()
5615 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr() local
5659 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr()
5660 list_del(&ipr_cmd->queue); in ipr_isr()
5661 del_timer(&ipr_cmd->timer); in ipr_isr()
5662 ipr_cmd->fast_done(ipr_cmd); in ipr_isr()
5680 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr_mhrrq() local
5710 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr_mhrrq()
5711 list_del(&ipr_cmd->queue); in ipr_isr_mhrrq()
5712 del_timer(&ipr_cmd->timer); in ipr_isr_mhrrq()
5713 ipr_cmd->fast_done(ipr_cmd); in ipr_isr_mhrrq()
5727 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl64() argument
5733 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl64()
5734 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl64()
5735 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ioadl64()
5748 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl64()
5752 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl64()
5760 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl64()
5779 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl() argument
5785 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl()
5786 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl()
5787 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ioadl()
5799 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl()
5806 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
5811 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
5814 if (ipr_cmd->dma_use_sg <= ARRAY_SIZE(ioarcb->u.add_data.u.ioadl)) { in ipr_build_ioadl()
5816 ioarcb->write_ioadl_addr = cpu_to_be32((ipr_cmd->dma_addr) + in ipr_build_ioadl()
5821 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl()
5841 static void ipr_erp_done(struct ipr_cmnd *ipr_cmd) in ipr_erp_done() argument
5843 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_done()
5845 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_done()
5852 memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer, in ipr_erp_done()
5861 scsi_dma_unmap(ipr_cmd->scsi_cmd); in ipr_erp_done()
5862 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_erp_done()
5873 static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) in ipr_reinit_ipr_cmnd_for_erp() argument
5875 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_reinit_ipr_cmnd_for_erp()
5876 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_reinit_ipr_cmnd_for_erp()
5877 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_reinit_ipr_cmnd_for_erp()
5887 if (ipr_cmd->ioa_cfg->sis64) in ipr_reinit_ipr_cmnd_for_erp()
5907 static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) in ipr_erp_request_sense() argument
5909 struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_erp_request_sense()
5910 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_request_sense()
5913 ipr_erp_done(ipr_cmd); in ipr_erp_request_sense()
5917 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in ipr_erp_request_sense()
5926 ipr_init_ioadl(ipr_cmd, ipr_cmd->sense_buffer_dma, in ipr_erp_request_sense()
5929 ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout, in ipr_erp_request_sense()
5945 static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd) in ipr_erp_cancel_all() argument
5947 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_cancel_all()
5953 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in ipr_erp_cancel_all()
5956 ipr_erp_request_sense(ipr_cmd); in ipr_erp_cancel_all()
5960 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_erp_cancel_all()
5964 ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout, in ipr_erp_cancel_all()
5982 struct ipr_cmnd *ipr_cmd, struct ipr_resource_entry *res) in ipr_dump_ioasa() argument
5987 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_dump_ioasa()
6044 static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd) in ipr_gen_sense() argument
6047 u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer; in ipr_gen_sense()
6048 struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata; in ipr_gen_sense()
6049 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_gen_sense()
6057 ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION; in ipr_gen_sense()
6137 static int ipr_get_autosense(struct ipr_cmnd *ipr_cmd) in ipr_get_autosense() argument
6139 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_get_autosense()
6140 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64; in ipr_get_autosense()
6145 if (ipr_cmd->ioa_cfg->sis64) in ipr_get_autosense()
6146 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa64->auto_sense.data, in ipr_get_autosense()
6150 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data, in ipr_get_autosense()
6168 struct ipr_cmnd *ipr_cmd) in ipr_erp_start() argument
6170 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_start()
6172 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_start()
6176 ipr_scsi_eh_done(ipr_cmd); in ipr_erp_start()
6181 ipr_gen_sense(ipr_cmd); in ipr_erp_start()
6183 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_erp_start()
6225 if (!ipr_get_autosense(ipr_cmd)) { in ipr_erp_start()
6227 ipr_erp_cancel_all(ipr_cmd); in ipr_erp_start()
6252 scsi_dma_unmap(ipr_cmd->scsi_cmd); in ipr_erp_start()
6253 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_erp_start()
6267 static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd) in ipr_scsi_done() argument
6269 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_scsi_done()
6270 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_scsi_done()
6271 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_scsi_done()
6274 scsi_set_resid(scsi_cmd, be32_to_cpu(ipr_cmd->s.ioasa.hdr.residual_data_len)); in ipr_scsi_done()
6279 spin_lock_irqsave(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6280 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_scsi_done()
6282 spin_unlock_irqrestore(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6285 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6286 ipr_erp_start(ioa_cfg, ipr_cmd); in ipr_scsi_done()
6287 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6310 struct ipr_cmnd *ipr_cmd; in ipr_queuecommand() local
6351 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_queuecommand()
6352 if (ipr_cmd == NULL) { in ipr_queuecommand()
6358 ipr_init_ipr_cmnd(ipr_cmd, ipr_scsi_done); in ipr_queuecommand()
6359 ioarcb = &ipr_cmd->ioarcb; in ipr_queuecommand()
6362 ipr_cmd->scsi_cmd = scsi_cmd; in ipr_queuecommand()
6363 ipr_cmd->done = ipr_scsi_eh_done; in ipr_queuecommand()
6389 rc = ipr_build_ioadl64(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6391 rc = ipr_build_ioadl(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6395 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6403 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6414 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_pending_q); in ipr_queuecommand()
6415 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_queuecommand()
6416 ipr_send_command(ipr_cmd); in ipr_queuecommand()
6554 struct ipr_cmnd *ipr_cmd; in ipr_ata_post_internal() local
6567 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_ata_post_internal()
6568 if (ipr_cmd->qc == qc) { in ipr_ata_post_internal()
6614 static void ipr_sata_done(struct ipr_cmnd *ipr_cmd) in ipr_sata_done() argument
6616 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_sata_done()
6617 struct ata_queued_cmd *qc = ipr_cmd->qc; in ipr_sata_done()
6620 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_sata_done()
6622 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6623 if (ipr_cmd->ioa_cfg->sis64) in ipr_sata_done()
6624 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_sata_done()
6627 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_sata_done()
6629 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_sata_done()
6631 if (be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc_specific) & IPR_ATA_DEVICE_WAS_RESET) in ipr_sata_done()
6638 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_sata_done()
6639 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6649 static void ipr_build_ata_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl64() argument
6653 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl64()
6654 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ata_ioadl.ioadl64; in ipr_build_ata_ioadl64()
6659 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_build_ata_ioadl64()
6672 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl64()
6695 static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl() argument
6699 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl()
6700 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ata_ioadl()
6714 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
6719 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
6746 struct ipr_cmnd *ipr_cmd; in ipr_qc_defer() local
6765 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_qc_defer()
6766 if (ipr_cmd == NULL) { in ipr_qc_defer()
6771 qc->lldd_task = ipr_cmd; in ipr_qc_defer()
6789 struct ipr_cmnd *ipr_cmd; in ipr_qc_issue() local
6796 ipr_cmd = qc->lldd_task; in ipr_qc_issue()
6797 if (ipr_cmd == NULL) in ipr_qc_issue()
6801 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
6802 if (unlikely(!ipr_cmd->hrrq->allow_cmds || in ipr_qc_issue()
6803 ipr_cmd->hrrq->ioa_is_dead)) { in ipr_qc_issue()
6804 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_qc_issue()
6805 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
6809 ipr_init_ipr_cmnd(ipr_cmd, ipr_lock_and_done); in ipr_qc_issue()
6810 ioarcb = &ipr_cmd->ioarcb; in ipr_qc_issue()
6813 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_qc_issue()
6821 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_qc_issue()
6822 ipr_cmd->qc = qc; in ipr_qc_issue()
6823 ipr_cmd->done = ipr_sata_done; in ipr_qc_issue()
6824 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_qc_issue()
6828 ipr_cmd->dma_use_sg = qc->n_elem; in ipr_qc_issue()
6831 ipr_build_ata_ioadl64(ipr_cmd, qc); in ipr_qc_issue()
6833 ipr_build_ata_ioadl(ipr_cmd, qc); in ipr_qc_issue()
6838 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_qc_issue()
6861 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
6865 ipr_send_command(ipr_cmd); in ipr_qc_issue()
6866 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
6969 static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_bringdown_done() argument
6971 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_bringdown_done()
6991 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_bringdown_done()
7009 static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_reset_done() argument
7011 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_reset_done()
7047 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_reset_done()
7090 static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd) in ipr_set_supported_devs() argument
7092 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_set_supported_devs()
7094 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_set_supported_devs()
7095 struct ipr_resource_entry *res = ipr_cmd->u.res; in ipr_set_supported_devs()
7097 ipr_cmd->job_step = ipr_ioa_reset_done; in ipr_set_supported_devs()
7103 ipr_cmd->u.res = res; in ipr_set_supported_devs()
7115 ipr_init_ioadl(ipr_cmd, in ipr_set_supported_devs()
7121 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_set_supported_devs()
7125 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_set_supported_devs()
7291 static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_select() argument
7295 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_select()
7304 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_WRITE_LAST); in ipr_build_mode_select()
7317 static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page28() argument
7319 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page28()
7330 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page28()
7334 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_ioafp_mode_select_page28()
7335 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_ioafp_mode_select_page28()
7337 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page28()
7354 static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_sense() argument
7358 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_sense()
7366 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_build_mode_sense()
7378 static int ipr_reset_cmd_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_cmd_failed() argument
7380 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cmd_failed()
7381 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_cmd_failed()
7385 ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc); in ipr_reset_cmd_failed()
7388 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cmd_failed()
7402 static int ipr_reset_mode_sense_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_failed() argument
7404 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_mode_sense_failed()
7405 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_failed()
7408 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_reset_mode_sense_failed()
7409 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_reset_mode_sense_failed()
7414 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_failed()
7427 static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page28() argument
7429 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page28()
7432 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page28()
7437 ipr_cmd->job_step = ipr_ioafp_mode_select_page28; in ipr_ioafp_mode_sense_page28()
7438 ipr_cmd->job_step_failed = ipr_reset_mode_sense_failed; in ipr_ioafp_mode_sense_page28()
7440 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page28()
7455 static int ipr_ioafp_mode_select_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page24() argument
7457 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page24()
7472 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page24()
7476 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_ioafp_mode_select_page24()
7477 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page24()
7493 static int ipr_reset_mode_sense_page24_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_page24_failed() argument
7495 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_page24_failed()
7498 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_reset_mode_sense_page24_failed()
7502 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_page24_failed()
7515 static int ipr_ioafp_mode_sense_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page24() argument
7517 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page24()
7520 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page24()
7525 ipr_cmd->job_step = ipr_ioafp_mode_select_page24; in ipr_ioafp_mode_sense_page24()
7526 ipr_cmd->job_step_failed = ipr_reset_mode_sense_page24_failed; in ipr_ioafp_mode_sense_page24()
7528 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page24()
7546 static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd) in ipr_init_res_table() argument
7548 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_init_res_table()
7619 ipr_cmd->job_step = ipr_ioafp_mode_sense_page24; in ipr_init_res_table()
7621 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_init_res_table()
7637 static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_query_ioa_cfg() argument
7639 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_query_ioa_cfg()
7640 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_query_ioa_cfg()
7658 ipr_init_ioadl(ipr_cmd, ioa_cfg->cfg_table_dma, ioa_cfg->cfg_table_size, in ipr_ioafp_query_ioa_cfg()
7661 ipr_cmd->job_step = ipr_init_res_table; in ipr_ioafp_query_ioa_cfg()
7663 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_query_ioa_cfg()
7678 static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page, in ipr_ioafp_inquiry() argument
7681 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_inquiry()
7692 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_ioafp_inquiry()
7694 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_inquiry()
7729 static int ipr_ioafp_cap_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_cap_inquiry() argument
7731 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_cap_inquiry()
7736 ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg; in ipr_ioafp_cap_inquiry()
7740 ipr_ioafp_inquiry(ipr_cmd, 1, 0xD0, in ipr_ioafp_cap_inquiry()
7760 static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page3_inquiry() argument
7762 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page3_inquiry()
7766 ipr_cmd->job_step = ipr_ioafp_cap_inquiry; in ipr_ioafp_page3_inquiry()
7768 ipr_ioafp_inquiry(ipr_cmd, 1, 3, in ipr_ioafp_page3_inquiry()
7786 static int ipr_ioafp_page0_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page0_inquiry() argument
7788 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page0_inquiry()
7805 list_add_tail(&ipr_cmd->queue, in ipr_ioafp_page0_inquiry()
7811 ipr_cmd->job_step = ipr_ioafp_page3_inquiry; in ipr_ioafp_page0_inquiry()
7813 ipr_ioafp_inquiry(ipr_cmd, 1, 0, in ipr_ioafp_page0_inquiry()
7830 static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_std_inquiry() argument
7832 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_std_inquiry()
7835 ipr_cmd->job_step = ipr_ioafp_page0_inquiry; in ipr_ioafp_std_inquiry()
7837 ipr_ioafp_inquiry(ipr_cmd, 0, 0, in ipr_ioafp_std_inquiry()
7855 static int ipr_ioafp_identify_hrrq(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_identify_hrrq() argument
7857 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_identify_hrrq()
7858 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_identify_hrrq()
7862 ipr_cmd->job_step = ipr_ioafp_std_inquiry; in ipr_ioafp_identify_hrrq()
7912 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_identify_hrrq()
7916 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_ioafp_identify_hrrq()
7939 static void ipr_reset_timer_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_timer_done() argument
7941 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_timer_done()
7946 if (ioa_cfg->reset_cmd == ipr_cmd) { in ipr_reset_timer_done()
7947 list_del(&ipr_cmd->queue); in ipr_reset_timer_done()
7948 ipr_cmd->done(ipr_cmd); in ipr_reset_timer_done()
7968 static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd, in ipr_reset_start_timer() argument
7973 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_start_timer()
7974 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_start_timer()
7976 ipr_cmd->timer.data = (unsigned long) ipr_cmd; in ipr_reset_start_timer()
7977 ipr_cmd->timer.expires = jiffies + timeout; in ipr_reset_start_timer()
7978 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_reset_timer_done; in ipr_reset_start_timer()
7979 add_timer(&ipr_cmd->timer); in ipr_reset_start_timer()
8023 static int ipr_reset_next_stage(struct ipr_cmnd *ipr_cmd) in ipr_reset_next_stage() argument
8028 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_next_stage()
8049 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8053 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8062 ipr_cmd->timer.data = (unsigned long) ipr_cmd; in ipr_reset_next_stage()
8063 ipr_cmd->timer.expires = jiffies + stage_time * HZ; in ipr_reset_next_stage()
8064 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; in ipr_reset_next_stage()
8065 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_next_stage()
8066 add_timer(&ipr_cmd->timer); in ipr_reset_next_stage()
8068 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_next_stage()
8083 static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_enable_ioa() argument
8085 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_enable_ioa()
8091 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_enable_ioa()
8130 ipr_cmd->job_step = ipr_reset_next_stage; in ipr_reset_enable_ioa()
8134 ipr_cmd->timer.data = (unsigned long) ipr_cmd; in ipr_reset_enable_ioa()
8135 ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ); in ipr_reset_enable_ioa()
8136 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; in ipr_reset_enable_ioa()
8137 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_enable_ioa()
8138 add_timer(&ipr_cmd->timer); in ipr_reset_enable_ioa()
8139 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_enable_ioa()
8155 static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_for_dump() argument
8157 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_for_dump()
8165 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_wait_for_dump()
8261 static int ipr_reset_get_unit_check_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_get_unit_check_job() argument
8263 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_get_unit_check_job()
8268 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_get_unit_check_job()
8269 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_get_unit_check_job()
8286 static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd) in ipr_reset_restore_cfg_space() argument
8288 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_restore_cfg_space()
8296 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_restore_cfg_space()
8310 ipr_cmd->job_step = ipr_reset_get_unit_check_job; in ipr_reset_restore_cfg_space()
8311 ipr_reset_start_timer(ipr_cmd, IPR_DUMP_DELAY_TIMEOUT); in ipr_reset_restore_cfg_space()
8316 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_restore_cfg_space()
8317 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_restore_cfg_space()
8323 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_restore_cfg_space()
8325 ipr_cmd->job_step = ipr_reset_enable_ioa; in ipr_reset_restore_cfg_space()
8331 ipr_reset_start_timer(ipr_cmd, IPR_SIS64_DUMP_TIMEOUT); in ipr_reset_restore_cfg_space()
8333 ipr_reset_start_timer(ipr_cmd, IPR_SIS32_DUMP_TIMEOUT); in ipr_reset_restore_cfg_space()
8334 ipr_cmd->job_step = ipr_reset_wait_for_dump; in ipr_reset_restore_cfg_space()
8353 static int ipr_reset_bist_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_bist_done() argument
8355 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_bist_done()
8361 ipr_cmd->job_step = ipr_reset_restore_cfg_space; in ipr_reset_bist_done()
8375 static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_start_bist() argument
8377 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_start_bist()
8388 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_start_bist()
8389 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_start_bist()
8393 pci_cfg_access_unlock(ipr_cmd->ioa_cfg->pdev); in ipr_reset_start_bist()
8395 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_start_bist()
8412 static int ipr_reset_slot_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset_done() argument
8415 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_slot_reset_done()
8416 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_slot_reset_done()
8430 struct ipr_cmnd *ipr_cmd = container_of(work, struct ipr_cmnd, work); in ipr_reset_reset_work() local
8431 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_reset_work()
8441 if (ioa_cfg->reset_cmd == ipr_cmd) in ipr_reset_reset_work()
8442 ipr_reset_ioa_job(ipr_cmd); in ipr_reset_reset_work()
8456 static int ipr_reset_slot_reset(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset() argument
8458 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_slot_reset()
8461 INIT_WORK(&ipr_cmd->work, ipr_reset_reset_work); in ipr_reset_slot_reset()
8462 queue_work(ioa_cfg->reset_work_q, &ipr_cmd->work); in ipr_reset_slot_reset()
8463 ipr_cmd->job_step = ipr_reset_slot_reset_done; in ipr_reset_slot_reset()
8477 static int ipr_reset_block_config_access_wait(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access_wait() argument
8479 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_block_config_access_wait()
8484 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8486 if (ipr_cmd->u.time_left) { in ipr_reset_block_config_access_wait()
8488 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access_wait()
8489 ipr_reset_start_timer(ipr_cmd, in ipr_reset_block_config_access_wait()
8492 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8510 static int ipr_reset_block_config_access(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access() argument
8512 ipr_cmd->ioa_cfg->cfg_locked = 0; in ipr_reset_block_config_access()
8513 ipr_cmd->job_step = ipr_reset_block_config_access_wait; in ipr_reset_block_config_access()
8514 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access()
8548 static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_to_start_bist() argument
8550 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_to_start_bist()
8553 if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) { in ipr_reset_wait_to_start_bist()
8554 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_wait_to_start_bist()
8555 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_wait_to_start_bist()
8557 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_wait_to_start_bist()
8576 static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd) in ipr_reset_alert() argument
8578 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_alert()
8588 ipr_cmd->job_step = ipr_reset_wait_to_start_bist; in ipr_reset_alert()
8590 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_alert()
8593 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_alert()
8594 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_alert()
8609 static int ipr_reset_quiesce_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_quiesce_done() argument
8611 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_quiesce_done()
8614 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_quiesce_done()
8630 static int ipr_reset_cancel_hcam_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam_done() argument
8632 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam_done()
8639 ipr_cmd->job_step = ipr_reset_quiesce_done; in ipr_reset_cancel_hcam_done()
8646 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cancel_hcam_done()
8669 static int ipr_reset_cancel_hcam(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam() argument
8671 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam()
8678 ipr_cmd->job_step = ipr_reset_cancel_hcam_done; in ipr_reset_cancel_hcam()
8686 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_cancel_hcam()
8687 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_cancel_hcam()
8688 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_reset_cancel_hcam()
8701 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_cancel_hcam()
8705 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_cancel_hcam()
8710 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_cancel_hcam()
8725 static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download_done() argument
8727 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download_done()
8733 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download_done()
8747 static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download() argument
8749 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download()
8753 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download()
8758 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_ucode_download()
8759 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; in ipr_reset_ucode_download()
8760 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER; in ipr_reset_ucode_download()
8761 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE; in ipr_reset_ucode_download()
8762 ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16; in ipr_reset_ucode_download()
8763 ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8; in ipr_reset_ucode_download()
8764 ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff; in ipr_reset_ucode_download()
8767 ipr_build_ucode_ioadl64(ipr_cmd, sglist); in ipr_reset_ucode_download()
8769 ipr_build_ucode_ioadl(ipr_cmd, sglist); in ipr_reset_ucode_download()
8770 ipr_cmd->job_step = ipr_reset_ucode_download_done; in ipr_reset_ucode_download()
8772 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_ucode_download()
8790 static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_shutdown_ioa() argument
8792 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_shutdown_ioa()
8793 enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type; in ipr_reset_shutdown_ioa()
8799 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_shutdown_ioa()
8802 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_shutdown_ioa()
8803 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_shutdown_ioa()
8804 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_reset_shutdown_ioa()
8805 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type; in ipr_reset_shutdown_ioa()
8816 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout); in ipr_reset_shutdown_ioa()
8819 ipr_cmd->job_step = ipr_reset_ucode_download; in ipr_reset_shutdown_ioa()
8821 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_shutdown_ioa()
8836 static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_ioa_job() argument
8839 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ioa_job()
8842 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_ioa_job()
8844 if (ioa_cfg->reset_cmd != ipr_cmd) { in ipr_reset_ioa_job()
8849 list_add_tail(&ipr_cmd->queue, in ipr_reset_ioa_job()
8850 &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_ioa_job()
8855 rc = ipr_cmd->job_step_failed(ipr_cmd); in ipr_reset_ioa_job()
8860 ipr_reinit_ipr_cmnd(ipr_cmd); in ipr_reset_ioa_job()
8861 ipr_cmd->job_step_failed = ipr_reset_cmd_failed; in ipr_reset_ioa_job()
8862 rc = ipr_cmd->job_step(ipr_cmd); in ipr_reset_ioa_job()
8884 struct ipr_cmnd *ipr_cmd; in _ipr_initiate_ioa_reset() local
8897 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in _ipr_initiate_ioa_reset()
8898 ioa_cfg->reset_cmd = ipr_cmd; in _ipr_initiate_ioa_reset()
8899 ipr_cmd->job_step = job_step; in _ipr_initiate_ioa_reset()
8900 ipr_cmd->u.shutdown_type = shutdown_type; in _ipr_initiate_ioa_reset()
8902 ipr_reset_ioa_job(ipr_cmd); in _ipr_initiate_ioa_reset()
8974 static int ipr_reset_freeze(struct ipr_cmnd *ipr_cmd) in ipr_reset_freeze() argument
8976 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_freeze()
8986 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_freeze()
8987 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_freeze()
9280 struct ipr_cmnd *ipr_cmd; in ipr_alloc_cmd_blks() local
9335 ipr_cmd = dma_pool_alloc(ioa_cfg->ipr_cmd_pool, GFP_KERNEL, &dma_addr); in ipr_alloc_cmd_blks()
9337 if (!ipr_cmd) { in ipr_alloc_cmd_blks()
9342 memset(ipr_cmd, 0, sizeof(*ipr_cmd)); in ipr_alloc_cmd_blks()
9343 ioa_cfg->ipr_cmnd_list[i] = ipr_cmd; in ipr_alloc_cmd_blks()
9346 ioarcb = &ipr_cmd->ioarcb; in ipr_alloc_cmd_blks()
9347 ipr_cmd->dma_addr = dma_addr; in ipr_alloc_cmd_blks()
9367 ipr_cmd->cmd_index = i; in ipr_alloc_cmd_blks()
9368 ipr_cmd->ioa_cfg = ioa_cfg; in ipr_alloc_cmd_blks()
9369 ipr_cmd->sense_buffer_dma = dma_addr + in ipr_alloc_cmd_blks()
9372 ipr_cmd->ioarcb.cmd_pkt.hrrq_id = hrrq_id; in ipr_alloc_cmd_blks()
9373 ipr_cmd->hrrq = &ioa_cfg->hrrq[hrrq_id]; in ipr_alloc_cmd_blks()
9374 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_alloc_cmd_blks()
10466 static void ipr_halt_done(struct ipr_cmnd *ipr_cmd) in ipr_halt_done() argument
10468 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_halt_done()
10479 struct ipr_cmnd *ipr_cmd; in ipr_halt() local
10496 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_halt()
10497 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_halt()
10498 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_halt()
10499 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_halt()
10500 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_SHUTDOWN_PREPARE_FOR_NORMAL; in ipr_halt()
10502 ipr_do_req(ipr_cmd, ipr_halt_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_halt()