Lines Matching refs:ipr_cmd

600 static void ipr_trc_hook(struct ipr_cmnd *ipr_cmd,  in ipr_trc_hook()  argument
604 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_trc_hook()
610 trace_entry->op_code = ipr_cmd->ioarcb.cmd_pkt.cdb[0]; in ipr_trc_hook()
612 if (ipr_cmd->ioa_cfg->sis64) in ipr_trc_hook()
613 trace_entry->ata_op_code = ipr_cmd->i.ata_ioadl.regs.command; in ipr_trc_hook()
615 trace_entry->ata_op_code = ipr_cmd->ioarcb.u.add_data.u.regs.command; in ipr_trc_hook()
616 trace_entry->cmd_index = ipr_cmd->cmd_index & 0xff; in ipr_trc_hook()
617 trace_entry->res_handle = ipr_cmd->ioarcb.res_handle; in ipr_trc_hook()
622 #define ipr_trc_hook(ipr_cmd, type, add_data) do { } while (0) argument
632 static void ipr_lock_and_done(struct ipr_cmnd *ipr_cmd) in ipr_lock_and_done() argument
635 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_lock_and_done()
638 ipr_cmd->done(ipr_cmd); in ipr_lock_and_done()
649 static void ipr_reinit_ipr_cmnd(struct ipr_cmnd *ipr_cmd) in ipr_reinit_ipr_cmnd() argument
651 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_reinit_ipr_cmnd()
652 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_reinit_ipr_cmnd()
653 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64; in ipr_reinit_ipr_cmnd()
654 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_reinit_ipr_cmnd()
665 if (ipr_cmd->ioa_cfg->sis64) { in ipr_reinit_ipr_cmnd()
678 ipr_cmd->scsi_cmd = NULL; in ipr_reinit_ipr_cmnd()
679 ipr_cmd->qc = NULL; in ipr_reinit_ipr_cmnd()
680 ipr_cmd->sense_buffer[0] = 0; in ipr_reinit_ipr_cmnd()
681 ipr_cmd->dma_use_sg = 0; in ipr_reinit_ipr_cmnd()
691 static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd, in ipr_init_ipr_cmnd() argument
694 ipr_reinit_ipr_cmnd(ipr_cmd); in ipr_init_ipr_cmnd()
695 ipr_cmd->u.scratch = 0; in ipr_init_ipr_cmnd()
696 ipr_cmd->sibling = NULL; in ipr_init_ipr_cmnd()
697 ipr_cmd->eh_comp = NULL; in ipr_init_ipr_cmnd()
698 ipr_cmd->fast_done = fast_done; in ipr_init_ipr_cmnd()
699 timer_setup(&ipr_cmd->timer, NULL, 0); in ipr_init_ipr_cmnd()
712 struct ipr_cmnd *ipr_cmd = NULL; in __ipr_get_free_ipr_cmnd() local
715 ipr_cmd = list_entry(hrrq->hrrq_free_q.next, in __ipr_get_free_ipr_cmnd()
717 list_del(&ipr_cmd->queue); in __ipr_get_free_ipr_cmnd()
721 return ipr_cmd; in __ipr_get_free_ipr_cmnd()
734 struct ipr_cmnd *ipr_cmd = in ipr_get_free_ipr_cmnd() local
736 ipr_init_ipr_cmnd(ipr_cmd, ipr_lock_and_done); in ipr_get_free_ipr_cmnd()
737 return ipr_cmd; in ipr_get_free_ipr_cmnd()
833 static void __ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd) in __ipr_sata_eh_done() argument
835 struct ata_queued_cmd *qc = ipr_cmd->qc; in __ipr_sata_eh_done()
841 if (ipr_cmd->eh_comp) in __ipr_sata_eh_done()
842 complete(ipr_cmd->eh_comp); in __ipr_sata_eh_done()
843 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in __ipr_sata_eh_done()
856 static void ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd) in ipr_sata_eh_done() argument
858 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_sata_eh_done()
862 __ipr_sata_eh_done(ipr_cmd); in ipr_sata_eh_done()
876 static void __ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd) in __ipr_scsi_eh_done() argument
878 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in __ipr_scsi_eh_done()
882 scsi_dma_unmap(ipr_cmd->scsi_cmd); in __ipr_scsi_eh_done()
884 if (ipr_cmd->eh_comp) in __ipr_scsi_eh_done()
885 complete(ipr_cmd->eh_comp); in __ipr_scsi_eh_done()
886 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in __ipr_scsi_eh_done()
899 static void ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd) in ipr_scsi_eh_done() argument
902 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_scsi_eh_done()
905 __ipr_scsi_eh_done(ipr_cmd); in ipr_scsi_eh_done()
920 struct ipr_cmnd *ipr_cmd, *temp; in ipr_fail_all_ops() local
926 list_for_each_entry_safe(ipr_cmd, in ipr_fail_all_ops()
928 list_del(&ipr_cmd->queue); in ipr_fail_all_ops()
930 ipr_cmd->s.ioasa.hdr.ioasc = in ipr_fail_all_ops()
932 ipr_cmd->s.ioasa.hdr.ilid = in ipr_fail_all_ops()
935 if (ipr_cmd->scsi_cmd) in ipr_fail_all_ops()
936 ipr_cmd->done = __ipr_scsi_eh_done; in ipr_fail_all_ops()
937 else if (ipr_cmd->qc) in ipr_fail_all_ops()
938 ipr_cmd->done = __ipr_sata_eh_done; in ipr_fail_all_ops()
940 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, in ipr_fail_all_ops()
942 del_timer(&ipr_cmd->timer); in ipr_fail_all_ops()
943 ipr_cmd->done(ipr_cmd); in ipr_fail_all_ops()
961 static void ipr_send_command(struct ipr_cmnd *ipr_cmd) in ipr_send_command() argument
963 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_send_command()
964 dma_addr_t send_dma_addr = ipr_cmd->dma_addr; in ipr_send_command()
972 if (ipr_cmd->dma_use_sg * sizeof(struct ipr_ioadl64_desc) > 128 ) in ipr_send_command()
992 static void ipr_do_req(struct ipr_cmnd *ipr_cmd, in ipr_do_req() argument
996 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_do_req()
998 ipr_cmd->done = done; in ipr_do_req()
1000 ipr_cmd->timer.expires = jiffies + timeout; in ipr_do_req()
1001 ipr_cmd->timer.function = timeout_func; in ipr_do_req()
1003 add_timer(&ipr_cmd->timer); in ipr_do_req()
1005 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, 0); in ipr_do_req()
1007 ipr_send_command(ipr_cmd); in ipr_do_req()
1020 static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd) in ipr_internal_cmd_done() argument
1022 if (ipr_cmd->sibling) in ipr_internal_cmd_done()
1023 ipr_cmd->sibling = NULL; in ipr_internal_cmd_done()
1025 complete(&ipr_cmd->completion); in ipr_internal_cmd_done()
1041 static void ipr_init_ioadl(struct ipr_cmnd *ipr_cmd, dma_addr_t dma_addr, in ipr_init_ioadl() argument
1044 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_init_ioadl()
1045 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_init_ioadl()
1047 ipr_cmd->dma_use_sg = 1; in ipr_init_ioadl()
1049 if (ipr_cmd->ioa_cfg->sis64) { in ipr_init_ioadl()
1054 ipr_cmd->ioarcb.ioadl_len = in ipr_init_ioadl()
1056 ipr_cmd->ioarcb.data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1062 ipr_cmd->ioarcb.read_ioadl_len = in ipr_init_ioadl()
1064 ipr_cmd->ioarcb.read_data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1066 ipr_cmd->ioarcb.ioadl_len = in ipr_init_ioadl()
1068 ipr_cmd->ioarcb.data_transfer_length = cpu_to_be32(len); in ipr_init_ioadl()
1082 static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd, in ipr_send_blocking_cmd() argument
1086 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_send_blocking_cmd()
1088 init_completion(&ipr_cmd->completion); in ipr_send_blocking_cmd()
1089 ipr_do_req(ipr_cmd, ipr_internal_cmd_done, timeout_func, timeout); in ipr_send_blocking_cmd()
1092 wait_for_completion(&ipr_cmd->completion); in ipr_send_blocking_cmd()
1125 struct ipr_cmnd *ipr_cmd; in ipr_send_hcam() local
1129 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_send_hcam()
1130 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_send_hcam()
1133 ipr_cmd->u.hostrcb = hostrcb; in ipr_send_hcam()
1134 ioarcb = &ipr_cmd->ioarcb; in ipr_send_hcam()
1143 ipr_init_ioadl(ipr_cmd, hostrcb->hostrcb_dma, in ipr_send_hcam()
1147 ipr_cmd->done = ipr_process_ccn; in ipr_send_hcam()
1149 ipr_cmd->done = ipr_process_error; in ipr_send_hcam()
1151 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_IOA_RES_ADDR); in ipr_send_hcam()
1153 ipr_send_command(ipr_cmd); in ipr_send_hcam()
1512 static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd) in ipr_process_ccn() argument
1514 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_process_ccn()
1515 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; in ipr_process_ccn()
1516 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_ccn()
1519 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_process_ccn()
2650 static void ipr_process_error(struct ipr_cmnd *ipr_cmd) in ipr_process_error() argument
2652 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_process_error()
2653 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; in ipr_process_error()
2654 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_error()
2663 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_process_error()
2694 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_timeout() local
2696 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_timeout()
2708 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) in ipr_timeout()
2727 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_oper_timeout() local
2729 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_oper_timeout()
2741 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) { in ipr_oper_timeout()
3963 static void ipr_build_ucode_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ucode_ioadl64() argument
3966 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ucode_ioadl64()
3967 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ucode_ioadl64()
3971 ipr_cmd->dma_use_sg = sglist->num_dma_sg; in ipr_build_ucode_ioadl64()
3976 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ucode_ioadl64()
3977 for (i = 0; i < ipr_cmd->dma_use_sg; i++) { in ipr_build_ucode_ioadl64()
3994 static void ipr_build_ucode_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ucode_ioadl() argument
3997 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ucode_ioadl()
3998 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ucode_ioadl()
4002 ipr_cmd->dma_use_sg = sglist->num_dma_sg; in ipr_build_ucode_ioadl()
4007 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ucode_ioadl()
4009 for (i = 0; i < ipr_cmd->dma_use_sg; i++) { in ipr_build_ucode_ioadl()
5065 static int ipr_match_lun(struct ipr_cmnd *ipr_cmd, void *device) in ipr_match_lun() argument
5067 if (ipr_cmd->scsi_cmd && ipr_cmd->scsi_cmd->device == device) in ipr_match_lun()
5079 static bool ipr_cmnd_is_free(struct ipr_cmnd *ipr_cmd) in ipr_cmnd_is_free() argument
5083 list_for_each_entry(loop_cmd, &ipr_cmd->hrrq->hrrq_free_q, queue) { in ipr_cmnd_is_free()
5084 if (loop_cmd == ipr_cmd) in ipr_cmnd_is_free()
5099 static int ipr_match_res(struct ipr_cmnd *ipr_cmd, void *resource) in ipr_match_res() argument
5103 if (res && ipr_cmd->ioarcb.res_handle == res->res_handle) in ipr_match_res()
5120 struct ipr_cmnd *ipr_cmd; in ipr_wait_for_ops() local
5134 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in ipr_wait_for_ops()
5135 if (!ipr_cmnd_is_free(ipr_cmd)) { in ipr_wait_for_ops()
5136 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
5137 ipr_cmd->eh_comp = &comp; in ipr_wait_for_ops()
5154 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in ipr_wait_for_ops()
5155 if (!ipr_cmnd_is_free(ipr_cmd)) { in ipr_wait_for_ops()
5156 if (match(ipr_cmd, device)) { in ipr_wait_for_ops()
5157 ipr_cmd->eh_comp = NULL; in ipr_wait_for_ops()
5229 struct ipr_cmnd *ipr_cmd; in ipr_device_reset() local
5236 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_device_reset()
5237 ioarcb = &ipr_cmd->ioarcb; in ipr_device_reset()
5240 if (ipr_cmd->ioa_cfg->sis64) { in ipr_device_reset()
5241 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_device_reset()
5255 ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_device_reset()
5256 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_device_reset()
5257 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_device_reset()
5259 if (ipr_cmd->ioa_cfg->sis64) in ipr_device_reset()
5260 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_device_reset()
5263 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_device_reset()
5332 struct ipr_cmnd *ipr_cmd; in __ipr_eh_dev_reset() local
5356 ipr_cmd = ioa_cfg->ipr_cmnd_list[i]; in __ipr_eh_dev_reset()
5358 if (ipr_cmd->ioarcb.res_handle == res->res_handle) { in __ipr_eh_dev_reset()
5359 if (!ipr_cmd->qc) in __ipr_eh_dev_reset()
5361 if (ipr_cmnd_is_free(ipr_cmd)) in __ipr_eh_dev_reset()
5364 ipr_cmd->done = ipr_sata_eh_done; in __ipr_eh_dev_reset()
5365 if (!(ipr_cmd->qc->flags & ATA_QCFLAG_FAILED)) { in __ipr_eh_dev_reset()
5366 ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT; in __ipr_eh_dev_reset()
5367 ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED; in __ipr_eh_dev_reset()
5425 static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_bus_reset_done() argument
5427 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_bus_reset_done()
5433 if (res->res_handle == ipr_cmd->ioarcb.res_handle) { in ipr_bus_reset_done()
5443 if (ipr_cmd->sibling->sibling) in ipr_bus_reset_done()
5444 ipr_cmd->sibling->sibling = NULL; in ipr_bus_reset_done()
5446 ipr_cmd->sibling->done(ipr_cmd->sibling); in ipr_bus_reset_done()
5448 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_bus_reset_done()
5465 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_abort_timeout() local
5467 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_abort_timeout()
5473 if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) { in ipr_abort_timeout()
5478 sdev_printk(KERN_ERR, ipr_cmd->u.sdev, "Abort timed out. Resetting bus.\n"); in ipr_abort_timeout()
5480 ipr_cmd->sibling = reset_cmd; in ipr_abort_timeout()
5481 reset_cmd->sibling = ipr_cmd; in ipr_abort_timeout()
5482 reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle; in ipr_abort_timeout()
5504 struct ipr_cmnd *ipr_cmd; in ipr_cancel_op() local
5552 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_cancel_op()
5553 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_cancel_op()
5554 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_cancel_op()
5557 ipr_cmd->u.sdev = scsi_cmd->device; in ipr_cancel_op()
5561 ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_CANCEL_ALL_TIMEOUT); in ipr_cancel_op()
5562 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_cancel_op()
5573 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_cancel_op()
5730 struct ipr_cmnd *ipr_cmd; in ipr_process_hrrq() local
5753 ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index]; in ipr_process_hrrq()
5754 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_process_hrrq()
5756 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc); in ipr_process_hrrq()
5758 list_move_tail(&ipr_cmd->queue, doneq); in ipr_process_hrrq()
5778 struct ipr_cmnd *ipr_cmd, *temp; in ipr_iopoll() local
5793 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_iopoll()
5794 list_del(&ipr_cmd->queue); in ipr_iopoll()
5795 del_timer(&ipr_cmd->timer); in ipr_iopoll()
5796 ipr_cmd->fast_done(ipr_cmd); in ipr_iopoll()
5818 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr() local
5862 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr()
5863 list_del(&ipr_cmd->queue); in ipr_isr()
5864 del_timer(&ipr_cmd->timer); in ipr_isr()
5865 ipr_cmd->fast_done(ipr_cmd); in ipr_isr()
5883 struct ipr_cmnd *ipr_cmd, *temp; in ipr_isr_mhrrq() local
5912 list_for_each_entry_safe(ipr_cmd, temp, &doneq, queue) { in ipr_isr_mhrrq()
5913 list_del(&ipr_cmd->queue); in ipr_isr_mhrrq()
5914 del_timer(&ipr_cmd->timer); in ipr_isr_mhrrq()
5915 ipr_cmd->fast_done(ipr_cmd); in ipr_isr_mhrrq()
5929 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl64() argument
5935 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl64()
5936 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl64()
5937 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64; in ipr_build_ioadl64()
5950 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl64()
5954 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl64()
5962 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl64()
5981 struct ipr_cmnd *ipr_cmd) in ipr_build_ioadl() argument
5987 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_build_ioadl()
5988 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioadl()
5989 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ioadl()
6001 ipr_cmd->dma_use_sg = nseg; in ipr_build_ioadl()
6008 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
6013 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ioadl()
6016 if (ipr_cmd->dma_use_sg <= ARRAY_SIZE(ioarcb->u.add_data.u.ioadl)) { in ipr_build_ioadl()
6018 ioarcb->write_ioadl_addr = cpu_to_be32((ipr_cmd->dma_addr) + in ipr_build_ioadl()
6023 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) { in ipr_build_ioadl()
6043 static void __ipr_erp_done(struct ipr_cmnd *ipr_cmd) in __ipr_erp_done() argument
6045 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in __ipr_erp_done()
6047 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in __ipr_erp_done()
6054 memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer, in __ipr_erp_done()
6063 scsi_dma_unmap(ipr_cmd->scsi_cmd); in __ipr_erp_done()
6065 if (ipr_cmd->eh_comp) in __ipr_erp_done()
6066 complete(ipr_cmd->eh_comp); in __ipr_erp_done()
6067 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in __ipr_erp_done()
6080 static void ipr_erp_done(struct ipr_cmnd *ipr_cmd) in ipr_erp_done() argument
6082 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_erp_done()
6086 __ipr_erp_done(ipr_cmd); in ipr_erp_done()
6097 static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) in ipr_reinit_ipr_cmnd_for_erp() argument
6099 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_reinit_ipr_cmnd_for_erp()
6100 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_reinit_ipr_cmnd_for_erp()
6101 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_reinit_ipr_cmnd_for_erp()
6111 if (ipr_cmd->ioa_cfg->sis64) in ipr_reinit_ipr_cmnd_for_erp()
6131 static void __ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) in __ipr_erp_request_sense() argument
6133 struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in __ipr_erp_request_sense()
6134 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in __ipr_erp_request_sense()
6137 __ipr_erp_done(ipr_cmd); in __ipr_erp_request_sense()
6141 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in __ipr_erp_request_sense()
6150 ipr_init_ioadl(ipr_cmd, ipr_cmd->sense_buffer_dma, in __ipr_erp_request_sense()
6153 ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout, in __ipr_erp_request_sense()
6167 static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) in ipr_erp_request_sense() argument
6169 struct ipr_hrr_queue *hrrq = ipr_cmd->hrrq; in ipr_erp_request_sense()
6173 __ipr_erp_request_sense(ipr_cmd); in ipr_erp_request_sense()
6189 static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd) in ipr_erp_cancel_all() argument
6191 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_cancel_all()
6197 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); in ipr_erp_cancel_all()
6200 __ipr_erp_request_sense(ipr_cmd); in ipr_erp_cancel_all()
6204 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_erp_cancel_all()
6208 ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout, in ipr_erp_cancel_all()
6226 struct ipr_cmnd *ipr_cmd, struct ipr_resource_entry *res) in ipr_dump_ioasa() argument
6231 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_dump_ioasa()
6288 static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd) in ipr_gen_sense() argument
6291 u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer; in ipr_gen_sense()
6292 struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata; in ipr_gen_sense()
6293 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_gen_sense()
6301 ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION; in ipr_gen_sense()
6381 static int ipr_get_autosense(struct ipr_cmnd *ipr_cmd) in ipr_get_autosense() argument
6383 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa; in ipr_get_autosense()
6384 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64; in ipr_get_autosense()
6389 if (ipr_cmd->ioa_cfg->sis64) in ipr_get_autosense()
6390 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa64->auto_sense.data, in ipr_get_autosense()
6394 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data, in ipr_get_autosense()
6412 struct ipr_cmnd *ipr_cmd) in ipr_erp_start() argument
6414 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_erp_start()
6416 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_erp_start()
6420 __ipr_scsi_eh_done(ipr_cmd); in ipr_erp_start()
6425 ipr_gen_sense(ipr_cmd); in ipr_erp_start()
6427 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_erp_start()
6474 if (!ipr_get_autosense(ipr_cmd)) { in ipr_erp_start()
6476 ipr_erp_cancel_all(ipr_cmd); in ipr_erp_start()
6501 scsi_dma_unmap(ipr_cmd->scsi_cmd); in ipr_erp_start()
6503 if (ipr_cmd->eh_comp) in ipr_erp_start()
6504 complete(ipr_cmd->eh_comp); in ipr_erp_start()
6505 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_erp_start()
6518 static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd) in ipr_scsi_done() argument
6520 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_scsi_done()
6521 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; in ipr_scsi_done()
6522 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_scsi_done()
6525 scsi_set_resid(scsi_cmd, be32_to_cpu(ipr_cmd->s.ioasa.hdr.residual_data_len)); in ipr_scsi_done()
6530 spin_lock_irqsave(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6532 if (ipr_cmd->eh_comp) in ipr_scsi_done()
6533 complete(ipr_cmd->eh_comp); in ipr_scsi_done()
6534 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_scsi_done()
6535 spin_unlock_irqrestore(ipr_cmd->hrrq->lock, lock_flags); in ipr_scsi_done()
6538 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6539 ipr_erp_start(ioa_cfg, ipr_cmd); in ipr_scsi_done()
6540 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_scsi_done()
6563 struct ipr_cmnd *ipr_cmd; in ipr_queuecommand() local
6604 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_queuecommand()
6605 if (ipr_cmd == NULL) { in ipr_queuecommand()
6611 ipr_init_ipr_cmnd(ipr_cmd, ipr_scsi_done); in ipr_queuecommand()
6612 ioarcb = &ipr_cmd->ioarcb; in ipr_queuecommand()
6615 ipr_cmd->scsi_cmd = scsi_cmd; in ipr_queuecommand()
6616 ipr_cmd->done = ipr_scsi_eh_done; in ipr_queuecommand()
6650 rc = ipr_build_ioadl64(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6652 rc = ipr_build_ioadl(ioa_cfg, ipr_cmd); in ipr_queuecommand()
6656 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6664 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_free_q); in ipr_queuecommand()
6675 list_add_tail(&ipr_cmd->queue, &hrrq->hrrq_pending_q); in ipr_queuecommand()
6676 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_queuecommand()
6677 ipr_send_command(ipr_cmd); in ipr_queuecommand()
6814 struct ipr_cmnd *ipr_cmd; in ipr_ata_post_internal() local
6827 list_for_each_entry(ipr_cmd, &hrrq->hrrq_pending_q, queue) { in ipr_ata_post_internal()
6828 if (ipr_cmd->qc == qc) { in ipr_ata_post_internal()
6874 static void ipr_sata_done(struct ipr_cmnd *ipr_cmd) in ipr_sata_done() argument
6876 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_sata_done()
6877 struct ata_queued_cmd *qc = ipr_cmd->qc; in ipr_sata_done()
6880 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_sata_done()
6882 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6883 if (ipr_cmd->ioa_cfg->sis64) in ipr_sata_done()
6884 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata, in ipr_sata_done()
6887 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata, in ipr_sata_done()
6889 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); in ipr_sata_done()
6891 if (be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc_specific) & IPR_ATA_DEVICE_WAS_RESET) in ipr_sata_done()
6898 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_sata_done()
6899 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_sata_done()
6909 static void ipr_build_ata_ioadl64(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl64() argument
6913 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl64()
6914 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ata_ioadl.ioadl64; in ipr_build_ata_ioadl64()
6919 dma_addr_t dma_addr = ipr_cmd->dma_addr; in ipr_build_ata_ioadl64()
6932 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl64()
6955 static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd, in ipr_build_ata_ioadl() argument
6959 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ata_ioadl()
6960 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl; in ipr_build_ata_ioadl()
6974 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
6979 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); in ipr_build_ata_ioadl()
7006 struct ipr_cmnd *ipr_cmd; in ipr_qc_defer() local
7025 ipr_cmd = __ipr_get_free_ipr_cmnd(hrrq); in ipr_qc_defer()
7026 if (ipr_cmd == NULL) { in ipr_qc_defer()
7031 qc->lldd_task = ipr_cmd; in ipr_qc_defer()
7049 struct ipr_cmnd *ipr_cmd; in ipr_qc_issue() local
7056 ipr_cmd = qc->lldd_task; in ipr_qc_issue()
7057 if (ipr_cmd == NULL) in ipr_qc_issue()
7061 spin_lock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7062 if (unlikely(!ipr_cmd->hrrq->allow_cmds || in ipr_qc_issue()
7063 ipr_cmd->hrrq->ioa_is_dead)) { in ipr_qc_issue()
7064 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_qc_issue()
7065 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7069 ipr_init_ipr_cmnd(ipr_cmd, ipr_lock_and_done); in ipr_qc_issue()
7070 ioarcb = &ipr_cmd->ioarcb; in ipr_qc_issue()
7073 regs = &ipr_cmd->i.ata_ioadl.regs; in ipr_qc_issue()
7081 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_qc_issue()
7082 ipr_cmd->qc = qc; in ipr_qc_issue()
7083 ipr_cmd->done = ipr_sata_done; in ipr_qc_issue()
7084 ipr_cmd->ioarcb.res_handle = res->res_handle; in ipr_qc_issue()
7088 ipr_cmd->dma_use_sg = qc->n_elem; in ipr_qc_issue()
7091 ipr_build_ata_ioadl64(ipr_cmd, qc); in ipr_qc_issue()
7093 ipr_build_ata_ioadl(ipr_cmd, qc); in ipr_qc_issue()
7098 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res)); in ipr_qc_issue()
7121 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7125 ipr_send_command(ipr_cmd); in ipr_qc_issue()
7126 spin_unlock(&ipr_cmd->hrrq->_lock); in ipr_qc_issue()
7229 static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_bringdown_done() argument
7231 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_bringdown_done()
7250 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_bringdown_done()
7268 static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_ioa_reset_done() argument
7270 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioa_reset_done()
7309 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_ioa_reset_done()
7346 static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd) in ipr_set_supported_devs() argument
7348 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_set_supported_devs()
7350 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_set_supported_devs()
7351 struct ipr_resource_entry *res = ipr_cmd->u.res; in ipr_set_supported_devs()
7353 ipr_cmd->job_step = ipr_ioa_reset_done; in ipr_set_supported_devs()
7359 ipr_cmd->u.res = res; in ipr_set_supported_devs()
7371 ipr_init_ioadl(ipr_cmd, in ipr_set_supported_devs()
7377 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_set_supported_devs()
7381 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_set_supported_devs()
7547 static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_select() argument
7551 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_select()
7560 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_WRITE_LAST); in ipr_build_mode_select()
7573 static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page28() argument
7575 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page28()
7586 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page28()
7590 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_ioafp_mode_select_page28()
7591 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_ioafp_mode_select_page28()
7593 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page28()
7610 static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd, in ipr_build_mode_sense() argument
7614 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_mode_sense()
7622 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_build_mode_sense()
7634 static int ipr_reset_cmd_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_cmd_failed() argument
7636 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cmd_failed()
7637 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_cmd_failed()
7641 ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc); in ipr_reset_cmd_failed()
7644 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cmd_failed()
7658 static int ipr_reset_mode_sense_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_failed() argument
7660 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_mode_sense_failed()
7661 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_failed()
7664 ipr_cmd->job_step = ipr_set_supported_devs; in ipr_reset_mode_sense_failed()
7665 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, in ipr_reset_mode_sense_failed()
7670 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_failed()
7683 static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page28() argument
7685 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page28()
7688 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page28()
7693 ipr_cmd->job_step = ipr_ioafp_mode_select_page28; in ipr_ioafp_mode_sense_page28()
7694 ipr_cmd->job_step_failed = ipr_reset_mode_sense_failed; in ipr_ioafp_mode_sense_page28()
7696 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page28()
7711 static int ipr_ioafp_mode_select_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_select_page24() argument
7713 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_select_page24()
7728 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, in ipr_ioafp_mode_select_page24()
7732 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_ioafp_mode_select_page24()
7733 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_select_page24()
7749 static int ipr_reset_mode_sense_page24_failed(struct ipr_cmnd *ipr_cmd) in ipr_reset_mode_sense_page24_failed() argument
7751 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_mode_sense_page24_failed()
7754 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_reset_mode_sense_page24_failed()
7758 return ipr_reset_cmd_failed(ipr_cmd); in ipr_reset_mode_sense_page24_failed()
7771 static int ipr_ioafp_mode_sense_page24(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_mode_sense_page24() argument
7773 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_mode_sense_page24()
7776 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), in ipr_ioafp_mode_sense_page24()
7781 ipr_cmd->job_step = ipr_ioafp_mode_select_page24; in ipr_ioafp_mode_sense_page24()
7782 ipr_cmd->job_step_failed = ipr_reset_mode_sense_page24_failed; in ipr_ioafp_mode_sense_page24()
7784 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_mode_sense_page24()
7802 static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd) in ipr_init_res_table() argument
7804 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_init_res_table()
7875 ipr_cmd->job_step = ipr_ioafp_mode_sense_page24; in ipr_init_res_table()
7877 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; in ipr_init_res_table()
7893 static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_query_ioa_cfg() argument
7895 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_query_ioa_cfg()
7896 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_query_ioa_cfg()
7914 ipr_init_ioadl(ipr_cmd, ioa_cfg->cfg_table_dma, ioa_cfg->cfg_table_size, in ipr_ioafp_query_ioa_cfg()
7917 ipr_cmd->job_step = ipr_init_res_table; in ipr_ioafp_query_ioa_cfg()
7919 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_query_ioa_cfg()
7925 static int ipr_ioa_service_action_failed(struct ipr_cmnd *ipr_cmd) in ipr_ioa_service_action_failed() argument
7927 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_ioa_service_action_failed()
7932 return ipr_reset_cmd_failed(ipr_cmd); in ipr_ioa_service_action_failed()
7935 static void ipr_build_ioa_service_action(struct ipr_cmnd *ipr_cmd, in ipr_build_ioa_service_action() argument
7938 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_build_ioa_service_action()
7953 static int ipr_ioafp_set_caching_parameters(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_set_caching_parameters() argument
7955 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_set_caching_parameters()
7956 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_set_caching_parameters()
7961 ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg; in ipr_ioafp_set_caching_parameters()
7964 ipr_build_ioa_service_action(ipr_cmd, in ipr_ioafp_set_caching_parameters()
7970 ipr_cmd->job_step_failed = ipr_ioa_service_action_failed; in ipr_ioafp_set_caching_parameters()
7971 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_set_caching_parameters()
7991 static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page, in ipr_ioafp_inquiry() argument
7994 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_inquiry()
8005 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST); in ipr_ioafp_inquiry()
8007 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); in ipr_ioafp_inquiry()
8042 static int ipr_ioafp_pageC4_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_pageC4_inquiry() argument
8044 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_pageC4_inquiry()
8049 ipr_cmd->job_step = ipr_ioafp_set_caching_parameters; in ipr_ioafp_pageC4_inquiry()
8053 ipr_ioafp_inquiry(ipr_cmd, 1, 0xC4, in ipr_ioafp_pageC4_inquiry()
8075 static int ipr_ioafp_cap_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_cap_inquiry() argument
8077 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_cap_inquiry()
8082 ipr_cmd->job_step = ipr_ioafp_pageC4_inquiry; in ipr_ioafp_cap_inquiry()
8086 ipr_ioafp_inquiry(ipr_cmd, 1, 0xD0, in ipr_ioafp_cap_inquiry()
8106 static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page3_inquiry() argument
8108 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page3_inquiry()
8112 ipr_cmd->job_step = ipr_ioafp_cap_inquiry; in ipr_ioafp_page3_inquiry()
8114 ipr_ioafp_inquiry(ipr_cmd, 1, 3, in ipr_ioafp_page3_inquiry()
8132 static int ipr_ioafp_page0_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_page0_inquiry() argument
8134 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_page0_inquiry()
8151 list_add_tail(&ipr_cmd->queue, in ipr_ioafp_page0_inquiry()
8157 ipr_cmd->job_step = ipr_ioafp_page3_inquiry; in ipr_ioafp_page0_inquiry()
8159 ipr_ioafp_inquiry(ipr_cmd, 1, 0, in ipr_ioafp_page0_inquiry()
8176 static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_std_inquiry() argument
8178 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_std_inquiry()
8181 ipr_cmd->job_step = ipr_ioafp_page0_inquiry; in ipr_ioafp_std_inquiry()
8183 ipr_ioafp_inquiry(ipr_cmd, 0, 0, in ipr_ioafp_std_inquiry()
8201 static int ipr_ioafp_identify_hrrq(struct ipr_cmnd *ipr_cmd) in ipr_ioafp_identify_hrrq() argument
8203 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_ioafp_identify_hrrq()
8204 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; in ipr_ioafp_identify_hrrq()
8208 ipr_cmd->job_step = ipr_ioafp_std_inquiry; in ipr_ioafp_identify_hrrq()
8259 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_ioafp_identify_hrrq()
8263 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_ioafp_identify_hrrq()
8288 struct ipr_cmnd *ipr_cmd = from_timer(ipr_cmd, t, timer); in ipr_reset_timer_done() local
8289 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_timer_done()
8294 if (ioa_cfg->reset_cmd == ipr_cmd) { in ipr_reset_timer_done()
8295 list_del(&ipr_cmd->queue); in ipr_reset_timer_done()
8296 ipr_cmd->done(ipr_cmd); in ipr_reset_timer_done()
8316 static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd, in ipr_reset_start_timer() argument
8321 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_start_timer()
8322 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_start_timer()
8324 ipr_cmd->timer.expires = jiffies + timeout; in ipr_reset_start_timer()
8325 ipr_cmd->timer.function = ipr_reset_timer_done; in ipr_reset_start_timer()
8326 add_timer(&ipr_cmd->timer); in ipr_reset_start_timer()
8370 static int ipr_reset_next_stage(struct ipr_cmnd *ipr_cmd) in ipr_reset_next_stage() argument
8375 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_next_stage()
8396 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8400 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_next_stage()
8409 ipr_cmd->timer.expires = jiffies + stage_time * HZ; in ipr_reset_next_stage()
8410 ipr_cmd->timer.function = ipr_oper_timeout; in ipr_reset_next_stage()
8411 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_next_stage()
8412 add_timer(&ipr_cmd->timer); in ipr_reset_next_stage()
8414 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_next_stage()
8429 static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_enable_ioa() argument
8431 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_enable_ioa()
8437 ipr_cmd->job_step = ipr_ioafp_identify_hrrq; in ipr_reset_enable_ioa()
8475 ipr_cmd->job_step = ipr_reset_next_stage; in ipr_reset_enable_ioa()
8479 ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ); in ipr_reset_enable_ioa()
8480 ipr_cmd->timer.function = ipr_oper_timeout; in ipr_reset_enable_ioa()
8481 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_enable_ioa()
8482 add_timer(&ipr_cmd->timer); in ipr_reset_enable_ioa()
8483 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_enable_ioa()
8499 static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_for_dump() argument
8501 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_for_dump()
8509 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_wait_for_dump()
8605 static int ipr_reset_get_unit_check_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_get_unit_check_job() argument
8607 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_get_unit_check_job()
8612 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_get_unit_check_job()
8613 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_get_unit_check_job()
8619 static int ipr_dump_mailbox_wait(struct ipr_cmnd *ipr_cmd) in ipr_dump_mailbox_wait() argument
8621 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_dump_mailbox_wait()
8628 if (!ioa_cfg->sis64 || !ipr_cmd->u.time_left || in ipr_dump_mailbox_wait()
8632 if (!ipr_cmd->u.time_left) in ipr_dump_mailbox_wait()
8639 ipr_reset_start_timer(ipr_cmd, IPR_SIS64_DUMP_TIMEOUT); in ipr_dump_mailbox_wait()
8641 ipr_reset_start_timer(ipr_cmd, IPR_SIS32_DUMP_TIMEOUT); in ipr_dump_mailbox_wait()
8642 ipr_cmd->job_step = ipr_reset_wait_for_dump; in ipr_dump_mailbox_wait()
8646 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_dump_mailbox_wait()
8647 ipr_reset_start_timer(ipr_cmd, in ipr_dump_mailbox_wait()
8666 static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd) in ipr_reset_restore_cfg_space() argument
8668 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_restore_cfg_space()
8676 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_restore_cfg_space()
8690 ipr_cmd->job_step = ipr_reset_get_unit_check_job; in ipr_reset_restore_cfg_space()
8691 ipr_reset_start_timer(ipr_cmd, IPR_DUMP_DELAY_TIMEOUT); in ipr_reset_restore_cfg_space()
8696 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_restore_cfg_space()
8697 ipr_reset_start_timer(ipr_cmd, 0); in ipr_reset_restore_cfg_space()
8703 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_restore_cfg_space()
8705 ipr_cmd->job_step = ipr_dump_mailbox_wait; in ipr_reset_restore_cfg_space()
8706 ipr_cmd->u.time_left = IPR_WAIT_FOR_MAILBOX; in ipr_reset_restore_cfg_space()
8708 ipr_cmd->job_step = ipr_reset_enable_ioa; in ipr_reset_restore_cfg_space()
8724 static int ipr_reset_bist_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_bist_done() argument
8726 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_bist_done()
8732 ipr_cmd->job_step = ipr_reset_restore_cfg_space; in ipr_reset_bist_done()
8746 static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_start_bist() argument
8748 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_start_bist()
8759 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_start_bist()
8760 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_start_bist()
8764 pci_cfg_access_unlock(ipr_cmd->ioa_cfg->pdev); in ipr_reset_start_bist()
8766 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); in ipr_reset_start_bist()
8783 static int ipr_reset_slot_reset_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset_done() argument
8786 ipr_cmd->job_step = ipr_reset_bist_done; in ipr_reset_slot_reset_done()
8787 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); in ipr_reset_slot_reset_done()
8801 struct ipr_cmnd *ipr_cmd = container_of(work, struct ipr_cmnd, work); in ipr_reset_reset_work() local
8802 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_reset_work()
8812 if (ioa_cfg->reset_cmd == ipr_cmd) in ipr_reset_reset_work()
8813 ipr_reset_ioa_job(ipr_cmd); in ipr_reset_reset_work()
8827 static int ipr_reset_slot_reset(struct ipr_cmnd *ipr_cmd) in ipr_reset_slot_reset() argument
8829 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_slot_reset()
8832 INIT_WORK(&ipr_cmd->work, ipr_reset_reset_work); in ipr_reset_slot_reset()
8833 queue_work(ioa_cfg->reset_work_q, &ipr_cmd->work); in ipr_reset_slot_reset()
8834 ipr_cmd->job_step = ipr_reset_slot_reset_done; in ipr_reset_slot_reset()
8848 static int ipr_reset_block_config_access_wait(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access_wait() argument
8850 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_block_config_access_wait()
8855 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8857 if (ipr_cmd->u.time_left) { in ipr_reset_block_config_access_wait()
8859 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access_wait()
8860 ipr_reset_start_timer(ipr_cmd, in ipr_reset_block_config_access_wait()
8863 ipr_cmd->job_step = ioa_cfg->reset; in ipr_reset_block_config_access_wait()
8881 static int ipr_reset_block_config_access(struct ipr_cmnd *ipr_cmd) in ipr_reset_block_config_access() argument
8883 ipr_cmd->ioa_cfg->cfg_locked = 0; in ipr_reset_block_config_access()
8884 ipr_cmd->job_step = ipr_reset_block_config_access_wait; in ipr_reset_block_config_access()
8885 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_block_config_access()
8919 static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd) in ipr_reset_wait_to_start_bist() argument
8921 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_wait_to_start_bist()
8924 if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) { in ipr_reset_wait_to_start_bist()
8925 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; in ipr_reset_wait_to_start_bist()
8926 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_wait_to_start_bist()
8928 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_wait_to_start_bist()
8947 static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd) in ipr_reset_alert() argument
8949 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_alert()
8959 ipr_cmd->job_step = ipr_reset_wait_to_start_bist; in ipr_reset_alert()
8961 ipr_cmd->job_step = ipr_reset_block_config_access; in ipr_reset_alert()
8964 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; in ipr_reset_alert()
8965 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); in ipr_reset_alert()
8980 static int ipr_reset_quiesce_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_quiesce_done() argument
8982 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_quiesce_done()
8985 ipr_cmd->job_step = ipr_ioa_bringdown_done; in ipr_reset_quiesce_done()
9001 static int ipr_reset_cancel_hcam_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam_done() argument
9003 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam_done()
9010 ipr_cmd->job_step = ipr_reset_quiesce_done; in ipr_reset_cancel_hcam_done()
9017 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_cancel_hcam_done()
9040 static int ipr_reset_cancel_hcam(struct ipr_cmnd *ipr_cmd) in ipr_reset_cancel_hcam() argument
9042 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_cancel_hcam()
9049 ipr_cmd->job_step = ipr_reset_cancel_hcam_done; in ipr_reset_cancel_hcam()
9057 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_cancel_hcam()
9058 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_cancel_hcam()
9059 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; in ipr_reset_cancel_hcam()
9072 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_cancel_hcam()
9076 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_cancel_hcam()
9081 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_cancel_hcam()
9096 static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download_done() argument
9098 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download_done()
9104 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download_done()
9118 static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd) in ipr_reset_ucode_download() argument
9120 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ucode_download()
9124 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_ucode_download()
9129 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_ucode_download()
9130 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; in ipr_reset_ucode_download()
9131 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER; in ipr_reset_ucode_download()
9132 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE; in ipr_reset_ucode_download()
9133 ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16; in ipr_reset_ucode_download()
9134 ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8; in ipr_reset_ucode_download()
9135 ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff; in ipr_reset_ucode_download()
9138 ipr_build_ucode_ioadl64(ipr_cmd, sglist); in ipr_reset_ucode_download()
9140 ipr_build_ucode_ioadl(ipr_cmd, sglist); in ipr_reset_ucode_download()
9141 ipr_cmd->job_step = ipr_reset_ucode_download_done; in ipr_reset_ucode_download()
9143 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, in ipr_reset_ucode_download()
9161 static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd) in ipr_reset_shutdown_ioa() argument
9163 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_shutdown_ioa()
9164 enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type; in ipr_reset_shutdown_ioa()
9170 ipr_cmd->job_step = ipr_reset_cancel_hcam; in ipr_reset_shutdown_ioa()
9173 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_reset_shutdown_ioa()
9174 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_reset_shutdown_ioa()
9175 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_reset_shutdown_ioa()
9176 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type; in ipr_reset_shutdown_ioa()
9187 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout); in ipr_reset_shutdown_ioa()
9190 ipr_cmd->job_step = ipr_reset_ucode_download; in ipr_reset_shutdown_ioa()
9192 ipr_cmd->job_step = ipr_reset_alert; in ipr_reset_shutdown_ioa()
9207 static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd) in ipr_reset_ioa_job() argument
9210 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_ioa_job()
9213 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); in ipr_reset_ioa_job()
9215 if (ioa_cfg->reset_cmd != ipr_cmd) { in ipr_reset_ioa_job()
9220 list_add_tail(&ipr_cmd->queue, in ipr_reset_ioa_job()
9221 &ipr_cmd->hrrq->hrrq_free_q); in ipr_reset_ioa_job()
9226 rc = ipr_cmd->job_step_failed(ipr_cmd); in ipr_reset_ioa_job()
9231 ipr_reinit_ipr_cmnd(ipr_cmd); in ipr_reset_ioa_job()
9232 ipr_cmd->job_step_failed = ipr_reset_cmd_failed; in ipr_reset_ioa_job()
9233 rc = ipr_cmd->job_step(ipr_cmd); in ipr_reset_ioa_job()
9255 struct ipr_cmnd *ipr_cmd; in _ipr_initiate_ioa_reset() local
9271 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in _ipr_initiate_ioa_reset()
9272 ioa_cfg->reset_cmd = ipr_cmd; in _ipr_initiate_ioa_reset()
9273 ipr_cmd->job_step = job_step; in _ipr_initiate_ioa_reset()
9274 ipr_cmd->u.shutdown_type = shutdown_type; in _ipr_initiate_ioa_reset()
9276 ipr_reset_ioa_job(ipr_cmd); in _ipr_initiate_ioa_reset()
9347 static int ipr_reset_freeze(struct ipr_cmnd *ipr_cmd) in ipr_reset_freeze() argument
9349 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; in ipr_reset_freeze()
9359 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); in ipr_reset_freeze()
9360 ipr_cmd->done = ipr_reset_ioa_job; in ipr_reset_freeze()
9641 struct ipr_cmnd *ipr_cmd; in ipr_alloc_cmd_blks() local
9696 ipr_cmd = dma_pool_zalloc(ioa_cfg->ipr_cmd_pool, in ipr_alloc_cmd_blks()
9699 if (!ipr_cmd) { in ipr_alloc_cmd_blks()
9704 ioa_cfg->ipr_cmnd_list[i] = ipr_cmd; in ipr_alloc_cmd_blks()
9707 ioarcb = &ipr_cmd->ioarcb; in ipr_alloc_cmd_blks()
9708 ipr_cmd->dma_addr = dma_addr; in ipr_alloc_cmd_blks()
9728 ipr_cmd->cmd_index = i; in ipr_alloc_cmd_blks()
9729 ipr_cmd->ioa_cfg = ioa_cfg; in ipr_alloc_cmd_blks()
9730 ipr_cmd->sense_buffer_dma = dma_addr + in ipr_alloc_cmd_blks()
9733 ipr_cmd->ioarcb.cmd_pkt.hrrq_id = hrrq_id; in ipr_alloc_cmd_blks()
9734 ipr_cmd->hrrq = &ioa_cfg->hrrq[hrrq_id]; in ipr_alloc_cmd_blks()
9735 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_alloc_cmd_blks()
10800 static void ipr_halt_done(struct ipr_cmnd *ipr_cmd) in ipr_halt_done() argument
10802 list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q); in ipr_halt_done()
10813 struct ipr_cmnd *ipr_cmd; in ipr_halt() local
10830 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); in ipr_halt()
10831 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); in ipr_halt()
10832 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; in ipr_halt()
10833 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; in ipr_halt()
10834 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_SHUTDOWN_PREPARE_FOR_NORMAL; in ipr_halt()
10836 ipr_do_req(ipr_cmd, ipr_halt_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); in ipr_halt()