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()
5072 static int ipr_match_lun(struct ipr_cmnd *ipr_cmd, void *device) in ipr_match_lun() argument
5074 if (ipr_cmd->scsi_cmd && ipr_cmd->scsi_cmd->device == device) in ipr_match_lun()
5086 static bool ipr_cmnd_is_free(struct ipr_cmnd *ipr_cmd) in ipr_cmnd_is_free() argument
5090 list_for_each_entry(loop_cmd, &ipr_cmd->hrrq->hrrq_free_q, queue) { in ipr_cmnd_is_free()
5091 if (loop_cmd == ipr_cmd) in ipr_cmnd_is_free()
5106 static int ipr_match_res(struct ipr_cmnd *ipr_cmd, void *resource) in ipr_match_res() argument
5110 if (res && ipr_cmd->ioarcb.res_handle == res->res_handle) in ipr_match_res()
5127 struct ipr_cmnd *ipr_cmd; in ipr_wait_for_ops() local
5141 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in ipr_wait_for_ops()
5142 if (!ipr_cmnd_is_free(ipr_cmd)) { in ipr_wait_for_ops()
5143 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
5144 ipr_cmd->eh_comp = ∁ in ipr_wait_for_ops()
5161 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in ipr_wait_for_ops()
5162 if (!ipr_cmnd_is_free(ipr_cmd)) { in ipr_wait_for_ops()
5163 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
5164 ipr_cmd->eh_comp = NULL; in ipr_wait_for_ops()
5236 struct ipr_cmnd *ipr_cmd; in ipr_device_reset() local
5243 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_device_reset()
5244 ioarcb = &ipr_cmd->ioarcb; in ipr_device_reset()
5247 if (ipr_cmd->ioa_cfg->sis64) { in ipr_device_reset()
5248 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_device_reset()
5262 ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_device_reset()
5263 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_device_reset()
5264 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_device_reset()
5266 if (ipr_cmd->ioa_cfg->sis64) in ipr_device_reset()
5267 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_device_reset()
5270 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_device_reset()
5340 struct ipr_cmnd *ipr_cmd; in __ipr_eh_dev_reset() local
5364 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in __ipr_eh_dev_reset()
5366 if (ipr_cmd->ioarcb.res_handle == res->res_handle) { in __ipr_eh_dev_reset()
5367 if (!ipr_cmd->qc) in __ipr_eh_dev_reset()
5369 if (ipr_cmnd_is_free(ipr_cmd)) in __ipr_eh_dev_reset()
5372 ipr_cmd->done = ipr_sata_eh_done; in __ipr_eh_dev_reset()
5373 if (!(ipr_cmd->qc->flags & ATA_QCFLAG_FAILED)) { in __ipr_eh_dev_reset()
5374 ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT; in __ipr_eh_dev_reset()
5375 ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED; in __ipr_eh_dev_reset()
5433 static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_bus_reset_done() argument
5435 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_bus_reset_done()
5441 if (res->res_handle == ipr_cmd->ioarcb.res_handle) { in ipr_bus_reset_done()
5451 if (ipr_cmd->sibling->sibling) in ipr_bus_reset_done()
5452 ipr_cmd->sibling->sibling = NULL; in ipr_bus_reset_done()
5454 ipr_cmd->sibling->done(ipr_cmd->sibling); in ipr_bus_reset_done()
5456 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_bus_reset_done()
5473 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_abort_timeout() local
5475 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_abort_timeout()
5481 if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) { in ipr_abort_timeout()
5486 sdev_printk(KERN_ERR, ipr_cmd->u.sdev, "Abort timed out. Resetting bus.\n"); in ipr_abort_timeout()
5488 ipr_cmd->sibling = reset_cmd; in ipr_abort_timeout()
5489 reset_cmd->sibling = ipr_cmd; in ipr_abort_timeout()
5490 reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle; in ipr_abort_timeout()
5512 struct ipr_cmnd *ipr_cmd; in ipr_cancel_op() local
5560 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_cancel_op()
5561 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_cancel_op()
5562 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_cancel_op()
5565 ipr_cmd->u.sdev = scsi_cmd->device; in ipr_cancel_op()
5569 ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_CANCEL_ALL_TIMEOUT); in ipr_cancel_op()
5570 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_cancel_op()
5581 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_cancel_op()
5740 struct ipr_cmnd *ipr_cmd; in ipr_process_hrrq() local
5763 ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index]; in ipr_process_hrrq()
5764 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_hrrq()
5766 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc); in ipr_process_hrrq()
5768 list_move_tail(&ipr_cmd->queue, doneq); in ipr_process_hrrq()
5787 struct ipr_cmnd *ipr_cmd, *temp; in ipr_iopoll() local
5801 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_iopoll()
5802 list_del(&ipr_cmd->queue); in ipr_iopoll()
5803 del_timer(&ipr_cmd->timer); in ipr_iopoll()
5804 ipr_cmd->fast_done(ipr_cmd); in ipr_iopoll()
5826 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr() local
5870 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr()
5871 list_del(&ipr_cmd->queue); in ipr_isr()
5872 del_timer(&ipr_cmd->timer); in ipr_isr()
5873 ipr_cmd->fast_done(ipr_cmd); in ipr_isr()
5891 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr_mhrrq() local
5920 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr_mhrrq()
5921 list_del(&ipr_cmd->queue); in ipr_isr_mhrrq()
5922 del_timer(&ipr_cmd->timer); in ipr_isr_mhrrq()
5923 ipr_cmd->fast_done(ipr_cmd); in ipr_isr_mhrrq()
5937 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl64() argument
5943 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl64()
5944 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl64()
5945 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ioadl64()
5958 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl64()
5962 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl64()
5970 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl64()
5989 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl() argument
5995 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl()
5996 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl()
5997 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ioadl()
6009 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl()
6016 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
6021 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
6024 if (ipr_cmd->dma_use_sg <= ARRAY_SIZE(ioarcb->u.add_data.u.ioadl)) { in ipr_build_ioadl()
6026 ioarcb->write_ioadl_addr = cpu_to_be32((ipr_cmd->dma_addr) + in ipr_build_ioadl()
6031 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl()
6051 static void __ipr_erp_done(struct ipr_cmnd *ipr_cmd) in __ipr_erp_done() argument
6053 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in __ipr_erp_done()
6055 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in __ipr_erp_done()
6062 memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer, in __ipr_erp_done()
6071 scsi_dma_unmap(ipr_cmd->scsi_cmd); in __ipr_erp_done()
6073 if (ipr_cmd->eh_comp) in __ipr_erp_done()
6074 complete(ipr_cmd->eh_comp); in __ipr_erp_done()
6075 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in __ipr_erp_done()
6088 static void ipr_erp_done(struct ipr_cmnd *ipr_cmd) in ipr_erp_done() argument
6090 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_erp_done()
6094 __ipr_erp_done(ipr_cmd); in ipr_erp_done()
6105 static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) in ipr_reinit_ipr_cmnd_for_erp() argument
6107 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_reinit_ipr_cmnd_for_erp()
6108 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_reinit_ipr_cmnd_for_erp()
6109 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_reinit_ipr_cmnd_for_erp()
6119 if (ipr_cmd->ioa_cfg->sis64) in ipr_reinit_ipr_cmnd_for_erp()
6139 static void __ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) in __ipr_erp_request_sense() argument
6141 struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in __ipr_erp_request_sense()
6142 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in __ipr_erp_request_sense()
6145 __ipr_erp_done(ipr_cmd); in __ipr_erp_request_sense()
6149 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in __ipr_erp_request_sense()
6158 ipr_init_ioadl(ipr_cmd, ipr_cmd->sense_buffer_dma, in __ipr_erp_request_sense()
6161 ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout, in __ipr_erp_request_sense()
6175 static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) in ipr_erp_request_sense() argument
6177 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_erp_request_sense()
6181 __ipr_erp_request_sense(ipr_cmd); in ipr_erp_request_sense()
6197 static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd) in ipr_erp_cancel_all() argument
6199 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_cancel_all()
6205 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in ipr_erp_cancel_all()
6208 __ipr_erp_request_sense(ipr_cmd); in ipr_erp_cancel_all()
6212 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_erp_cancel_all()
6216 ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout, in ipr_erp_cancel_all()
6234 struct ipr_cmnd *ipr_cmd, struct ipr_resource_entry *res) in ipr_dump_ioasa() argument
6239 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_dump_ioasa()
6295 static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd) in ipr_gen_sense() argument
6298 u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer; in ipr_gen_sense()
6299 struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata; in ipr_gen_sense()
6300 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_gen_sense()
6308 ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION; in ipr_gen_sense()
6388 static int ipr_get_autosense(struct ipr_cmnd *ipr_cmd) in ipr_get_autosense() argument
6390 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_get_autosense()
6391 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64; in ipr_get_autosense()
6396 if (ipr_cmd->ioa_cfg->sis64) in ipr_get_autosense()
6397 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa64->auto_sense.data, in ipr_get_autosense()
6401 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data, in ipr_get_autosense()
6419 struct ipr_cmnd *ipr_cmd) in ipr_erp_start() argument
6421 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_start()
6423 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_start()
6427 __ipr_scsi_eh_done(ipr_cmd); in ipr_erp_start()
6432 ipr_gen_sense(ipr_cmd); in ipr_erp_start()
6434 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_erp_start()
6481 if (!ipr_get_autosense(ipr_cmd)) { in ipr_erp_start()
6483 ipr_erp_cancel_all(ipr_cmd); in ipr_erp_start()
6508 scsi_dma_unmap(ipr_cmd->scsi_cmd); in ipr_erp_start()
6510 if (ipr_cmd->eh_comp) in ipr_erp_start()
6511 complete(ipr_cmd->eh_comp); in ipr_erp_start()
6512 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_erp_start()
6525 static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd) in ipr_scsi_done() argument
6527 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_scsi_done()
6528 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_scsi_done()
6529 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_scsi_done()
6532 scsi_set_resid(scsi_cmd, be32_to_cpu(ipr_cmd->s.ioasa.hdr.residual_data_len)); in ipr_scsi_done()
6537 spin_lock_irqsave(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6539 if (ipr_cmd->eh_comp) in ipr_scsi_done()
6540 complete(ipr_cmd->eh_comp); in ipr_scsi_done()
6541 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_scsi_done()
6542 spin_unlock_irqrestore(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6545 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6546 ipr_erp_start(ioa_cfg, ipr_cmd); in ipr_scsi_done()
6547 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6570 struct ipr_cmnd *ipr_cmd; in ipr_queuecommand() local
6611 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_queuecommand()
6612 if (ipr_cmd == NULL) { in ipr_queuecommand()
6618 ipr_init_ipr_cmnd(ipr_cmd, ipr_scsi_done); in ipr_queuecommand()
6619 ioarcb = &ipr_cmd->ioarcb; in ipr_queuecommand()
6622 ipr_cmd->scsi_cmd = scsi_cmd; in ipr_queuecommand()
6623 ipr_cmd->done = ipr_scsi_eh_done; in ipr_queuecommand()
6657 rc = ipr_build_ioadl64(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6659 rc = ipr_build_ioadl(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6663 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6671 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6682 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_pending_q); in ipr_queuecommand()
6683 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_queuecommand()
6684 ipr_send_command(ipr_cmd); in ipr_queuecommand()
6825 struct ipr_cmnd *ipr_cmd; in ipr_ata_post_internal() local
6838 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_ata_post_internal()
6839 if (ipr_cmd->qc == qc) { in ipr_ata_post_internal()
6885 static void ipr_sata_done(struct ipr_cmnd *ipr_cmd) in ipr_sata_done() argument
6887 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_sata_done()
6888 struct ata_queued_cmd *qc = ipr_cmd->qc; in ipr_sata_done()
6891 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_sata_done()
6893 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6894 if (ipr_cmd->ioa_cfg->sis64) in ipr_sata_done()
6895 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_sata_done()
6898 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_sata_done()
6900 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_sata_done()
6902 if (be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc_specific) & IPR_ATA_DEVICE_WAS_RESET) in ipr_sata_done()
6909 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_sata_done()
6910 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6920 static void ipr_build_ata_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl64() argument
6924 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl64()
6925 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ata_ioadl.ioadl64; in ipr_build_ata_ioadl64()
6930 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_build_ata_ioadl64()
6943 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl64()
6966 static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl() argument
6970 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl()
6971 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ata_ioadl()
6985 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
6990 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
7017 struct ipr_cmnd *ipr_cmd; in ipr_qc_defer() local
7036 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_qc_defer()
7037 if (ipr_cmd == NULL) { in ipr_qc_defer()
7042 qc->lldd_task = ipr_cmd; in ipr_qc_defer()
7060 struct ipr_cmnd *ipr_cmd; in ipr_qc_issue() local
7067 ipr_cmd = qc->lldd_task; in ipr_qc_issue()
7068 if (ipr_cmd == NULL) in ipr_qc_issue()
7072 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7073 if (unlikely(!ipr_cmd->hrrq->allow_cmds || in ipr_qc_issue()
7074 ipr_cmd->hrrq->ioa_is_dead)) { in ipr_qc_issue()
7075 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_qc_issue()
7076 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7080 ipr_init_ipr_cmnd(ipr_cmd, ipr_lock_and_done); in ipr_qc_issue()
7081 ioarcb = &ipr_cmd->ioarcb; in ipr_qc_issue()
7084 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_qc_issue()
7092 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_qc_issue()
7093 ipr_cmd->qc = qc; in ipr_qc_issue()
7094 ipr_cmd->done = ipr_sata_done; in ipr_qc_issue()
7095 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_qc_issue()
7099 ipr_cmd->dma_use_sg = qc->n_elem; in ipr_qc_issue()
7102 ipr_build_ata_ioadl64(ipr_cmd, qc); in ipr_qc_issue()
7104 ipr_build_ata_ioadl(ipr_cmd, qc); in ipr_qc_issue()
7109 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_qc_issue()
7132 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7136 ipr_send_command(ipr_cmd); in ipr_qc_issue()
7137 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7240 static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_bringdown_done() argument
7242 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_bringdown_done()
7261 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_bringdown_done()
7279 static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_reset_done() argument
7281 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_reset_done()
7320 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_reset_done()
7357 static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd) in ipr_set_supported_devs() argument
7359 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_set_supported_devs()
7361 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_set_supported_devs()
7362 struct ipr_resource_entry *res = ipr_cmd->u.res; in ipr_set_supported_devs()
7364 ipr_cmd->job_step = ipr_ioa_reset_done; in ipr_set_supported_devs()
7370 ipr_cmd->u.res = res; in ipr_set_supported_devs()
7382 ipr_init_ioadl(ipr_cmd, in ipr_set_supported_devs()
7388 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_set_supported_devs()
7392 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_set_supported_devs()
7558 static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_select() argument
7562 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_select()
7571 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_WRITE_LAST); in ipr_build_mode_select()
7584 static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page28() argument
7586 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page28()
7597 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page28()
7601 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_ioafp_mode_select_page28()
7602 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_ioafp_mode_select_page28()
7604 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page28()
7621 static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_sense() argument
7625 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_sense()
7633 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_build_mode_sense()
7645 static int ipr_reset_cmd_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_cmd_failed() argument
7647 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cmd_failed()
7648 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_cmd_failed()
7652 ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc); in ipr_reset_cmd_failed()
7655 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cmd_failed()
7669 static int ipr_reset_mode_sense_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_failed() argument
7671 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_mode_sense_failed()
7672 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_failed()
7675 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_reset_mode_sense_failed()
7676 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_reset_mode_sense_failed()
7681 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_failed()
7694 static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page28() argument
7696 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page28()
7699 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page28()
7704 ipr_cmd->job_step = ipr_ioafp_mode_select_page28; in ipr_ioafp_mode_sense_page28()
7705 ipr_cmd->job_step_failed = ipr_reset_mode_sense_failed; in ipr_ioafp_mode_sense_page28()
7707 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page28()
7722 static int ipr_ioafp_mode_select_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page24() argument
7724 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page24()
7739 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page24()
7743 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_ioafp_mode_select_page24()
7744 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page24()
7760 static int ipr_reset_mode_sense_page24_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_page24_failed() argument
7762 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_page24_failed()
7765 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_reset_mode_sense_page24_failed()
7769 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_page24_failed()
7782 static int ipr_ioafp_mode_sense_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page24() argument
7784 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page24()
7787 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page24()
7792 ipr_cmd->job_step = ipr_ioafp_mode_select_page24; in ipr_ioafp_mode_sense_page24()
7793 ipr_cmd->job_step_failed = ipr_reset_mode_sense_page24_failed; in ipr_ioafp_mode_sense_page24()
7795 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page24()
7813 static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd) in ipr_init_res_table() argument
7815 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_init_res_table()
7886 ipr_cmd->job_step = ipr_ioafp_mode_sense_page24; in ipr_init_res_table()
7888 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_init_res_table()
7904 static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_query_ioa_cfg() argument
7906 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_query_ioa_cfg()
7907 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_query_ioa_cfg()
7925 ipr_init_ioadl(ipr_cmd, ioa_cfg->cfg_table_dma, ioa_cfg->cfg_table_size, in ipr_ioafp_query_ioa_cfg()
7928 ipr_cmd->job_step = ipr_init_res_table; in ipr_ioafp_query_ioa_cfg()
7930 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_query_ioa_cfg()
7936 static int ipr_ioa_service_action_failed(struct ipr_cmnd *ipr_cmd) in ipr_ioa_service_action_failed() argument
7938 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_ioa_service_action_failed()
7943 return ipr_reset_cmd_failed(ipr_cmd); in ipr_ioa_service_action_failed()
7946 static void ipr_build_ioa_service_action(struct ipr_cmnd *ipr_cmd, in ipr_build_ioa_service_action() argument
7949 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioa_service_action()
7965 static int ipr_ioafp_set_caching_parameters(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_set_caching_parameters() argument
7967 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_set_caching_parameters()
7968 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_set_caching_parameters()
7973 ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg; in ipr_ioafp_set_caching_parameters()
7976 ipr_build_ioa_service_action(ipr_cmd, in ipr_ioafp_set_caching_parameters()
7982 ipr_cmd->job_step_failed = ipr_ioa_service_action_failed; in ipr_ioafp_set_caching_parameters()
7983 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_set_caching_parameters()
8007 static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page, in ipr_ioafp_inquiry() argument
8010 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_inquiry()
8021 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_ioafp_inquiry()
8023 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_inquiry()
8058 static int ipr_ioafp_pageC4_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_pageC4_inquiry() argument
8060 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_pageC4_inquiry()
8065 ipr_cmd->job_step = ipr_ioafp_set_caching_parameters; in ipr_ioafp_pageC4_inquiry()
8069 ipr_ioafp_inquiry(ipr_cmd, 1, 0xC4, in ipr_ioafp_pageC4_inquiry()
8091 static int ipr_ioafp_cap_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_cap_inquiry() argument
8093 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_cap_inquiry()
8098 ipr_cmd->job_step = ipr_ioafp_pageC4_inquiry; in ipr_ioafp_cap_inquiry()
8102 ipr_ioafp_inquiry(ipr_cmd, 1, 0xD0, in ipr_ioafp_cap_inquiry()
8122 static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page3_inquiry() argument
8124 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page3_inquiry()
8128 ipr_cmd->job_step = ipr_ioafp_cap_inquiry; in ipr_ioafp_page3_inquiry()
8130 ipr_ioafp_inquiry(ipr_cmd, 1, 3, in ipr_ioafp_page3_inquiry()
8148 static int ipr_ioafp_page0_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page0_inquiry() argument
8150 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page0_inquiry()
8167 list_add_tail(&ipr_cmd->queue, in ipr_ioafp_page0_inquiry()
8173 ipr_cmd->job_step = ipr_ioafp_page3_inquiry; in ipr_ioafp_page0_inquiry()
8175 ipr_ioafp_inquiry(ipr_cmd, 1, 0, in ipr_ioafp_page0_inquiry()
8192 static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_std_inquiry() argument
8194 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_std_inquiry()
8197 ipr_cmd->job_step = ipr_ioafp_page0_inquiry; in ipr_ioafp_std_inquiry()
8199 ipr_ioafp_inquiry(ipr_cmd, 0, 0, in ipr_ioafp_std_inquiry()
8217 static int ipr_ioafp_identify_hrrq(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_identify_hrrq() argument
8219 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_identify_hrrq()
8220 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_identify_hrrq()
8224 ipr_cmd->job_step = ipr_ioafp_std_inquiry; in ipr_ioafp_identify_hrrq()
8275 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_identify_hrrq()
8279 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_ioafp_identify_hrrq()
8304 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_reset_timer_done() local
8305 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_timer_done()
8310 if (ioa_cfg->reset_cmd == ipr_cmd) { in ipr_reset_timer_done()
8311 list_del(&ipr_cmd->queue); in ipr_reset_timer_done()
8312 ipr_cmd->done(ipr_cmd); in ipr_reset_timer_done()
8332 static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd, in ipr_reset_start_timer() argument
8337 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_start_timer()
8338 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_start_timer()
8340 ipr_cmd->timer.expires = jiffies + timeout; in ipr_reset_start_timer()
8341 ipr_cmd->timer.function = ipr_reset_timer_done; in ipr_reset_start_timer()
8342 add_timer(&ipr_cmd->timer); in ipr_reset_start_timer()
8386 static int ipr_reset_next_stage(struct ipr_cmnd *ipr_cmd) in ipr_reset_next_stage() argument
8391 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_next_stage()
8412 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8416 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8425 ipr_cmd->timer.expires = jiffies + stage_time * HZ; in ipr_reset_next_stage()
8426 ipr_cmd->timer.function = ipr_oper_timeout; in ipr_reset_next_stage()
8427 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_next_stage()
8428 add_timer(&ipr_cmd->timer); in ipr_reset_next_stage()
8430 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_next_stage()
8445 static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_enable_ioa() argument
8447 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_enable_ioa()
8453 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_enable_ioa()
8491 ipr_cmd->job_step = ipr_reset_next_stage; in ipr_reset_enable_ioa()
8495 ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ); in ipr_reset_enable_ioa()
8496 ipr_cmd->timer.function = ipr_oper_timeout; in ipr_reset_enable_ioa()
8497 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_enable_ioa()
8498 add_timer(&ipr_cmd->timer); in ipr_reset_enable_ioa()
8499 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_enable_ioa()
8515 static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_for_dump() argument
8517 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_for_dump()
8525 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_wait_for_dump()
8621 static int ipr_reset_get_unit_check_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_get_unit_check_job() argument
8623 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_get_unit_check_job()
8628 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_get_unit_check_job()
8629 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_get_unit_check_job()
8635 static int ipr_dump_mailbox_wait(struct ipr_cmnd *ipr_cmd) in ipr_dump_mailbox_wait() argument
8637 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_dump_mailbox_wait()
8644 if (!ioa_cfg->sis64 || !ipr_cmd->u.time_left || in ipr_dump_mailbox_wait()
8648 if (!ipr_cmd->u.time_left) in ipr_dump_mailbox_wait()
8655 ipr_reset_start_timer(ipr_cmd, IPR_SIS64_DUMP_TIMEOUT); in ipr_dump_mailbox_wait()
8657 ipr_reset_start_timer(ipr_cmd, IPR_SIS32_DUMP_TIMEOUT); in ipr_dump_mailbox_wait()
8658 ipr_cmd->job_step = ipr_reset_wait_for_dump; in ipr_dump_mailbox_wait()
8662 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_dump_mailbox_wait()
8663 ipr_reset_start_timer(ipr_cmd, in ipr_dump_mailbox_wait()
8682 static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd) in ipr_reset_restore_cfg_space() argument
8684 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_restore_cfg_space()
8691 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_restore_cfg_space()
8705 ipr_cmd->job_step = ipr_reset_get_unit_check_job; in ipr_reset_restore_cfg_space()
8706 ipr_reset_start_timer(ipr_cmd, IPR_DUMP_DELAY_TIMEOUT); in ipr_reset_restore_cfg_space()
8711 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_restore_cfg_space()
8712 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_restore_cfg_space()
8718 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_restore_cfg_space()
8720 ipr_cmd->job_step = ipr_dump_mailbox_wait; in ipr_reset_restore_cfg_space()
8721 ipr_cmd->u.time_left = IPR_WAIT_FOR_MAILBOX; in ipr_reset_restore_cfg_space()
8723 ipr_cmd->job_step = ipr_reset_enable_ioa; in ipr_reset_restore_cfg_space()
8739 static int ipr_reset_bist_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_bist_done() argument
8741 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_bist_done()
8747 ipr_cmd->job_step = ipr_reset_restore_cfg_space; in ipr_reset_bist_done()
8761 static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_start_bist() argument
8763 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_start_bist()
8774 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_start_bist()
8775 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_start_bist()
8779 pci_cfg_access_unlock(ipr_cmd->ioa_cfg->pdev); in ipr_reset_start_bist()
8781 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_start_bist()
8798 static int ipr_reset_slot_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset_done() argument
8801 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_slot_reset_done()
8802 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_slot_reset_done()
8816 struct ipr_cmnd *ipr_cmd = container_of(work, struct ipr_cmnd, work); in ipr_reset_reset_work() local
8817 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_reset_work()
8827 if (ioa_cfg->reset_cmd == ipr_cmd) in ipr_reset_reset_work()
8828 ipr_reset_ioa_job(ipr_cmd); in ipr_reset_reset_work()
8842 static int ipr_reset_slot_reset(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset() argument
8844 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_slot_reset()
8847 INIT_WORK(&ipr_cmd->work, ipr_reset_reset_work); in ipr_reset_slot_reset()
8848 queue_work(ioa_cfg->reset_work_q, &ipr_cmd->work); in ipr_reset_slot_reset()
8849 ipr_cmd->job_step = ipr_reset_slot_reset_done; in ipr_reset_slot_reset()
8863 static int ipr_reset_block_config_access_wait(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access_wait() argument
8865 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_block_config_access_wait()
8870 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8872 if (ipr_cmd->u.time_left) { in ipr_reset_block_config_access_wait()
8874 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access_wait()
8875 ipr_reset_start_timer(ipr_cmd, in ipr_reset_block_config_access_wait()
8878 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8896 static int ipr_reset_block_config_access(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access() argument
8898 ipr_cmd->ioa_cfg->cfg_locked = 0; in ipr_reset_block_config_access()
8899 ipr_cmd->job_step = ipr_reset_block_config_access_wait; in ipr_reset_block_config_access()
8900 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access()
8934 static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_to_start_bist() argument
8936 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_to_start_bist()
8939 if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) { in ipr_reset_wait_to_start_bist()
8940 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_wait_to_start_bist()
8941 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_wait_to_start_bist()
8943 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_wait_to_start_bist()
8962 static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd) in ipr_reset_alert() argument
8964 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_alert()
8974 ipr_cmd->job_step = ipr_reset_wait_to_start_bist; in ipr_reset_alert()
8976 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_alert()
8979 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_alert()
8980 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_alert()
8995 static int ipr_reset_quiesce_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_quiesce_done() argument
8997 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_quiesce_done()
9000 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_quiesce_done()
9016 static int ipr_reset_cancel_hcam_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam_done() argument
9018 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam_done()
9025 ipr_cmd->job_step = ipr_reset_quiesce_done; in ipr_reset_cancel_hcam_done()
9032 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cancel_hcam_done()
9055 static int ipr_reset_cancel_hcam(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam() argument
9057 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam()
9064 ipr_cmd->job_step = ipr_reset_cancel_hcam_done; in ipr_reset_cancel_hcam()
9072 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_cancel_hcam()
9073 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_cancel_hcam()
9074 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_reset_cancel_hcam()
9087 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_cancel_hcam()
9091 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_cancel_hcam()
9096 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_cancel_hcam()
9111 static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download_done() argument
9113 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download_done()
9119 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download_done()
9133 static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download() argument
9135 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download()
9139 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download()
9144 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_ucode_download()
9145 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; in ipr_reset_ucode_download()
9146 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER; in ipr_reset_ucode_download()
9147 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE; in ipr_reset_ucode_download()
9148 ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16; in ipr_reset_ucode_download()
9149 ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8; in ipr_reset_ucode_download()
9150 ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff; in ipr_reset_ucode_download()
9153 ipr_build_ucode_ioadl64(ipr_cmd, sglist); in ipr_reset_ucode_download()
9155 ipr_build_ucode_ioadl(ipr_cmd, sglist); in ipr_reset_ucode_download()
9156 ipr_cmd->job_step = ipr_reset_ucode_download_done; in ipr_reset_ucode_download()
9158 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_ucode_download()
9176 static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_shutdown_ioa() argument
9178 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_shutdown_ioa()
9179 enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type; in ipr_reset_shutdown_ioa()
9185 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_shutdown_ioa()
9188 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_shutdown_ioa()
9189 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_shutdown_ioa()
9190 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_reset_shutdown_ioa()
9191 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type; in ipr_reset_shutdown_ioa()
9202 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout); in ipr_reset_shutdown_ioa()
9205 ipr_cmd->job_step = ipr_reset_ucode_download; in ipr_reset_shutdown_ioa()
9207 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_shutdown_ioa()
9222 static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_ioa_job() argument
9225 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ioa_job()
9228 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_ioa_job()
9230 if (ioa_cfg->reset_cmd != ipr_cmd) { in ipr_reset_ioa_job()
9235 list_add_tail(&ipr_cmd->queue, in ipr_reset_ioa_job()
9236 &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_ioa_job()
9241 rc = ipr_cmd->job_step_failed(ipr_cmd); in ipr_reset_ioa_job()
9246 ipr_reinit_ipr_cmnd(ipr_cmd); in ipr_reset_ioa_job()
9247 ipr_cmd->job_step_failed = ipr_reset_cmd_failed; in ipr_reset_ioa_job()
9248 rc = ipr_cmd->job_step(ipr_cmd); in ipr_reset_ioa_job()
9270 struct ipr_cmnd *ipr_cmd; in _ipr_initiate_ioa_reset() local
9286 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in _ipr_initiate_ioa_reset()
9287 ioa_cfg->reset_cmd = ipr_cmd; in _ipr_initiate_ioa_reset()
9288 ipr_cmd->job_step = job_step; in _ipr_initiate_ioa_reset()
9289 ipr_cmd->u.shutdown_type = shutdown_type; in _ipr_initiate_ioa_reset()
9291 ipr_reset_ioa_job(ipr_cmd); in _ipr_initiate_ioa_reset()
9362 static int ipr_reset_freeze(struct ipr_cmnd *ipr_cmd) in ipr_reset_freeze() argument
9364 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_freeze()
9374 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_freeze()
9375 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_freeze()
9653 struct ipr_cmnd *ipr_cmd; in ipr_alloc_cmd_blks() local
9708 ipr_cmd = dma_pool_zalloc(ioa_cfg->ipr_cmd_pool, in ipr_alloc_cmd_blks()
9711 if (!ipr_cmd) { in ipr_alloc_cmd_blks()
9716 ioa_cfg->ipr_cmnd_list[i] = ipr_cmd; in ipr_alloc_cmd_blks()
9719 ioarcb = &ipr_cmd->ioarcb; in ipr_alloc_cmd_blks()
9720 ipr_cmd->dma_addr = dma_addr; in ipr_alloc_cmd_blks()
9740 ipr_cmd->cmd_index = i; in ipr_alloc_cmd_blks()
9741 ipr_cmd->ioa_cfg = ioa_cfg; in ipr_alloc_cmd_blks()
9742 ipr_cmd->sense_buffer_dma = dma_addr + in ipr_alloc_cmd_blks()
9745 ipr_cmd->ioarcb.cmd_pkt.hrrq_id = hrrq_id; in ipr_alloc_cmd_blks()
9746 ipr_cmd->hrrq = &ioa_cfg->hrrq[hrrq_id]; in ipr_alloc_cmd_blks()
9747 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_alloc_cmd_blks()
10816 static void ipr_halt_done(struct ipr_cmnd *ipr_cmd) in ipr_halt_done() argument
10818 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_halt_done()
10832 struct ipr_cmnd *ipr_cmd; in ipr_halt() local
10849 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_halt()
10850 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_halt()
10851 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_halt()
10852 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_halt()
10853 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_SHUTDOWN_PREPARE_FOR_NORMAL; in ipr_halt()
10855 ipr_do_req(ipr_cmd, ipr_halt_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_halt()