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()
1469 static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd) in ipr_process_ccn() argument
1471 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_process_ccn()
1472 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; in ipr_process_ccn()
1473 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_ccn()
1476 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_process_ccn()
2565 static void ipr_process_error(struct ipr_cmnd *ipr_cmd) in ipr_process_error() argument
2567 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_process_error()
2568 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; in ipr_process_error()
2569 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_error()
2578 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_process_error()
2603 static void ipr_timeout(struct ipr_cmnd *ipr_cmd) in ipr_timeout() argument
2606 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_timeout()
2618 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) in ipr_timeout()
2635 static void ipr_oper_timeout(struct ipr_cmnd *ipr_cmd) in ipr_oper_timeout() argument
2638 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_oper_timeout()
2650 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) { in ipr_oper_timeout()
3876 static void ipr_build_ucode_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ucode_ioadl64() argument
3879 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ucode_ioadl64()
3880 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ucode_ioadl64()
3884 ipr_cmd->dma_use_sg = sglist->num_dma_sg; in ipr_build_ucode_ioadl64()
3889 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ucode_ioadl64()
3890 for (i = 0; i < ipr_cmd->dma_use_sg; i++) { in ipr_build_ucode_ioadl64()
3907 static void ipr_build_ucode_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ucode_ioadl() argument
3910 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ucode_ioadl()
3911 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ucode_ioadl()
3915 ipr_cmd->dma_use_sg = sglist->num_dma_sg; in ipr_build_ucode_ioadl()
3920 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ucode_ioadl()
3922 for (i = 0; i < ipr_cmd->dma_use_sg; i++) { in ipr_build_ucode_ioadl()
4917 static int ipr_match_lun(struct ipr_cmnd *ipr_cmd, void *device) in ipr_match_lun() argument
4919 if (ipr_cmd->scsi_cmd && ipr_cmd->scsi_cmd->device == device) in ipr_match_lun()
4936 struct ipr_cmnd *ipr_cmd; in ipr_wait_for_ops() local
4949 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_wait_for_ops()
4950 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
4951 ipr_cmd->eh_comp = &comp; in ipr_wait_for_ops()
4966 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_wait_for_ops()
4967 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
4968 ipr_cmd->eh_comp = NULL; in ipr_wait_for_ops()
5039 struct ipr_cmnd *ipr_cmd; in ipr_device_reset() local
5046 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_device_reset()
5047 ioarcb = &ipr_cmd->ioarcb; in ipr_device_reset()
5050 if (ipr_cmd->ioa_cfg->sis64) { in ipr_device_reset()
5051 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_device_reset()
5065 ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_device_reset()
5066 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_device_reset()
5067 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_device_reset()
5069 if (ipr_cmd->ioa_cfg->sis64) in ipr_device_reset()
5070 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_device_reset()
5073 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_device_reset()
5132 struct ipr_cmnd *ipr_cmd; in __ipr_eh_dev_reset() local
5158 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in __ipr_eh_dev_reset()
5159 if (ipr_cmd->ioarcb.res_handle == res->res_handle) { in __ipr_eh_dev_reset()
5160 if (ipr_cmd->scsi_cmd) in __ipr_eh_dev_reset()
5161 ipr_cmd->done = ipr_scsi_eh_done; in __ipr_eh_dev_reset()
5162 if (ipr_cmd->qc) in __ipr_eh_dev_reset()
5163 ipr_cmd->done = ipr_sata_eh_done; in __ipr_eh_dev_reset()
5164 if (ipr_cmd->qc && in __ipr_eh_dev_reset()
5165 !(ipr_cmd->qc->flags & ATA_QCFLAG_FAILED)) { in __ipr_eh_dev_reset()
5166 ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT; in __ipr_eh_dev_reset()
5167 ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED; in __ipr_eh_dev_reset()
5184 list_for_each_entry(ipr_cmd, in __ipr_eh_dev_reset()
5186 if (ipr_cmd->ioarcb.res_handle == in __ipr_eh_dev_reset()
5229 static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_bus_reset_done() argument
5231 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_bus_reset_done()
5237 if (res->res_handle == ipr_cmd->ioarcb.res_handle) { in ipr_bus_reset_done()
5247 if (ipr_cmd->sibling->sibling) in ipr_bus_reset_done()
5248 ipr_cmd->sibling->sibling = NULL; in ipr_bus_reset_done()
5250 ipr_cmd->sibling->done(ipr_cmd->sibling); in ipr_bus_reset_done()
5252 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_bus_reset_done()
5267 static void ipr_abort_timeout(struct ipr_cmnd *ipr_cmd) in ipr_abort_timeout() argument
5270 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_abort_timeout()
5276 if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) { in ipr_abort_timeout()
5281 sdev_printk(KERN_ERR, ipr_cmd->u.sdev, "Abort timed out. Resetting bus.\n"); in ipr_abort_timeout()
5283 ipr_cmd->sibling = reset_cmd; in ipr_abort_timeout()
5284 reset_cmd->sibling = ipr_cmd; in ipr_abort_timeout()
5285 reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle; in ipr_abort_timeout()
5307 struct ipr_cmnd *ipr_cmd; in ipr_cancel_op() local
5341 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_cancel_op()
5342 if (ipr_cmd->scsi_cmd == scsi_cmd) { in ipr_cancel_op()
5343 ipr_cmd->done = ipr_scsi_eh_done; in ipr_cancel_op()
5354 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_cancel_op()
5355 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_cancel_op()
5356 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_cancel_op()
5359 ipr_cmd->u.sdev = scsi_cmd->device; in ipr_cancel_op()
5363 ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_CANCEL_ALL_TIMEOUT); in ipr_cancel_op()
5364 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_cancel_op()
5375 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_cancel_op()
5532 struct ipr_cmnd *ipr_cmd; in ipr_process_hrrq() local
5555 ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index]; in ipr_process_hrrq()
5556 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_hrrq()
5558 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc); in ipr_process_hrrq()
5560 list_move_tail(&ipr_cmd->queue, doneq); in ipr_process_hrrq()
5580 struct ipr_cmnd *ipr_cmd, *temp; in ipr_iopoll() local
5595 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_iopoll()
5596 list_del(&ipr_cmd->queue); in ipr_iopoll()
5597 del_timer(&ipr_cmd->timer); in ipr_iopoll()
5598 ipr_cmd->fast_done(ipr_cmd); in ipr_iopoll()
5620 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr() local
5664 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr()
5665 list_del(&ipr_cmd->queue); in ipr_isr()
5666 del_timer(&ipr_cmd->timer); in ipr_isr()
5667 ipr_cmd->fast_done(ipr_cmd); in ipr_isr()
5685 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr_mhrrq() local
5715 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr_mhrrq()
5716 list_del(&ipr_cmd->queue); in ipr_isr_mhrrq()
5717 del_timer(&ipr_cmd->timer); in ipr_isr_mhrrq()
5718 ipr_cmd->fast_done(ipr_cmd); in ipr_isr_mhrrq()
5732 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl64() argument
5738 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl64()
5739 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl64()
5740 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ioadl64()
5753 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl64()
5757 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl64()
5765 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl64()
5784 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl() argument
5790 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl()
5791 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl()
5792 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ioadl()
5804 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl()
5811 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
5816 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
5819 if (ipr_cmd->dma_use_sg <= ARRAY_SIZE(ioarcb->u.add_data.u.ioadl)) { in ipr_build_ioadl()
5821 ioarcb->write_ioadl_addr = cpu_to_be32((ipr_cmd->dma_addr) + in ipr_build_ioadl()
5826 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl()
5846 static void ipr_erp_done(struct ipr_cmnd *ipr_cmd) in ipr_erp_done() argument
5848 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_done()
5850 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_done()
5857 memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer, in ipr_erp_done()
5866 scsi_dma_unmap(ipr_cmd->scsi_cmd); in ipr_erp_done()
5867 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_erp_done()
5878 static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) in ipr_reinit_ipr_cmnd_for_erp() argument
5880 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_reinit_ipr_cmnd_for_erp()
5881 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_reinit_ipr_cmnd_for_erp()
5882 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_reinit_ipr_cmnd_for_erp()
5892 if (ipr_cmd->ioa_cfg->sis64) in ipr_reinit_ipr_cmnd_for_erp()
5912 static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) in ipr_erp_request_sense() argument
5914 struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_erp_request_sense()
5915 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_request_sense()
5918 ipr_erp_done(ipr_cmd); in ipr_erp_request_sense()
5922 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in ipr_erp_request_sense()
5931 ipr_init_ioadl(ipr_cmd, ipr_cmd->sense_buffer_dma, in ipr_erp_request_sense()
5934 ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout, in ipr_erp_request_sense()
5950 static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd) in ipr_erp_cancel_all() argument
5952 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_cancel_all()
5958 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in ipr_erp_cancel_all()
5961 ipr_erp_request_sense(ipr_cmd); in ipr_erp_cancel_all()
5965 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_erp_cancel_all()
5969 ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout, in ipr_erp_cancel_all()
5987 struct ipr_cmnd *ipr_cmd, struct ipr_resource_entry *res) in ipr_dump_ioasa() argument
5992 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_dump_ioasa()
6049 static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd) in ipr_gen_sense() argument
6052 u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer; in ipr_gen_sense()
6053 struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata; in ipr_gen_sense()
6054 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_gen_sense()
6062 ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION; in ipr_gen_sense()
6142 static int ipr_get_autosense(struct ipr_cmnd *ipr_cmd) in ipr_get_autosense() argument
6144 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_get_autosense()
6145 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64; in ipr_get_autosense()
6150 if (ipr_cmd->ioa_cfg->sis64) in ipr_get_autosense()
6151 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa64->auto_sense.data, in ipr_get_autosense()
6155 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data, in ipr_get_autosense()
6173 struct ipr_cmnd *ipr_cmd) in ipr_erp_start() argument
6175 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_start()
6177 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_start()
6181 ipr_scsi_eh_done(ipr_cmd); in ipr_erp_start()
6186 ipr_gen_sense(ipr_cmd); in ipr_erp_start()
6188 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_erp_start()
6230 if (!ipr_get_autosense(ipr_cmd)) { in ipr_erp_start()
6232 ipr_erp_cancel_all(ipr_cmd); in ipr_erp_start()
6257 scsi_dma_unmap(ipr_cmd->scsi_cmd); in ipr_erp_start()
6258 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_erp_start()
6272 static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd) in ipr_scsi_done() argument
6274 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_scsi_done()
6275 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_scsi_done()
6276 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_scsi_done()
6279 scsi_set_resid(scsi_cmd, be32_to_cpu(ipr_cmd->s.ioasa.hdr.residual_data_len)); in ipr_scsi_done()
6284 spin_lock_irqsave(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6285 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_scsi_done()
6287 spin_unlock_irqrestore(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6290 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6291 ipr_erp_start(ioa_cfg, ipr_cmd); in ipr_scsi_done()
6292 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6315 struct ipr_cmnd *ipr_cmd; in ipr_queuecommand() local
6356 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_queuecommand()
6357 if (ipr_cmd == NULL) { in ipr_queuecommand()
6363 ipr_init_ipr_cmnd(ipr_cmd, ipr_scsi_done); in ipr_queuecommand()
6364 ioarcb = &ipr_cmd->ioarcb; in ipr_queuecommand()
6367 ipr_cmd->scsi_cmd = scsi_cmd; in ipr_queuecommand()
6368 ipr_cmd->done = ipr_scsi_eh_done; in ipr_queuecommand()
6402 rc = ipr_build_ioadl64(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6404 rc = ipr_build_ioadl(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6408 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6416 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6427 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_pending_q); in ipr_queuecommand()
6428 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_queuecommand()
6429 ipr_send_command(ipr_cmd); in ipr_queuecommand()
6566 struct ipr_cmnd *ipr_cmd; in ipr_ata_post_internal() local
6579 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_ata_post_internal()
6580 if (ipr_cmd->qc == qc) { in ipr_ata_post_internal()
6626 static void ipr_sata_done(struct ipr_cmnd *ipr_cmd) in ipr_sata_done() argument
6628 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_sata_done()
6629 struct ata_queued_cmd *qc = ipr_cmd->qc; in ipr_sata_done()
6632 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_sata_done()
6634 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6635 if (ipr_cmd->ioa_cfg->sis64) in ipr_sata_done()
6636 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_sata_done()
6639 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_sata_done()
6641 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_sata_done()
6643 if (be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc_specific) & IPR_ATA_DEVICE_WAS_RESET) in ipr_sata_done()
6650 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_sata_done()
6651 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6661 static void ipr_build_ata_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl64() argument
6665 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl64()
6666 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ata_ioadl.ioadl64; in ipr_build_ata_ioadl64()
6671 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_build_ata_ioadl64()
6684 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl64()
6707 static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl() argument
6711 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl()
6712 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ata_ioadl()
6726 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
6731 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
6758 struct ipr_cmnd *ipr_cmd; in ipr_qc_defer() local
6777 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_qc_defer()
6778 if (ipr_cmd == NULL) { in ipr_qc_defer()
6783 qc->lldd_task = ipr_cmd; in ipr_qc_defer()
6801 struct ipr_cmnd *ipr_cmd; in ipr_qc_issue() local
6808 ipr_cmd = qc->lldd_task; in ipr_qc_issue()
6809 if (ipr_cmd == NULL) in ipr_qc_issue()
6813 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
6814 if (unlikely(!ipr_cmd->hrrq->allow_cmds || in ipr_qc_issue()
6815 ipr_cmd->hrrq->ioa_is_dead)) { in ipr_qc_issue()
6816 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_qc_issue()
6817 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
6821 ipr_init_ipr_cmnd(ipr_cmd, ipr_lock_and_done); in ipr_qc_issue()
6822 ioarcb = &ipr_cmd->ioarcb; in ipr_qc_issue()
6825 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_qc_issue()
6833 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_qc_issue()
6834 ipr_cmd->qc = qc; in ipr_qc_issue()
6835 ipr_cmd->done = ipr_sata_done; in ipr_qc_issue()
6836 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_qc_issue()
6840 ipr_cmd->dma_use_sg = qc->n_elem; in ipr_qc_issue()
6843 ipr_build_ata_ioadl64(ipr_cmd, qc); in ipr_qc_issue()
6845 ipr_build_ata_ioadl(ipr_cmd, qc); in ipr_qc_issue()
6850 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_qc_issue()
6873 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
6877 ipr_send_command(ipr_cmd); in ipr_qc_issue()
6878 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
6981 static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_bringdown_done() argument
6983 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_bringdown_done()
7003 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_bringdown_done()
7021 static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_reset_done() argument
7023 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_reset_done()
7059 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_reset_done()
7102 static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd) in ipr_set_supported_devs() argument
7104 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_set_supported_devs()
7106 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_set_supported_devs()
7107 struct ipr_resource_entry *res = ipr_cmd->u.res; in ipr_set_supported_devs()
7109 ipr_cmd->job_step = ipr_ioa_reset_done; in ipr_set_supported_devs()
7115 ipr_cmd->u.res = res; in ipr_set_supported_devs()
7127 ipr_init_ioadl(ipr_cmd, in ipr_set_supported_devs()
7133 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_set_supported_devs()
7137 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_set_supported_devs()
7303 static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_select() argument
7307 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_select()
7316 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_WRITE_LAST); in ipr_build_mode_select()
7329 static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page28() argument
7331 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page28()
7342 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page28()
7346 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_ioafp_mode_select_page28()
7347 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_ioafp_mode_select_page28()
7349 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page28()
7366 static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_sense() argument
7370 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_sense()
7378 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_build_mode_sense()
7390 static int ipr_reset_cmd_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_cmd_failed() argument
7392 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cmd_failed()
7393 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_cmd_failed()
7397 ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc); in ipr_reset_cmd_failed()
7400 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cmd_failed()
7414 static int ipr_reset_mode_sense_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_failed() argument
7416 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_mode_sense_failed()
7417 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_failed()
7420 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_reset_mode_sense_failed()
7421 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_reset_mode_sense_failed()
7426 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_failed()
7439 static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page28() argument
7441 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page28()
7444 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page28()
7449 ipr_cmd->job_step = ipr_ioafp_mode_select_page28; in ipr_ioafp_mode_sense_page28()
7450 ipr_cmd->job_step_failed = ipr_reset_mode_sense_failed; in ipr_ioafp_mode_sense_page28()
7452 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page28()
7467 static int ipr_ioafp_mode_select_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page24() argument
7469 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page24()
7484 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page24()
7488 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_ioafp_mode_select_page24()
7489 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page24()
7505 static int ipr_reset_mode_sense_page24_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_page24_failed() argument
7507 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_page24_failed()
7510 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_reset_mode_sense_page24_failed()
7514 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_page24_failed()
7527 static int ipr_ioafp_mode_sense_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page24() argument
7529 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page24()
7532 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page24()
7537 ipr_cmd->job_step = ipr_ioafp_mode_select_page24; in ipr_ioafp_mode_sense_page24()
7538 ipr_cmd->job_step_failed = ipr_reset_mode_sense_page24_failed; in ipr_ioafp_mode_sense_page24()
7540 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page24()
7558 static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd) in ipr_init_res_table() argument
7560 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_init_res_table()
7631 ipr_cmd->job_step = ipr_ioafp_mode_sense_page24; in ipr_init_res_table()
7633 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_init_res_table()
7649 static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_query_ioa_cfg() argument
7651 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_query_ioa_cfg()
7652 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_query_ioa_cfg()
7670 ipr_init_ioadl(ipr_cmd, ioa_cfg->cfg_table_dma, ioa_cfg->cfg_table_size, in ipr_ioafp_query_ioa_cfg()
7673 ipr_cmd->job_step = ipr_init_res_table; in ipr_ioafp_query_ioa_cfg()
7675 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_query_ioa_cfg()
7681 static int ipr_ioa_service_action_failed(struct ipr_cmnd *ipr_cmd) in ipr_ioa_service_action_failed() argument
7683 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_ioa_service_action_failed()
7688 return ipr_reset_cmd_failed(ipr_cmd); in ipr_ioa_service_action_failed()
7691 static void ipr_build_ioa_service_action(struct ipr_cmnd *ipr_cmd, in ipr_build_ioa_service_action() argument
7694 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioa_service_action()
7709 static int ipr_ioafp_set_caching_parameters(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_set_caching_parameters() argument
7711 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_set_caching_parameters()
7712 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_set_caching_parameters()
7717 ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg; in ipr_ioafp_set_caching_parameters()
7720 ipr_build_ioa_service_action(ipr_cmd, in ipr_ioafp_set_caching_parameters()
7726 ipr_cmd->job_step_failed = ipr_ioa_service_action_failed; in ipr_ioafp_set_caching_parameters()
7727 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_set_caching_parameters()
7747 static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page, in ipr_ioafp_inquiry() argument
7750 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_inquiry()
7761 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_ioafp_inquiry()
7763 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_inquiry()
7798 static int ipr_ioafp_pageC4_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_pageC4_inquiry() argument
7800 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_pageC4_inquiry()
7805 ipr_cmd->job_step = ipr_ioafp_set_caching_parameters; in ipr_ioafp_pageC4_inquiry()
7809 ipr_ioafp_inquiry(ipr_cmd, 1, 0xC4, in ipr_ioafp_pageC4_inquiry()
7831 static int ipr_ioafp_cap_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_cap_inquiry() argument
7833 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_cap_inquiry()
7838 ipr_cmd->job_step = ipr_ioafp_pageC4_inquiry; in ipr_ioafp_cap_inquiry()
7842 ipr_ioafp_inquiry(ipr_cmd, 1, 0xD0, in ipr_ioafp_cap_inquiry()
7862 static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page3_inquiry() argument
7864 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page3_inquiry()
7868 ipr_cmd->job_step = ipr_ioafp_cap_inquiry; in ipr_ioafp_page3_inquiry()
7870 ipr_ioafp_inquiry(ipr_cmd, 1, 3, in ipr_ioafp_page3_inquiry()
7888 static int ipr_ioafp_page0_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page0_inquiry() argument
7890 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page0_inquiry()
7907 list_add_tail(&ipr_cmd->queue, in ipr_ioafp_page0_inquiry()
7913 ipr_cmd->job_step = ipr_ioafp_page3_inquiry; in ipr_ioafp_page0_inquiry()
7915 ipr_ioafp_inquiry(ipr_cmd, 1, 0, in ipr_ioafp_page0_inquiry()
7932 static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_std_inquiry() argument
7934 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_std_inquiry()
7937 ipr_cmd->job_step = ipr_ioafp_page0_inquiry; in ipr_ioafp_std_inquiry()
7939 ipr_ioafp_inquiry(ipr_cmd, 0, 0, in ipr_ioafp_std_inquiry()
7957 static int ipr_ioafp_identify_hrrq(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_identify_hrrq() argument
7959 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_identify_hrrq()
7960 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_identify_hrrq()
7964 ipr_cmd->job_step = ipr_ioafp_std_inquiry; in ipr_ioafp_identify_hrrq()
8014 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_identify_hrrq()
8018 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_ioafp_identify_hrrq()
8041 static void ipr_reset_timer_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_timer_done() argument
8043 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_timer_done()
8048 if (ioa_cfg->reset_cmd == ipr_cmd) { in ipr_reset_timer_done()
8049 list_del(&ipr_cmd->queue); in ipr_reset_timer_done()
8050 ipr_cmd->done(ipr_cmd); in ipr_reset_timer_done()
8070 static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd, in ipr_reset_start_timer() argument
8075 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_start_timer()
8076 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_start_timer()
8078 ipr_cmd->timer.data = (unsigned long) ipr_cmd; in ipr_reset_start_timer()
8079 ipr_cmd->timer.expires = jiffies + timeout; in ipr_reset_start_timer()
8080 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_reset_timer_done; in ipr_reset_start_timer()
8081 add_timer(&ipr_cmd->timer); in ipr_reset_start_timer()
8125 static int ipr_reset_next_stage(struct ipr_cmnd *ipr_cmd) in ipr_reset_next_stage() argument
8130 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_next_stage()
8151 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8155 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8164 ipr_cmd->timer.data = (unsigned long) ipr_cmd; in ipr_reset_next_stage()
8165 ipr_cmd->timer.expires = jiffies + stage_time * HZ; in ipr_reset_next_stage()
8166 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; in ipr_reset_next_stage()
8167 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_next_stage()
8168 add_timer(&ipr_cmd->timer); in ipr_reset_next_stage()
8170 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_next_stage()
8185 static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_enable_ioa() argument
8187 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_enable_ioa()
8193 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_enable_ioa()
8232 ipr_cmd->job_step = ipr_reset_next_stage; in ipr_reset_enable_ioa()
8236 ipr_cmd->timer.data = (unsigned long) ipr_cmd; in ipr_reset_enable_ioa()
8237 ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ); in ipr_reset_enable_ioa()
8238 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; in ipr_reset_enable_ioa()
8239 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_enable_ioa()
8240 add_timer(&ipr_cmd->timer); in ipr_reset_enable_ioa()
8241 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_enable_ioa()
8257 static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_for_dump() argument
8259 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_for_dump()
8267 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_wait_for_dump()
8363 static int ipr_reset_get_unit_check_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_get_unit_check_job() argument
8365 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_get_unit_check_job()
8370 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_get_unit_check_job()
8371 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_get_unit_check_job()
8377 static int ipr_dump_mailbox_wait(struct ipr_cmnd *ipr_cmd) in ipr_dump_mailbox_wait() argument
8379 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_dump_mailbox_wait()
8386 if (!ioa_cfg->sis64 || !ipr_cmd->u.time_left || in ipr_dump_mailbox_wait()
8390 if (!ipr_cmd->u.time_left) in ipr_dump_mailbox_wait()
8397 ipr_reset_start_timer(ipr_cmd, IPR_SIS64_DUMP_TIMEOUT); in ipr_dump_mailbox_wait()
8399 ipr_reset_start_timer(ipr_cmd, IPR_SIS32_DUMP_TIMEOUT); in ipr_dump_mailbox_wait()
8400 ipr_cmd->job_step = ipr_reset_wait_for_dump; in ipr_dump_mailbox_wait()
8404 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_dump_mailbox_wait()
8405 ipr_reset_start_timer(ipr_cmd, in ipr_dump_mailbox_wait()
8424 static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd) in ipr_reset_restore_cfg_space() argument
8426 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_restore_cfg_space()
8434 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_restore_cfg_space()
8448 ipr_cmd->job_step = ipr_reset_get_unit_check_job; in ipr_reset_restore_cfg_space()
8449 ipr_reset_start_timer(ipr_cmd, IPR_DUMP_DELAY_TIMEOUT); in ipr_reset_restore_cfg_space()
8454 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_restore_cfg_space()
8455 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_restore_cfg_space()
8461 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_restore_cfg_space()
8463 ipr_cmd->job_step = ipr_dump_mailbox_wait; in ipr_reset_restore_cfg_space()
8464 ipr_cmd->u.time_left = IPR_WAIT_FOR_MAILBOX; in ipr_reset_restore_cfg_space()
8466 ipr_cmd->job_step = ipr_reset_enable_ioa; in ipr_reset_restore_cfg_space()
8482 static int ipr_reset_bist_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_bist_done() argument
8484 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_bist_done()
8490 ipr_cmd->job_step = ipr_reset_restore_cfg_space; in ipr_reset_bist_done()
8504 static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_start_bist() argument
8506 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_start_bist()
8517 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_start_bist()
8518 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_start_bist()
8522 pci_cfg_access_unlock(ipr_cmd->ioa_cfg->pdev); in ipr_reset_start_bist()
8524 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_start_bist()
8541 static int ipr_reset_slot_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset_done() argument
8544 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_slot_reset_done()
8545 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_slot_reset_done()
8559 struct ipr_cmnd *ipr_cmd = container_of(work, struct ipr_cmnd, work); in ipr_reset_reset_work() local
8560 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_reset_work()
8570 if (ioa_cfg->reset_cmd == ipr_cmd) in ipr_reset_reset_work()
8571 ipr_reset_ioa_job(ipr_cmd); in ipr_reset_reset_work()
8585 static int ipr_reset_slot_reset(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset() argument
8587 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_slot_reset()
8590 INIT_WORK(&ipr_cmd->work, ipr_reset_reset_work); in ipr_reset_slot_reset()
8591 queue_work(ioa_cfg->reset_work_q, &ipr_cmd->work); in ipr_reset_slot_reset()
8592 ipr_cmd->job_step = ipr_reset_slot_reset_done; in ipr_reset_slot_reset()
8606 static int ipr_reset_block_config_access_wait(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access_wait() argument
8608 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_block_config_access_wait()
8613 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8615 if (ipr_cmd->u.time_left) { in ipr_reset_block_config_access_wait()
8617 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access_wait()
8618 ipr_reset_start_timer(ipr_cmd, in ipr_reset_block_config_access_wait()
8621 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8639 static int ipr_reset_block_config_access(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access() argument
8641 ipr_cmd->ioa_cfg->cfg_locked = 0; in ipr_reset_block_config_access()
8642 ipr_cmd->job_step = ipr_reset_block_config_access_wait; in ipr_reset_block_config_access()
8643 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access()
8677 static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_to_start_bist() argument
8679 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_to_start_bist()
8682 if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) { in ipr_reset_wait_to_start_bist()
8683 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_wait_to_start_bist()
8684 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_wait_to_start_bist()
8686 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_wait_to_start_bist()
8705 static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd) in ipr_reset_alert() argument
8707 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_alert()
8717 ipr_cmd->job_step = ipr_reset_wait_to_start_bist; in ipr_reset_alert()
8719 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_alert()
8722 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_alert()
8723 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_alert()
8738 static int ipr_reset_quiesce_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_quiesce_done() argument
8740 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_quiesce_done()
8743 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_quiesce_done()
8759 static int ipr_reset_cancel_hcam_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam_done() argument
8761 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam_done()
8768 ipr_cmd->job_step = ipr_reset_quiesce_done; in ipr_reset_cancel_hcam_done()
8775 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cancel_hcam_done()
8798 static int ipr_reset_cancel_hcam(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam() argument
8800 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam()
8807 ipr_cmd->job_step = ipr_reset_cancel_hcam_done; in ipr_reset_cancel_hcam()
8815 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_cancel_hcam()
8816 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_cancel_hcam()
8817 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_reset_cancel_hcam()
8830 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_cancel_hcam()
8834 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_cancel_hcam()
8839 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_cancel_hcam()
8854 static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download_done() argument
8856 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download_done()
8862 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download_done()
8876 static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download() argument
8878 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download()
8882 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download()
8887 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_ucode_download()
8888 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; in ipr_reset_ucode_download()
8889 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER; in ipr_reset_ucode_download()
8890 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE; in ipr_reset_ucode_download()
8891 ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16; in ipr_reset_ucode_download()
8892 ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8; in ipr_reset_ucode_download()
8893 ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff; in ipr_reset_ucode_download()
8896 ipr_build_ucode_ioadl64(ipr_cmd, sglist); in ipr_reset_ucode_download()
8898 ipr_build_ucode_ioadl(ipr_cmd, sglist); in ipr_reset_ucode_download()
8899 ipr_cmd->job_step = ipr_reset_ucode_download_done; in ipr_reset_ucode_download()
8901 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_ucode_download()
8919 static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_shutdown_ioa() argument
8921 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_shutdown_ioa()
8922 enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type; in ipr_reset_shutdown_ioa()
8928 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_shutdown_ioa()
8931 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_shutdown_ioa()
8932 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_shutdown_ioa()
8933 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_reset_shutdown_ioa()
8934 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type; in ipr_reset_shutdown_ioa()
8945 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout); in ipr_reset_shutdown_ioa()
8948 ipr_cmd->job_step = ipr_reset_ucode_download; in ipr_reset_shutdown_ioa()
8950 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_shutdown_ioa()
8965 static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_ioa_job() argument
8968 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ioa_job()
8971 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_ioa_job()
8973 if (ioa_cfg->reset_cmd != ipr_cmd) { in ipr_reset_ioa_job()
8978 list_add_tail(&ipr_cmd->queue, in ipr_reset_ioa_job()
8979 &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_ioa_job()
8984 rc = ipr_cmd->job_step_failed(ipr_cmd); in ipr_reset_ioa_job()
8989 ipr_reinit_ipr_cmnd(ipr_cmd); in ipr_reset_ioa_job()
8990 ipr_cmd->job_step_failed = ipr_reset_cmd_failed; in ipr_reset_ioa_job()
8991 rc = ipr_cmd->job_step(ipr_cmd); in ipr_reset_ioa_job()
9013 struct ipr_cmnd *ipr_cmd; in _ipr_initiate_ioa_reset() local
9026 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in _ipr_initiate_ioa_reset()
9027 ioa_cfg->reset_cmd = ipr_cmd; in _ipr_initiate_ioa_reset()
9028 ipr_cmd->job_step = job_step; in _ipr_initiate_ioa_reset()
9029 ipr_cmd->u.shutdown_type = shutdown_type; in _ipr_initiate_ioa_reset()
9031 ipr_reset_ioa_job(ipr_cmd); in _ipr_initiate_ioa_reset()
9103 static int ipr_reset_freeze(struct ipr_cmnd *ipr_cmd) in ipr_reset_freeze() argument
9105 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_freeze()
9115 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_freeze()
9116 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_freeze()
9409 struct ipr_cmnd *ipr_cmd; in ipr_alloc_cmd_blks() local
9464 ipr_cmd = dma_pool_alloc(ioa_cfg->ipr_cmd_pool, GFP_KERNEL, &dma_addr); in ipr_alloc_cmd_blks()
9466 if (!ipr_cmd) { in ipr_alloc_cmd_blks()
9471 memset(ipr_cmd, 0, sizeof(*ipr_cmd)); in ipr_alloc_cmd_blks()
9472 ioa_cfg->ipr_cmnd_list[i] = ipr_cmd; in ipr_alloc_cmd_blks()
9475 ioarcb = &ipr_cmd->ioarcb; in ipr_alloc_cmd_blks()
9476 ipr_cmd->dma_addr = dma_addr; in ipr_alloc_cmd_blks()
9496 ipr_cmd->cmd_index = i; in ipr_alloc_cmd_blks()
9497 ipr_cmd->ioa_cfg = ioa_cfg; in ipr_alloc_cmd_blks()
9498 ipr_cmd->sense_buffer_dma = dma_addr + in ipr_alloc_cmd_blks()
9501 ipr_cmd->ioarcb.cmd_pkt.hrrq_id = hrrq_id; in ipr_alloc_cmd_blks()
9502 ipr_cmd->hrrq = &ioa_cfg->hrrq[hrrq_id]; in ipr_alloc_cmd_blks()
9503 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_alloc_cmd_blks()
10595 static void ipr_halt_done(struct ipr_cmnd *ipr_cmd) in ipr_halt_done() argument
10597 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_halt_done()
10608 struct ipr_cmnd *ipr_cmd; in ipr_halt() local
10625 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_halt()
10626 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_halt()
10627 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_halt()
10628 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_halt()
10629 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_SHUTDOWN_PREPARE_FOR_NORMAL; in ipr_halt()
10631 ipr_do_req(ipr_cmd, ipr_halt_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_halt()