Lines Matching refs:ipr_cmd
586 static void ipr_trc_hook(struct ipr_cmnd *ipr_cmd, in ipr_trc_hook() argument
590 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_trc_hook()
596 trace_entry->op_code = ipr_cmd->ioarcb.cmd_pkt.cdb[0]; in ipr_trc_hook()
598 if (ipr_cmd->ioa_cfg->sis64) in ipr_trc_hook()
599 trace_entry->ata_op_code = ipr_cmd->i.ata_ioadl.regs.command; in ipr_trc_hook()
601 trace_entry->ata_op_code = ipr_cmd->ioarcb.u.add_data.u.regs.command; in ipr_trc_hook()
602 trace_entry->cmd_index = ipr_cmd->cmd_index & 0xff; in ipr_trc_hook()
603 trace_entry->res_handle = ipr_cmd->ioarcb.res_handle; in ipr_trc_hook()
608 #define ipr_trc_hook(ipr_cmd, type, add_data) do { } while (0) argument
618 static void ipr_lock_and_done(struct ipr_cmnd *ipr_cmd) in ipr_lock_and_done() argument
621 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_lock_and_done()
624 ipr_cmd->done(ipr_cmd); in ipr_lock_and_done()
635 static void ipr_reinit_ipr_cmnd(struct ipr_cmnd *ipr_cmd) in ipr_reinit_ipr_cmnd() argument
637 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_reinit_ipr_cmnd()
638 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_reinit_ipr_cmnd()
639 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64; in ipr_reinit_ipr_cmnd()
640 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_reinit_ipr_cmnd()
651 if (ipr_cmd->ioa_cfg->sis64) { in ipr_reinit_ipr_cmnd()
664 ipr_cmd->scsi_cmd = NULL; in ipr_reinit_ipr_cmnd()
665 ipr_cmd->qc = NULL; in ipr_reinit_ipr_cmnd()
666 ipr_cmd->sense_buffer[0] = 0; in ipr_reinit_ipr_cmnd()
667 ipr_cmd->dma_use_sg = 0; in ipr_reinit_ipr_cmnd()
678 static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd, in ipr_init_ipr_cmnd() argument
681 ipr_reinit_ipr_cmnd(ipr_cmd); in ipr_init_ipr_cmnd()
682 ipr_cmd->u.scratch = 0; in ipr_init_ipr_cmnd()
683 ipr_cmd->sibling = NULL; in ipr_init_ipr_cmnd()
684 ipr_cmd->eh_comp = NULL; in ipr_init_ipr_cmnd()
685 ipr_cmd->fast_done = fast_done; in ipr_init_ipr_cmnd()
686 timer_setup(&ipr_cmd->timer, NULL, 0); in ipr_init_ipr_cmnd()
699 struct ipr_cmnd *ipr_cmd = NULL; in __ipr_get_free_ipr_cmnd() local
702 ipr_cmd = list_entry(hrrq->hrrq_free_q.next, in __ipr_get_free_ipr_cmnd()
704 list_del(&ipr_cmd->queue); in __ipr_get_free_ipr_cmnd()
708 return ipr_cmd; in __ipr_get_free_ipr_cmnd()
721 struct ipr_cmnd *ipr_cmd = in ipr_get_free_ipr_cmnd() local
723 ipr_init_ipr_cmnd(ipr_cmd, ipr_lock_and_done); in ipr_get_free_ipr_cmnd()
724 return ipr_cmd; in ipr_get_free_ipr_cmnd()
819 static void __ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd) in __ipr_sata_eh_done() argument
821 struct ata_queued_cmd *qc = ipr_cmd->qc; in __ipr_sata_eh_done()
827 if (ipr_cmd->eh_comp) in __ipr_sata_eh_done()
828 complete(ipr_cmd->eh_comp); in __ipr_sata_eh_done()
829 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in __ipr_sata_eh_done()
842 static void ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd) in ipr_sata_eh_done() argument
844 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_sata_eh_done()
848 __ipr_sata_eh_done(ipr_cmd); in ipr_sata_eh_done()
862 static void __ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd) in __ipr_scsi_eh_done() argument
864 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in __ipr_scsi_eh_done()
868 scsi_dma_unmap(ipr_cmd->scsi_cmd); in __ipr_scsi_eh_done()
870 if (ipr_cmd->eh_comp) in __ipr_scsi_eh_done()
871 complete(ipr_cmd->eh_comp); in __ipr_scsi_eh_done()
872 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in __ipr_scsi_eh_done()
885 static void ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd) in ipr_scsi_eh_done() argument
888 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_scsi_eh_done()
891 __ipr_scsi_eh_done(ipr_cmd); in ipr_scsi_eh_done()
906 struct ipr_cmnd *ipr_cmd, *temp; in ipr_fail_all_ops() local
912 list_for_each_entry_safe(ipr_cmd, in ipr_fail_all_ops()
914 list_del(&ipr_cmd->queue); in ipr_fail_all_ops()
916 ipr_cmd->s.ioasa.hdr.ioasc = in ipr_fail_all_ops()
918 ipr_cmd->s.ioasa.hdr.ilid = in ipr_fail_all_ops()
921 if (ipr_cmd->scsi_cmd) in ipr_fail_all_ops()
922 ipr_cmd->done = __ipr_scsi_eh_done; in ipr_fail_all_ops()
923 else if (ipr_cmd->qc) in ipr_fail_all_ops()
924 ipr_cmd->done = __ipr_sata_eh_done; in ipr_fail_all_ops()
926 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, in ipr_fail_all_ops()
928 del_timer(&ipr_cmd->timer); in ipr_fail_all_ops()
929 ipr_cmd->done(ipr_cmd); in ipr_fail_all_ops()
947 static void ipr_send_command(struct ipr_cmnd *ipr_cmd) in ipr_send_command() argument
949 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_send_command()
950 dma_addr_t send_dma_addr = ipr_cmd->dma_addr; in ipr_send_command()
958 if (ipr_cmd->dma_use_sg * sizeof(struct ipr_ioadl64_desc) > 128 ) in ipr_send_command()
978 static void ipr_do_req(struct ipr_cmnd *ipr_cmd, in ipr_do_req() argument
982 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_do_req()
984 ipr_cmd->done = done; in ipr_do_req()
986 ipr_cmd->timer.expires = jiffies + timeout; in ipr_do_req()
987 ipr_cmd->timer.function = timeout_func; in ipr_do_req()
989 add_timer(&ipr_cmd->timer); in ipr_do_req()
991 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, 0); in ipr_do_req()
993 ipr_send_command(ipr_cmd); in ipr_do_req()
1006 static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd) in ipr_internal_cmd_done() argument
1008 if (ipr_cmd->sibling) in ipr_internal_cmd_done()
1009 ipr_cmd->sibling = NULL; in ipr_internal_cmd_done()
1011 complete(&ipr_cmd->completion); in ipr_internal_cmd_done()
1027 static void ipr_init_ioadl(struct ipr_cmnd *ipr_cmd, dma_addr_t dma_addr, in ipr_init_ioadl() argument
1030 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_init_ioadl()
1031 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_init_ioadl()
1033 ipr_cmd->dma_use_sg = 1; in ipr_init_ioadl()
1035 if (ipr_cmd->ioa_cfg->sis64) { in ipr_init_ioadl()
1040 ipr_cmd->ioarcb.ioadl_len = in ipr_init_ioadl()
1042 ipr_cmd->ioarcb.data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1048 ipr_cmd->ioarcb.read_ioadl_len = in ipr_init_ioadl()
1050 ipr_cmd->ioarcb.read_data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1052 ipr_cmd->ioarcb.ioadl_len = in ipr_init_ioadl()
1054 ipr_cmd->ioarcb.data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1068 static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd, in ipr_send_blocking_cmd() argument
1072 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_send_blocking_cmd()
1074 init_completion(&ipr_cmd->completion); in ipr_send_blocking_cmd()
1075 ipr_do_req(ipr_cmd, ipr_internal_cmd_done, timeout_func, timeout); in ipr_send_blocking_cmd()
1078 wait_for_completion(&ipr_cmd->completion); in ipr_send_blocking_cmd()
1111 struct ipr_cmnd *ipr_cmd; in ipr_send_hcam() local
1115 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_send_hcam()
1116 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_send_hcam()
1119 ipr_cmd->u.hostrcb = hostrcb; in ipr_send_hcam()
1120 ioarcb = &ipr_cmd->ioarcb; in ipr_send_hcam()
1129 ipr_init_ioadl(ipr_cmd, hostrcb->hostrcb_dma, in ipr_send_hcam()
1133 ipr_cmd->done = ipr_process_ccn; in ipr_send_hcam()
1135 ipr_cmd->done = ipr_process_error; in ipr_send_hcam()
1137 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_IOA_RES_ADDR); in ipr_send_hcam()
1139 ipr_send_command(ipr_cmd); in ipr_send_hcam()
1497 static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd) in ipr_process_ccn() argument
1499 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_process_ccn()
1500 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; in ipr_process_ccn()
1501 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_ccn()
1504 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_process_ccn()
2635 static void ipr_process_error(struct ipr_cmnd *ipr_cmd) in ipr_process_error() argument
2637 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_process_error()
2638 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; in ipr_process_error()
2639 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_error()
2648 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_process_error()
2679 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_timeout() local
2681 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_timeout()
2693 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) in ipr_timeout()
2712 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_oper_timeout() local
2714 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_oper_timeout()
2726 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) { in ipr_oper_timeout()
3960 static void ipr_build_ucode_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ucode_ioadl64() argument
3963 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ucode_ioadl64()
3964 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ucode_ioadl64()
3969 ipr_cmd->dma_use_sg = sglist->num_dma_sg; in ipr_build_ucode_ioadl64()
3974 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ucode_ioadl64()
3975 for_each_sg(scatterlist, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ucode_ioadl64()
3992 static void ipr_build_ucode_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ucode_ioadl() argument
3995 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ucode_ioadl()
3996 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ucode_ioadl()
4001 ipr_cmd->dma_use_sg = sglist->num_dma_sg; in ipr_build_ucode_ioadl()
4006 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ucode_ioadl()
4008 for_each_sg(scatterlist, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ucode_ioadl()
5068 static int ipr_match_lun(struct ipr_cmnd *ipr_cmd, void *device) in ipr_match_lun() argument
5070 if (ipr_cmd->scsi_cmd && ipr_cmd->scsi_cmd->device == device) in ipr_match_lun()
5082 static bool ipr_cmnd_is_free(struct ipr_cmnd *ipr_cmd) in ipr_cmnd_is_free() argument
5086 list_for_each_entry(loop_cmd, &ipr_cmd->hrrq->hrrq_free_q, queue) { in ipr_cmnd_is_free()
5087 if (loop_cmd == ipr_cmd) in ipr_cmnd_is_free()
5102 static int ipr_match_res(struct ipr_cmnd *ipr_cmd, void *resource) in ipr_match_res() argument
5106 if (res && ipr_cmd->ioarcb.res_handle == res->res_handle) in ipr_match_res()
5123 struct ipr_cmnd *ipr_cmd; in ipr_wait_for_ops() local
5137 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in ipr_wait_for_ops()
5138 if (!ipr_cmnd_is_free(ipr_cmd)) { in ipr_wait_for_ops()
5139 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
5140 ipr_cmd->eh_comp = ∁ in ipr_wait_for_ops()
5157 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in ipr_wait_for_ops()
5158 if (!ipr_cmnd_is_free(ipr_cmd)) { in ipr_wait_for_ops()
5159 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
5160 ipr_cmd->eh_comp = NULL; in ipr_wait_for_ops()
5232 struct ipr_cmnd *ipr_cmd; in ipr_device_reset() local
5239 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_device_reset()
5240 ioarcb = &ipr_cmd->ioarcb; in ipr_device_reset()
5243 if (ipr_cmd->ioa_cfg->sis64) { in ipr_device_reset()
5244 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_device_reset()
5258 ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_device_reset()
5259 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_device_reset()
5260 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_device_reset()
5262 if (ipr_cmd->ioa_cfg->sis64) in ipr_device_reset()
5263 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_device_reset()
5266 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_device_reset()
5336 struct ipr_cmnd *ipr_cmd; in __ipr_eh_dev_reset() local
5360 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in __ipr_eh_dev_reset()
5362 if (ipr_cmd->ioarcb.res_handle == res->res_handle) { in __ipr_eh_dev_reset()
5363 if (!ipr_cmd->qc) in __ipr_eh_dev_reset()
5365 if (ipr_cmnd_is_free(ipr_cmd)) in __ipr_eh_dev_reset()
5368 ipr_cmd->done = ipr_sata_eh_done; in __ipr_eh_dev_reset()
5369 if (!(ipr_cmd->qc->flags & ATA_QCFLAG_FAILED)) { in __ipr_eh_dev_reset()
5370 ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT; in __ipr_eh_dev_reset()
5371 ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED; in __ipr_eh_dev_reset()
5429 static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_bus_reset_done() argument
5431 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_bus_reset_done()
5437 if (res->res_handle == ipr_cmd->ioarcb.res_handle) { in ipr_bus_reset_done()
5447 if (ipr_cmd->sibling->sibling) in ipr_bus_reset_done()
5448 ipr_cmd->sibling->sibling = NULL; in ipr_bus_reset_done()
5450 ipr_cmd->sibling->done(ipr_cmd->sibling); in ipr_bus_reset_done()
5452 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_bus_reset_done()
5469 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_abort_timeout() local
5471 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_abort_timeout()
5477 if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) { in ipr_abort_timeout()
5482 sdev_printk(KERN_ERR, ipr_cmd->u.sdev, "Abort timed out. Resetting bus.\n"); in ipr_abort_timeout()
5484 ipr_cmd->sibling = reset_cmd; in ipr_abort_timeout()
5485 reset_cmd->sibling = ipr_cmd; in ipr_abort_timeout()
5486 reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle; in ipr_abort_timeout()
5508 struct ipr_cmnd *ipr_cmd; in ipr_cancel_op() local
5556 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_cancel_op()
5557 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_cancel_op()
5558 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_cancel_op()
5561 ipr_cmd->u.sdev = scsi_cmd->device; in ipr_cancel_op()
5565 ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_CANCEL_ALL_TIMEOUT); in ipr_cancel_op()
5566 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_cancel_op()
5577 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_cancel_op()
5736 struct ipr_cmnd *ipr_cmd; in ipr_process_hrrq() local
5759 ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index]; in ipr_process_hrrq()
5760 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_hrrq()
5762 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc); in ipr_process_hrrq()
5764 list_move_tail(&ipr_cmd->queue, doneq); in ipr_process_hrrq()
5783 struct ipr_cmnd *ipr_cmd, *temp; in ipr_iopoll() local
5797 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_iopoll()
5798 list_del(&ipr_cmd->queue); in ipr_iopoll()
5799 del_timer(&ipr_cmd->timer); in ipr_iopoll()
5800 ipr_cmd->fast_done(ipr_cmd); in ipr_iopoll()
5822 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr() local
5866 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr()
5867 list_del(&ipr_cmd->queue); in ipr_isr()
5868 del_timer(&ipr_cmd->timer); in ipr_isr()
5869 ipr_cmd->fast_done(ipr_cmd); in ipr_isr()
5887 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr_mhrrq() local
5916 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr_mhrrq()
5917 list_del(&ipr_cmd->queue); in ipr_isr_mhrrq()
5918 del_timer(&ipr_cmd->timer); in ipr_isr_mhrrq()
5919 ipr_cmd->fast_done(ipr_cmd); in ipr_isr_mhrrq()
5933 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl64() argument
5939 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl64()
5940 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl64()
5941 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ioadl64()
5954 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl64()
5958 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl64()
5966 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl64()
5985 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl() argument
5991 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl()
5992 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl()
5993 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ioadl()
6005 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl()
6012 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
6017 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
6020 if (ipr_cmd->dma_use_sg <= ARRAY_SIZE(ioarcb->u.add_data.u.ioadl)) { in ipr_build_ioadl()
6022 ioarcb->write_ioadl_addr = cpu_to_be32((ipr_cmd->dma_addr) + in ipr_build_ioadl()
6027 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl()
6047 static void __ipr_erp_done(struct ipr_cmnd *ipr_cmd) in __ipr_erp_done() argument
6049 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in __ipr_erp_done()
6051 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in __ipr_erp_done()
6058 memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer, in __ipr_erp_done()
6067 scsi_dma_unmap(ipr_cmd->scsi_cmd); in __ipr_erp_done()
6069 if (ipr_cmd->eh_comp) in __ipr_erp_done()
6070 complete(ipr_cmd->eh_comp); in __ipr_erp_done()
6071 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in __ipr_erp_done()
6084 static void ipr_erp_done(struct ipr_cmnd *ipr_cmd) in ipr_erp_done() argument
6086 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_erp_done()
6090 __ipr_erp_done(ipr_cmd); in ipr_erp_done()
6101 static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) in ipr_reinit_ipr_cmnd_for_erp() argument
6103 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_reinit_ipr_cmnd_for_erp()
6104 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_reinit_ipr_cmnd_for_erp()
6105 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_reinit_ipr_cmnd_for_erp()
6115 if (ipr_cmd->ioa_cfg->sis64) in ipr_reinit_ipr_cmnd_for_erp()
6135 static void __ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) in __ipr_erp_request_sense() argument
6137 struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in __ipr_erp_request_sense()
6138 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in __ipr_erp_request_sense()
6141 __ipr_erp_done(ipr_cmd); in __ipr_erp_request_sense()
6145 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in __ipr_erp_request_sense()
6154 ipr_init_ioadl(ipr_cmd, ipr_cmd->sense_buffer_dma, in __ipr_erp_request_sense()
6157 ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout, in __ipr_erp_request_sense()
6171 static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) in ipr_erp_request_sense() argument
6173 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_erp_request_sense()
6177 __ipr_erp_request_sense(ipr_cmd); in ipr_erp_request_sense()
6193 static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd) in ipr_erp_cancel_all() argument
6195 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_cancel_all()
6201 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in ipr_erp_cancel_all()
6204 __ipr_erp_request_sense(ipr_cmd); in ipr_erp_cancel_all()
6208 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_erp_cancel_all()
6212 ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout, in ipr_erp_cancel_all()
6230 struct ipr_cmnd *ipr_cmd, struct ipr_resource_entry *res) in ipr_dump_ioasa() argument
6235 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_dump_ioasa()
6291 static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd) in ipr_gen_sense() argument
6294 u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer; in ipr_gen_sense()
6295 struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata; in ipr_gen_sense()
6296 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_gen_sense()
6304 ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION; in ipr_gen_sense()
6384 static int ipr_get_autosense(struct ipr_cmnd *ipr_cmd) in ipr_get_autosense() argument
6386 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_get_autosense()
6387 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64; in ipr_get_autosense()
6392 if (ipr_cmd->ioa_cfg->sis64) in ipr_get_autosense()
6393 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa64->auto_sense.data, in ipr_get_autosense()
6397 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data, in ipr_get_autosense()
6415 struct ipr_cmnd *ipr_cmd) in ipr_erp_start() argument
6417 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_start()
6419 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_start()
6423 __ipr_scsi_eh_done(ipr_cmd); in ipr_erp_start()
6428 ipr_gen_sense(ipr_cmd); in ipr_erp_start()
6430 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_erp_start()
6477 if (!ipr_get_autosense(ipr_cmd)) { in ipr_erp_start()
6479 ipr_erp_cancel_all(ipr_cmd); in ipr_erp_start()
6504 scsi_dma_unmap(ipr_cmd->scsi_cmd); in ipr_erp_start()
6506 if (ipr_cmd->eh_comp) in ipr_erp_start()
6507 complete(ipr_cmd->eh_comp); in ipr_erp_start()
6508 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_erp_start()
6521 static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd) in ipr_scsi_done() argument
6523 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_scsi_done()
6524 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_scsi_done()
6525 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_scsi_done()
6528 scsi_set_resid(scsi_cmd, be32_to_cpu(ipr_cmd->s.ioasa.hdr.residual_data_len)); in ipr_scsi_done()
6533 spin_lock_irqsave(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6535 if (ipr_cmd->eh_comp) in ipr_scsi_done()
6536 complete(ipr_cmd->eh_comp); in ipr_scsi_done()
6537 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_scsi_done()
6538 spin_unlock_irqrestore(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6541 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6542 ipr_erp_start(ioa_cfg, ipr_cmd); in ipr_scsi_done()
6543 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6566 struct ipr_cmnd *ipr_cmd; in ipr_queuecommand() local
6607 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_queuecommand()
6608 if (ipr_cmd == NULL) { in ipr_queuecommand()
6614 ipr_init_ipr_cmnd(ipr_cmd, ipr_scsi_done); in ipr_queuecommand()
6615 ioarcb = &ipr_cmd->ioarcb; in ipr_queuecommand()
6618 ipr_cmd->scsi_cmd = scsi_cmd; in ipr_queuecommand()
6619 ipr_cmd->done = ipr_scsi_eh_done; in ipr_queuecommand()
6653 rc = ipr_build_ioadl64(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6655 rc = ipr_build_ioadl(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6659 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6667 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6678 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_pending_q); in ipr_queuecommand()
6679 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_queuecommand()
6680 ipr_send_command(ipr_cmd); in ipr_queuecommand()
6821 struct ipr_cmnd *ipr_cmd; in ipr_ata_post_internal() local
6834 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_ata_post_internal()
6835 if (ipr_cmd->qc == qc) { in ipr_ata_post_internal()
6881 static void ipr_sata_done(struct ipr_cmnd *ipr_cmd) in ipr_sata_done() argument
6883 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_sata_done()
6884 struct ata_queued_cmd *qc = ipr_cmd->qc; in ipr_sata_done()
6887 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_sata_done()
6889 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6890 if (ipr_cmd->ioa_cfg->sis64) in ipr_sata_done()
6891 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_sata_done()
6894 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_sata_done()
6896 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_sata_done()
6898 if (be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc_specific) & IPR_ATA_DEVICE_WAS_RESET) in ipr_sata_done()
6905 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_sata_done()
6906 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6916 static void ipr_build_ata_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl64() argument
6920 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl64()
6921 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ata_ioadl.ioadl64; in ipr_build_ata_ioadl64()
6926 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_build_ata_ioadl64()
6939 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl64()
6962 static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl() argument
6966 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl()
6967 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ata_ioadl()
6981 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
6986 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
7013 struct ipr_cmnd *ipr_cmd; in ipr_qc_defer() local
7032 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_qc_defer()
7033 if (ipr_cmd == NULL) { in ipr_qc_defer()
7038 qc->lldd_task = ipr_cmd; in ipr_qc_defer()
7056 struct ipr_cmnd *ipr_cmd; in ipr_qc_issue() local
7063 ipr_cmd = qc->lldd_task; in ipr_qc_issue()
7064 if (ipr_cmd == NULL) in ipr_qc_issue()
7068 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7069 if (unlikely(!ipr_cmd->hrrq->allow_cmds || in ipr_qc_issue()
7070 ipr_cmd->hrrq->ioa_is_dead)) { in ipr_qc_issue()
7071 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_qc_issue()
7072 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7076 ipr_init_ipr_cmnd(ipr_cmd, ipr_lock_and_done); in ipr_qc_issue()
7077 ioarcb = &ipr_cmd->ioarcb; in ipr_qc_issue()
7080 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_qc_issue()
7088 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_qc_issue()
7089 ipr_cmd->qc = qc; in ipr_qc_issue()
7090 ipr_cmd->done = ipr_sata_done; in ipr_qc_issue()
7091 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_qc_issue()
7095 ipr_cmd->dma_use_sg = qc->n_elem; in ipr_qc_issue()
7098 ipr_build_ata_ioadl64(ipr_cmd, qc); in ipr_qc_issue()
7100 ipr_build_ata_ioadl(ipr_cmd, qc); in ipr_qc_issue()
7105 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_qc_issue()
7128 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7132 ipr_send_command(ipr_cmd); in ipr_qc_issue()
7133 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7236 static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_bringdown_done() argument
7238 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_bringdown_done()
7257 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_bringdown_done()
7275 static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_reset_done() argument
7277 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_reset_done()
7316 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_reset_done()
7353 static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd) in ipr_set_supported_devs() argument
7355 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_set_supported_devs()
7357 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_set_supported_devs()
7358 struct ipr_resource_entry *res = ipr_cmd->u.res; in ipr_set_supported_devs()
7360 ipr_cmd->job_step = ipr_ioa_reset_done; in ipr_set_supported_devs()
7366 ipr_cmd->u.res = res; in ipr_set_supported_devs()
7378 ipr_init_ioadl(ipr_cmd, in ipr_set_supported_devs()
7384 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_set_supported_devs()
7388 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_set_supported_devs()
7554 static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_select() argument
7558 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_select()
7567 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_WRITE_LAST); in ipr_build_mode_select()
7580 static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page28() argument
7582 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page28()
7593 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page28()
7597 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_ioafp_mode_select_page28()
7598 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_ioafp_mode_select_page28()
7600 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page28()
7617 static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_sense() argument
7621 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_sense()
7629 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_build_mode_sense()
7641 static int ipr_reset_cmd_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_cmd_failed() argument
7643 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cmd_failed()
7644 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_cmd_failed()
7648 ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc); in ipr_reset_cmd_failed()
7651 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cmd_failed()
7665 static int ipr_reset_mode_sense_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_failed() argument
7667 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_mode_sense_failed()
7668 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_failed()
7671 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_reset_mode_sense_failed()
7672 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_reset_mode_sense_failed()
7677 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_failed()
7690 static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page28() argument
7692 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page28()
7695 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page28()
7700 ipr_cmd->job_step = ipr_ioafp_mode_select_page28; in ipr_ioafp_mode_sense_page28()
7701 ipr_cmd->job_step_failed = ipr_reset_mode_sense_failed; in ipr_ioafp_mode_sense_page28()
7703 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page28()
7718 static int ipr_ioafp_mode_select_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page24() argument
7720 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page24()
7735 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page24()
7739 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_ioafp_mode_select_page24()
7740 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page24()
7756 static int ipr_reset_mode_sense_page24_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_page24_failed() argument
7758 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_page24_failed()
7761 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_reset_mode_sense_page24_failed()
7765 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_page24_failed()
7778 static int ipr_ioafp_mode_sense_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page24() argument
7780 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page24()
7783 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page24()
7788 ipr_cmd->job_step = ipr_ioafp_mode_select_page24; in ipr_ioafp_mode_sense_page24()
7789 ipr_cmd->job_step_failed = ipr_reset_mode_sense_page24_failed; in ipr_ioafp_mode_sense_page24()
7791 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page24()
7809 static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd) in ipr_init_res_table() argument
7811 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_init_res_table()
7882 ipr_cmd->job_step = ipr_ioafp_mode_sense_page24; in ipr_init_res_table()
7884 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_init_res_table()
7900 static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_query_ioa_cfg() argument
7902 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_query_ioa_cfg()
7903 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_query_ioa_cfg()
7921 ipr_init_ioadl(ipr_cmd, ioa_cfg->cfg_table_dma, ioa_cfg->cfg_table_size, in ipr_ioafp_query_ioa_cfg()
7924 ipr_cmd->job_step = ipr_init_res_table; in ipr_ioafp_query_ioa_cfg()
7926 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_query_ioa_cfg()
7932 static int ipr_ioa_service_action_failed(struct ipr_cmnd *ipr_cmd) in ipr_ioa_service_action_failed() argument
7934 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_ioa_service_action_failed()
7939 return ipr_reset_cmd_failed(ipr_cmd); in ipr_ioa_service_action_failed()
7942 static void ipr_build_ioa_service_action(struct ipr_cmnd *ipr_cmd, in ipr_build_ioa_service_action() argument
7945 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioa_service_action()
7961 static int ipr_ioafp_set_caching_parameters(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_set_caching_parameters() argument
7963 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_set_caching_parameters()
7964 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_set_caching_parameters()
7969 ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg; in ipr_ioafp_set_caching_parameters()
7972 ipr_build_ioa_service_action(ipr_cmd, in ipr_ioafp_set_caching_parameters()
7978 ipr_cmd->job_step_failed = ipr_ioa_service_action_failed; in ipr_ioafp_set_caching_parameters()
7979 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_set_caching_parameters()
8003 static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page, in ipr_ioafp_inquiry() argument
8006 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_inquiry()
8017 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_ioafp_inquiry()
8019 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_inquiry()
8054 static int ipr_ioafp_pageC4_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_pageC4_inquiry() argument
8056 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_pageC4_inquiry()
8061 ipr_cmd->job_step = ipr_ioafp_set_caching_parameters; in ipr_ioafp_pageC4_inquiry()
8065 ipr_ioafp_inquiry(ipr_cmd, 1, 0xC4, in ipr_ioafp_pageC4_inquiry()
8087 static int ipr_ioafp_cap_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_cap_inquiry() argument
8089 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_cap_inquiry()
8094 ipr_cmd->job_step = ipr_ioafp_pageC4_inquiry; in ipr_ioafp_cap_inquiry()
8098 ipr_ioafp_inquiry(ipr_cmd, 1, 0xD0, in ipr_ioafp_cap_inquiry()
8118 static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page3_inquiry() argument
8120 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page3_inquiry()
8124 ipr_cmd->job_step = ipr_ioafp_cap_inquiry; in ipr_ioafp_page3_inquiry()
8126 ipr_ioafp_inquiry(ipr_cmd, 1, 3, in ipr_ioafp_page3_inquiry()
8144 static int ipr_ioafp_page0_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page0_inquiry() argument
8146 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page0_inquiry()
8163 list_add_tail(&ipr_cmd->queue, in ipr_ioafp_page0_inquiry()
8169 ipr_cmd->job_step = ipr_ioafp_page3_inquiry; in ipr_ioafp_page0_inquiry()
8171 ipr_ioafp_inquiry(ipr_cmd, 1, 0, in ipr_ioafp_page0_inquiry()
8188 static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_std_inquiry() argument
8190 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_std_inquiry()
8193 ipr_cmd->job_step = ipr_ioafp_page0_inquiry; in ipr_ioafp_std_inquiry()
8195 ipr_ioafp_inquiry(ipr_cmd, 0, 0, in ipr_ioafp_std_inquiry()
8213 static int ipr_ioafp_identify_hrrq(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_identify_hrrq() argument
8215 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_identify_hrrq()
8216 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_identify_hrrq()
8220 ipr_cmd->job_step = ipr_ioafp_std_inquiry; in ipr_ioafp_identify_hrrq()
8271 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_identify_hrrq()
8275 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_ioafp_identify_hrrq()
8300 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_reset_timer_done() local
8301 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_timer_done()
8306 if (ioa_cfg->reset_cmd == ipr_cmd) { in ipr_reset_timer_done()
8307 list_del(&ipr_cmd->queue); in ipr_reset_timer_done()
8308 ipr_cmd->done(ipr_cmd); in ipr_reset_timer_done()
8328 static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd, in ipr_reset_start_timer() argument
8333 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_start_timer()
8334 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_start_timer()
8336 ipr_cmd->timer.expires = jiffies + timeout; in ipr_reset_start_timer()
8337 ipr_cmd->timer.function = ipr_reset_timer_done; in ipr_reset_start_timer()
8338 add_timer(&ipr_cmd->timer); in ipr_reset_start_timer()
8382 static int ipr_reset_next_stage(struct ipr_cmnd *ipr_cmd) in ipr_reset_next_stage() argument
8387 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_next_stage()
8408 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8412 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8421 ipr_cmd->timer.expires = jiffies + stage_time * HZ; in ipr_reset_next_stage()
8422 ipr_cmd->timer.function = ipr_oper_timeout; in ipr_reset_next_stage()
8423 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_next_stage()
8424 add_timer(&ipr_cmd->timer); in ipr_reset_next_stage()
8426 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_next_stage()
8441 static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_enable_ioa() argument
8443 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_enable_ioa()
8449 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_enable_ioa()
8487 ipr_cmd->job_step = ipr_reset_next_stage; in ipr_reset_enable_ioa()
8491 ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ); in ipr_reset_enable_ioa()
8492 ipr_cmd->timer.function = ipr_oper_timeout; in ipr_reset_enable_ioa()
8493 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_enable_ioa()
8494 add_timer(&ipr_cmd->timer); in ipr_reset_enable_ioa()
8495 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_enable_ioa()
8511 static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_for_dump() argument
8513 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_for_dump()
8521 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_wait_for_dump()
8617 static int ipr_reset_get_unit_check_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_get_unit_check_job() argument
8619 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_get_unit_check_job()
8624 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_get_unit_check_job()
8625 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_get_unit_check_job()
8631 static int ipr_dump_mailbox_wait(struct ipr_cmnd *ipr_cmd) in ipr_dump_mailbox_wait() argument
8633 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_dump_mailbox_wait()
8640 if (!ioa_cfg->sis64 || !ipr_cmd->u.time_left || in ipr_dump_mailbox_wait()
8644 if (!ipr_cmd->u.time_left) in ipr_dump_mailbox_wait()
8651 ipr_reset_start_timer(ipr_cmd, IPR_SIS64_DUMP_TIMEOUT); in ipr_dump_mailbox_wait()
8653 ipr_reset_start_timer(ipr_cmd, IPR_SIS32_DUMP_TIMEOUT); in ipr_dump_mailbox_wait()
8654 ipr_cmd->job_step = ipr_reset_wait_for_dump; in ipr_dump_mailbox_wait()
8658 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_dump_mailbox_wait()
8659 ipr_reset_start_timer(ipr_cmd, in ipr_dump_mailbox_wait()
8678 static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd) in ipr_reset_restore_cfg_space() argument
8680 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_restore_cfg_space()
8687 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_restore_cfg_space()
8701 ipr_cmd->job_step = ipr_reset_get_unit_check_job; in ipr_reset_restore_cfg_space()
8702 ipr_reset_start_timer(ipr_cmd, IPR_DUMP_DELAY_TIMEOUT); in ipr_reset_restore_cfg_space()
8707 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_restore_cfg_space()
8708 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_restore_cfg_space()
8714 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_restore_cfg_space()
8716 ipr_cmd->job_step = ipr_dump_mailbox_wait; in ipr_reset_restore_cfg_space()
8717 ipr_cmd->u.time_left = IPR_WAIT_FOR_MAILBOX; in ipr_reset_restore_cfg_space()
8719 ipr_cmd->job_step = ipr_reset_enable_ioa; in ipr_reset_restore_cfg_space()
8735 static int ipr_reset_bist_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_bist_done() argument
8737 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_bist_done()
8743 ipr_cmd->job_step = ipr_reset_restore_cfg_space; in ipr_reset_bist_done()
8757 static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_start_bist() argument
8759 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_start_bist()
8770 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_start_bist()
8771 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_start_bist()
8775 pci_cfg_access_unlock(ipr_cmd->ioa_cfg->pdev); in ipr_reset_start_bist()
8777 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_start_bist()
8794 static int ipr_reset_slot_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset_done() argument
8797 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_slot_reset_done()
8798 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_slot_reset_done()
8812 struct ipr_cmnd *ipr_cmd = container_of(work, struct ipr_cmnd, work); in ipr_reset_reset_work() local
8813 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_reset_work()
8823 if (ioa_cfg->reset_cmd == ipr_cmd) in ipr_reset_reset_work()
8824 ipr_reset_ioa_job(ipr_cmd); in ipr_reset_reset_work()
8838 static int ipr_reset_slot_reset(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset() argument
8840 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_slot_reset()
8843 INIT_WORK(&ipr_cmd->work, ipr_reset_reset_work); in ipr_reset_slot_reset()
8844 queue_work(ioa_cfg->reset_work_q, &ipr_cmd->work); in ipr_reset_slot_reset()
8845 ipr_cmd->job_step = ipr_reset_slot_reset_done; in ipr_reset_slot_reset()
8859 static int ipr_reset_block_config_access_wait(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access_wait() argument
8861 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_block_config_access_wait()
8866 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8868 if (ipr_cmd->u.time_left) { in ipr_reset_block_config_access_wait()
8870 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access_wait()
8871 ipr_reset_start_timer(ipr_cmd, in ipr_reset_block_config_access_wait()
8874 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8892 static int ipr_reset_block_config_access(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access() argument
8894 ipr_cmd->ioa_cfg->cfg_locked = 0; in ipr_reset_block_config_access()
8895 ipr_cmd->job_step = ipr_reset_block_config_access_wait; in ipr_reset_block_config_access()
8896 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access()
8930 static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_to_start_bist() argument
8932 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_to_start_bist()
8935 if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) { in ipr_reset_wait_to_start_bist()
8936 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_wait_to_start_bist()
8937 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_wait_to_start_bist()
8939 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_wait_to_start_bist()
8958 static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd) in ipr_reset_alert() argument
8960 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_alert()
8970 ipr_cmd->job_step = ipr_reset_wait_to_start_bist; in ipr_reset_alert()
8972 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_alert()
8975 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_alert()
8976 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_alert()
8991 static int ipr_reset_quiesce_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_quiesce_done() argument
8993 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_quiesce_done()
8996 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_quiesce_done()
9012 static int ipr_reset_cancel_hcam_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam_done() argument
9014 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam_done()
9021 ipr_cmd->job_step = ipr_reset_quiesce_done; in ipr_reset_cancel_hcam_done()
9028 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cancel_hcam_done()
9051 static int ipr_reset_cancel_hcam(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam() argument
9053 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam()
9060 ipr_cmd->job_step = ipr_reset_cancel_hcam_done; in ipr_reset_cancel_hcam()
9068 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_cancel_hcam()
9069 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_cancel_hcam()
9070 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_reset_cancel_hcam()
9083 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_cancel_hcam()
9087 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_cancel_hcam()
9092 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_cancel_hcam()
9107 static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download_done() argument
9109 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download_done()
9115 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download_done()
9129 static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download() argument
9131 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download()
9135 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download()
9140 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_ucode_download()
9141 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; in ipr_reset_ucode_download()
9142 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER; in ipr_reset_ucode_download()
9143 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE; in ipr_reset_ucode_download()
9144 ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16; in ipr_reset_ucode_download()
9145 ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8; in ipr_reset_ucode_download()
9146 ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff; in ipr_reset_ucode_download()
9149 ipr_build_ucode_ioadl64(ipr_cmd, sglist); in ipr_reset_ucode_download()
9151 ipr_build_ucode_ioadl(ipr_cmd, sglist); in ipr_reset_ucode_download()
9152 ipr_cmd->job_step = ipr_reset_ucode_download_done; in ipr_reset_ucode_download()
9154 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_ucode_download()
9172 static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_shutdown_ioa() argument
9174 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_shutdown_ioa()
9175 enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type; in ipr_reset_shutdown_ioa()
9181 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_shutdown_ioa()
9184 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_shutdown_ioa()
9185 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_shutdown_ioa()
9186 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_reset_shutdown_ioa()
9187 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type; in ipr_reset_shutdown_ioa()
9198 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout); in ipr_reset_shutdown_ioa()
9201 ipr_cmd->job_step = ipr_reset_ucode_download; in ipr_reset_shutdown_ioa()
9203 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_shutdown_ioa()
9218 static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_ioa_job() argument
9221 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ioa_job()
9224 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_ioa_job()
9226 if (ioa_cfg->reset_cmd != ipr_cmd) { in ipr_reset_ioa_job()
9231 list_add_tail(&ipr_cmd->queue, in ipr_reset_ioa_job()
9232 &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_ioa_job()
9237 rc = ipr_cmd->job_step_failed(ipr_cmd); in ipr_reset_ioa_job()
9242 ipr_reinit_ipr_cmnd(ipr_cmd); in ipr_reset_ioa_job()
9243 ipr_cmd->job_step_failed = ipr_reset_cmd_failed; in ipr_reset_ioa_job()
9244 rc = ipr_cmd->job_step(ipr_cmd); in ipr_reset_ioa_job()
9266 struct ipr_cmnd *ipr_cmd; in _ipr_initiate_ioa_reset() local
9282 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in _ipr_initiate_ioa_reset()
9283 ioa_cfg->reset_cmd = ipr_cmd; in _ipr_initiate_ioa_reset()
9284 ipr_cmd->job_step = job_step; in _ipr_initiate_ioa_reset()
9285 ipr_cmd->u.shutdown_type = shutdown_type; in _ipr_initiate_ioa_reset()
9287 ipr_reset_ioa_job(ipr_cmd); in _ipr_initiate_ioa_reset()
9358 static int ipr_reset_freeze(struct ipr_cmnd *ipr_cmd) in ipr_reset_freeze() argument
9360 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_freeze()
9370 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_freeze()
9371 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_freeze()
9650 struct ipr_cmnd *ipr_cmd; in ipr_alloc_cmd_blks() local
9705 ipr_cmd = dma_pool_zalloc(ioa_cfg->ipr_cmd_pool, in ipr_alloc_cmd_blks()
9708 if (!ipr_cmd) { in ipr_alloc_cmd_blks()
9713 ioa_cfg->ipr_cmnd_list[i] = ipr_cmd; in ipr_alloc_cmd_blks()
9716 ioarcb = &ipr_cmd->ioarcb; in ipr_alloc_cmd_blks()
9717 ipr_cmd->dma_addr = dma_addr; in ipr_alloc_cmd_blks()
9737 ipr_cmd->cmd_index = i; in ipr_alloc_cmd_blks()
9738 ipr_cmd->ioa_cfg = ioa_cfg; in ipr_alloc_cmd_blks()
9739 ipr_cmd->sense_buffer_dma = dma_addr + in ipr_alloc_cmd_blks()
9742 ipr_cmd->ioarcb.cmd_pkt.hrrq_id = hrrq_id; in ipr_alloc_cmd_blks()
9743 ipr_cmd->hrrq = &ioa_cfg->hrrq[hrrq_id]; in ipr_alloc_cmd_blks()
9744 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_alloc_cmd_blks()
10814 static void ipr_halt_done(struct ipr_cmnd *ipr_cmd) in ipr_halt_done() argument
10816 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_halt_done()
10830 struct ipr_cmnd *ipr_cmd; in ipr_halt() local
10847 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_halt()
10848 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_halt()
10849 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_halt()
10850 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_halt()
10851 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_SHUTDOWN_PREPARE_FOR_NORMAL; in ipr_halt()
10853 ipr_do_req(ipr_cmd, ipr_halt_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_halt()