• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/scsi/

Lines Matching defs:ipr_cmd

532  * @ipr_cmd:	ipr command struct
539 static void ipr_trc_hook(struct ipr_cmnd *ipr_cmd,
543 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
547 trace_entry->op_code = ipr_cmd->ioarcb.cmd_pkt.cdb[0];
549 if (ipr_cmd->ioa_cfg->sis64)
550 trace_entry->ata_op_code = ipr_cmd->i.ata_ioadl.regs.command;
552 trace_entry->ata_op_code = ipr_cmd->ioarcb.u.add_data.u.regs.command;
553 trace_entry->cmd_index = ipr_cmd->cmd_index & 0xff;
554 trace_entry->res_handle = ipr_cmd->ioarcb.res_handle;
558 #define ipr_trc_hook(ipr_cmd, type, add_data) do { } while(0)
563 * @ipr_cmd: ipr command struct
568 static void ipr_reinit_ipr_cmnd(struct ipr_cmnd *ipr_cmd)
570 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
571 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa;
572 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64;
573 dma_addr_t dma_addr = ipr_cmd->dma_addr;
581 if (ipr_cmd->ioa_cfg->sis64) {
594 ipr_cmd->scsi_cmd = NULL;
595 ipr_cmd->qc = NULL;
596 ipr_cmd->sense_buffer[0] = 0;
597 ipr_cmd->dma_use_sg = 0;
602 * @ipr_cmd: ipr command struct
607 static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd)
609 ipr_reinit_ipr_cmnd(ipr_cmd);
610 ipr_cmd->u.scratch = 0;
611 ipr_cmd->sibling = NULL;
612 init_timer(&ipr_cmd->timer);
625 struct ipr_cmnd *ipr_cmd;
627 ipr_cmd = list_entry(ioa_cfg->free_q.next, struct ipr_cmnd, queue);
628 list_del(&ipr_cmd->queue);
629 ipr_init_ipr_cmnd(ipr_cmd);
631 return ipr_cmd;
714 * @ipr_cmd: ipr command struct
722 static void ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd)
724 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
725 struct ata_queued_cmd *qc = ipr_cmd->qc;
730 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
736 * @ipr_cmd: ipr command struct
744 static void ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd)
746 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
747 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
751 scsi_dma_unmap(ipr_cmd->scsi_cmd);
753 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
767 struct ipr_cmnd *ipr_cmd, *temp;
770 list_for_each_entry_safe(ipr_cmd, temp, &ioa_cfg->pending_q, queue) {
771 list_del(&ipr_cmd->queue);
773 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_IOA_WAS_RESET);
774 ipr_cmd->s.ioasa.hdr.ilid = cpu_to_be32(IPR_DRIVER_ILID);
776 if (ipr_cmd->scsi_cmd)
777 ipr_cmd->done = ipr_scsi_eh_done;
778 else if (ipr_cmd->qc)
779 ipr_cmd->done = ipr_sata_eh_done;
781 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, IPR_IOASC_IOA_WAS_RESET);
782 del_timer(&ipr_cmd->timer);
783 ipr_cmd->done(ipr_cmd);
791 * @ipr_cmd: ipr command struct
800 static void ipr_send_command(struct ipr_cmnd *ipr_cmd)
802 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
803 dma_addr_t send_dma_addr = ipr_cmd->dma_addr;
811 if (ipr_cmd->dma_use_sg * sizeof(struct ipr_ioadl64_desc) > 128 )
820 * @ipr_cmd: ipr command struct
831 static void ipr_do_req(struct ipr_cmnd *ipr_cmd,
835 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
837 list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
839 ipr_cmd->done = done;
841 ipr_cmd->timer.data = (unsigned long) ipr_cmd;
842 ipr_cmd->timer.expires = jiffies + timeout;
843 ipr_cmd->timer.function = (void (*)(unsigned long))timeout_func;
845 add_timer(&ipr_cmd->timer);
847 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, 0);
851 ipr_send_command(ipr_cmd);
856 * @ipr_cmd: ipr command struct
864 static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd)
866 if (ipr_cmd->sibling)
867 ipr_cmd->sibling = NULL;
869 complete(&ipr_cmd->completion);
874 * @ipr_cmd: ipr command struct
885 static void ipr_init_ioadl(struct ipr_cmnd *ipr_cmd, dma_addr_t dma_addr,
888 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl;
889 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64;
891 ipr_cmd->dma_use_sg = 1;
893 if (ipr_cmd->ioa_cfg->sis64) {
898 ipr_cmd->ioarcb.ioadl_len =
900 ipr_cmd->ioarcb.data_transfer_length = cpu_to_be32(len);
906 ipr_cmd->ioarcb.read_ioadl_len =
908 ipr_cmd->ioarcb.read_data_transfer_length = cpu_to_be32(len);
910 ipr_cmd->ioarcb.ioadl_len =
912 ipr_cmd->ioarcb.data_transfer_length = cpu_to_be32(len);
919 * @ipr_cmd: ipr command struct
926 static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd,
927 void (*timeout_func) (struct ipr_cmnd *ipr_cmd),
930 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
932 init_completion(&ipr_cmd->completion);
933 ipr_do_req(ipr_cmd, ipr_internal_cmd_done, timeout_func, timeout);
936 wait_for_completion(&ipr_cmd->completion);
956 struct ipr_cmnd *ipr_cmd;
960 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
961 list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
964 ipr_cmd->u.hostrcb = hostrcb;
965 ioarcb = &ipr_cmd->ioarcb;
974 ipr_init_ioadl(ipr_cmd, hostrcb->hostrcb_dma,
978 ipr_cmd->done = ipr_process_ccn;
980 ipr_cmd->done = ipr_process_error;
982 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_IOA_RES_ADDR);
986 ipr_send_command(ipr_cmd);
1315 * @ipr_cmd: ipr command struct
1323 static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd)
1325 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
1326 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
1327 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
1330 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
2354 * @ipr_cmd: ipr command struct
2363 static void ipr_process_error(struct ipr_cmnd *ipr_cmd)
2365 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
2366 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
2367 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
2376 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
2392 * @ipr_cmd: ipr command struct
2400 static void ipr_timeout(struct ipr_cmnd *ipr_cmd)
2403 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
2415 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd)
2424 * @ipr_cmd: ipr command struct
2432 static void ipr_oper_timeout(struct ipr_cmnd *ipr_cmd)
2435 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
2447 if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) {
3571 * @ipr_cmd: ipr command struct
3577 static void ipr_build_ucode_ioadl64(struct ipr_cmnd *ipr_cmd,
3580 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
3581 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64;
3585 ipr_cmd->dma_use_sg = sglist->num_dma_sg;
3590 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg);
3591 for (i = 0; i < ipr_cmd->dma_use_sg; i++) {
3602 * @ipr_cmd: ipr command struct
3608 static void ipr_build_ucode_ioadl(struct ipr_cmnd *ipr_cmd,
3611 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
3612 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl;
3616 ipr_cmd->dma_use_sg = sglist->num_dma_sg;
3621 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
3623 for (i = 0; i < ipr_cmd->dma_use_sg; i++) {
4566 struct ipr_cmnd *ipr_cmd;
4573 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
4574 ioarcb = &ipr_cmd->ioarcb;
4577 if (ipr_cmd->ioa_cfg->sis64) {
4578 regs = &ipr_cmd->i.ata_ioadl.regs;
4592 ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT);
4593 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
4594 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4596 if (ipr_cmd->ioa_cfg->sis64)
4597 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata,
4600 memcpy(&res->sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata,
4659 struct ipr_cmnd *ipr_cmd;
4682 list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
4683 if (ipr_cmd->ioarcb.res_handle == res->res_handle) {
4684 if (ipr_cmd->scsi_cmd)
4685 ipr_cmd->done = ipr_scsi_eh_done;
4686 if (ipr_cmd->qc)
4687 ipr_cmd->done = ipr_sata_eh_done;
4688 if (ipr_cmd->qc && !(ipr_cmd->qc->flags & ATA_QCFLAG_FAILED)) {
4689 ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT;
4690 ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED;
4704 list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
4705 if (ipr_cmd->ioarcb.res_handle == res->res_handle) {
4731 * @ipr_cmd: ipr command struct
4738 static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd)
4740 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4746 if (res->res_handle == ipr_cmd->ioarcb.res_handle) {
4756 if (ipr_cmd->sibling->sibling)
4757 ipr_cmd->sibling->sibling = NULL;
4759 ipr_cmd->sibling->done(ipr_cmd->sibling);
4761 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4767 * @ipr_cmd: ipr command struct
4776 static void ipr_abort_timeout(struct ipr_cmnd *ipr_cmd)
4779 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4785 if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) {
4790 sdev_printk(KERN_ERR, ipr_cmd->u.sdev, "Abort timed out. Resetting bus.\n");
4792 ipr_cmd->sibling = reset_cmd;
4793 reset_cmd->sibling = ipr_cmd;
4794 reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle;
4816 struct ipr_cmnd *ipr_cmd;
4836 list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
4837 if (ipr_cmd->scsi_cmd == scsi_cmd) {
4838 ipr_cmd->done = ipr_scsi_eh_done;
4847 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
4848 ipr_cmd->ioarcb.res_handle = res->res_handle;
4849 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
4852 ipr_cmd->u.sdev = scsi_cmd->device;
4856 ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_CANCEL_ALL_TIMEOUT);
4857 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
4868 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4998 struct ipr_cmnd *ipr_cmd;
5010 ipr_cmd = NULL;
5024 ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index];
5026 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
5028 ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc);
5030 list_del(&ipr_cmd->queue);
5031 del_timer(&ipr_cmd->timer);
5032 ipr_cmd->done(ipr_cmd);
5044 if (ipr_cmd != NULL) {
5072 * @ipr_cmd: ipr command struct
5078 struct ipr_cmnd *ipr_cmd)
5084 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
5085 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
5086 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64;
5098 ipr_cmd->dma_use_sg = nseg;
5102 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg);
5110 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) {
5123 * @ipr_cmd: ipr command struct
5129 struct ipr_cmnd *ipr_cmd)
5135 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
5136 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
5137 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl;
5149 ipr_cmd->dma_use_sg = nseg;
5156 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
5161 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
5164 if (ipr_cmd->dma_use_sg <= ARRAY_SIZE(ioarcb->u.add_data.u.ioadl)) {
5166 ioarcb->write_ioadl_addr = cpu_to_be32((ipr_cmd->dma_addr) +
5171 scsi_for_each_sg(scsi_cmd, sg, ipr_cmd->dma_use_sg, i) {
5212 * @ipr_cmd: ipr command struct
5220 static void ipr_erp_done(struct ipr_cmnd *ipr_cmd)
5222 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
5224 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5225 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
5232 memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer,
5241 scsi_dma_unmap(ipr_cmd->scsi_cmd);
5242 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
5248 * @ipr_cmd: ipr command struct
5253 static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd)
5255 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
5256 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa;
5257 dma_addr_t dma_addr = ipr_cmd->dma_addr;
5267 if (ipr_cmd->ioa_cfg->sis64)
5279 * @ipr_cmd: ipr command struct
5287 static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd)
5289 struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
5290 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
5293 ipr_erp_done(ipr_cmd);
5297 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd);
5306 ipr_init_ioadl(ipr_cmd, ipr_cmd->sense_buffer_dma,
5309 ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout,
5315 * @ipr_cmd: ipr command struct
5325 static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd)
5327 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
5333 ipr_reinit_ipr_cmnd_for_erp(ipr_cmd);
5336 ipr_erp_request_sense(ipr_cmd);
5340 cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
5344 ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout,
5351 * @ipr_cmd: ipr command struct
5362 struct ipr_cmnd *ipr_cmd, struct ipr_resource_entry *res)
5367 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa;
5424 static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd)
5427 u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer;
5428 struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata;
5429 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa;
5437 ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION;
5509 * @ipr_cmd: ipr command struct
5517 static int ipr_get_autosense(struct ipr_cmnd *ipr_cmd)
5519 struct ipr_ioasa *ioasa = &ipr_cmd->s.ioasa;
5520 struct ipr_ioasa64 *ioasa64 = &ipr_cmd->s.ioasa64;
5525 if (ipr_cmd->ioa_cfg->sis64)
5526 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa64->auto_sense.data,
5530 memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data,
5539 * @ipr_cmd: ipr command struct
5548 struct ipr_cmnd *ipr_cmd)
5550 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
5552 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
5556 ipr_scsi_eh_done(ipr_cmd);
5561 ipr_gen_sense(ipr_cmd);
5563 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res);
5605 if (!ipr_get_autosense(ipr_cmd)) {
5607 ipr_erp_cancel_all(ipr_cmd);
5625 scsi_dma_unmap(ipr_cmd->scsi_cmd);
5626 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
5632 * @ipr_cmd: ipr command struct
5640 static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd)
5642 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5643 struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
5644 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
5646 scsi_set_resid(scsi_cmd, be32_to_cpu(ipr_cmd->s.ioasa.hdr.residual_data_len));
5649 scsi_dma_unmap(ipr_cmd->scsi_cmd);
5650 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
5653 ipr_erp_start(ioa_cfg, ipr_cmd);
5674 struct ipr_cmnd *ipr_cmd;
5695 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
5696 ioarcb = &ipr_cmd->ioarcb;
5697 list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
5700 ipr_cmd->scsi_cmd = scsi_cmd;
5702 ipr_cmd->done = ipr_scsi_done;
5703 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res));
5726 rc = ipr_build_ioadl64(ioa_cfg, ipr_cmd);
5728 rc = ipr_build_ioadl(ioa_cfg, ipr_cmd);
5733 ipr_send_command(ipr_cmd);
5735 list_move_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
5866 struct ipr_cmnd *ipr_cmd;
5876 list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
5877 if (ipr_cmd->qc == qc) {
5913 * @ipr_cmd: ipr command struct
5921 static void ipr_sata_done(struct ipr_cmnd *ipr_cmd)
5923 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5924 struct ata_queued_cmd *qc = ipr_cmd->qc;
5927 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
5929 if (ipr_cmd->ioa_cfg->sis64)
5930 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa64.u.gata,
5933 memcpy(&sata_port->ioasa, &ipr_cmd->s.ioasa.u.gata,
5935 ipr_dump_ioasa(ioa_cfg, ipr_cmd, res);
5937 if (be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc_specific) & IPR_ATA_DEVICE_WAS_RESET)
5944 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
5950 * @ipr_cmd: ipr command struct
5954 static void ipr_build_ata_ioadl64(struct ipr_cmnd *ipr_cmd,
5958 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
5959 struct ipr_ioadl64_desc *ioadl64 = ipr_cmd->i.ioadl64;
5964 dma_addr_t dma_addr = ipr_cmd->dma_addr;
5977 cpu_to_be32(sizeof(struct ipr_ioadl64_desc) * ipr_cmd->dma_use_sg);
5996 * @ipr_cmd: ipr command struct
6000 static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd,
6004 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
6005 struct ipr_ioadl_desc *ioadl = ipr_cmd->i.ioadl;
6019 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
6024 cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
6052 struct ipr_cmnd *ipr_cmd;
6059 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
6060 ioarcb = &ipr_cmd->ioarcb;
6063 regs = &ipr_cmd->i.ata_ioadl.regs;
6071 list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
6072 ipr_cmd->qc = qc;
6073 ipr_cmd->done = ipr_sata_done;
6074 ipr_cmd->ioarcb.res_handle = res->res_handle;
6078 ipr_cmd->dma_use_sg = qc->n_elem;
6081 ipr_build_ata_ioadl64(ipr_cmd, qc);
6083 ipr_build_ata_ioadl(ipr_cmd, qc);
6088 ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_RES_PHYS_LOC(res));
6116 ipr_send_command(ipr_cmd);
6211 * @ipr_cmd: ipr command struct
6219 static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd)
6221 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6226 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
6239 * @ipr_cmd: ipr command struct
6248 static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd)
6250 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6281 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
6316 * @ipr_cmd: ipr command struct
6323 static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd)
6325 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6327 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
6328 struct ipr_resource_entry *res = ipr_cmd->u.res;
6330 ipr_cmd->job_step = ipr_ioa_reset_done;
6336 ipr_cmd->u.res = res;
6348 ipr_init_ioadl(ipr_cmd,
6354 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout,
6358 ipr_cmd->job_step = ipr_set_supported_devs;
6513 * @ipr_cmd: ipr command struct
6522 static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd,
6526 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
6535 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_WRITE_LAST);
6540 * @ipr_cmd: ipr command struct
6548 static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd)
6550 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6561 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11,
6565 ipr_cmd->job_step = ipr_set_supported_devs;
6566 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next,
6568 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
6576 * @ipr_cmd: ipr command struct
6585 static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd,
6589 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
6597 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST);
6602 * @ipr_cmd: ipr command struct
6609 static int ipr_reset_cmd_failed(struct ipr_cmnd *ipr_cmd)
6611 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6612 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
6616 ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc);
6619 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
6625 * @ipr_cmd: ipr command struct
6633 static int ipr_reset_mode_sense_failed(struct ipr_cmnd *ipr_cmd)
6635 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6636 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
6639 ipr_cmd->job_step = ipr_set_supported_devs;
6640 ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next,
6645 return ipr_reset_cmd_failed(ipr_cmd);
6650 * @ipr_cmd: ipr command struct
6658 static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd)
6660 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6663 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE),
6668 ipr_cmd->job_step = ipr_ioafp_mode_select_page28;
6669 ipr_cmd->job_step_failed = ipr_reset_mode_sense_failed;
6671 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
6679 * @ipr_cmd: ipr command struct
6686 static int ipr_ioafp_mode_select_page24(struct ipr_cmnd *ipr_cmd)
6688 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6703 ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11,
6707 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28;
6708 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
6716 * @ipr_cmd: ipr command struct
6724 static int ipr_reset_mode_sense_page24_failed(struct ipr_cmnd *ipr_cmd)
6726 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
6729 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28;
6733 return ipr_reset_cmd_failed(ipr_cmd);
6738 * @ipr_cmd: ipr command struct
6746 static int ipr_ioafp_mode_sense_page24(struct ipr_cmnd *ipr_cmd)
6748 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6751 ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE),
6756 ipr_cmd->job_step = ipr_ioafp_mode_select_page24;
6757 ipr_cmd->job_step_failed = ipr_reset_mode_sense_page24_failed;
6759 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
6767 * @ipr_cmd: ipr command struct
6777 static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd)
6779 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6850 ipr_cmd->job_step = ipr_ioafp_mode_sense_page24;
6852 ipr_cmd->job_step = ipr_ioafp_mode_sense_page28;
6860 * @ipr_cmd: ipr command struct
6868 static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd)
6870 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6871 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
6889 ipr_init_ioadl(ipr_cmd, ioa_cfg->cfg_table_dma, ioa_cfg->cfg_table_size,
6892 ipr_cmd->job_step = ipr_init_res_table;
6894 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
6902 * @ipr_cmd: ipr command struct
6909 static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page,
6912 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
6923 ipr_init_ioadl(ipr_cmd, dma_addr, xfer_len, IPR_IOADL_FLAGS_READ_LAST);
6925 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
6952 * @ipr_cmd: ipr command struct
6960 static int ipr_ioafp_cap_inquiry(struct ipr_cmnd *ipr_cmd)
6962 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6967 ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg;
6971 ipr_ioafp_inquiry(ipr_cmd, 1, 0xD0,
6983 * @ipr_cmd: ipr command struct
6991 static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd)
6993 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
6997 ipr_cmd->job_step = ipr_ioafp_cap_inquiry;
6999 ipr_ioafp_inquiry(ipr_cmd, 1, 3,
7009 * @ipr_cmd: ipr command struct
7017 static int ipr_ioafp_page0_inquiry(struct ipr_cmnd *ipr_cmd)
7019 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7029 ipr_cmd->job_step = ipr_ioafp_page3_inquiry;
7031 ipr_ioafp_inquiry(ipr_cmd, 1, 0,
7041 * @ipr_cmd: ipr command struct
7048 static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd)
7050 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7053 ipr_cmd->job_step = ipr_ioafp_page0_inquiry;
7055 ipr_ioafp_inquiry(ipr_cmd, 0, 0,
7065 * @ipr_cmd: ipr command struct
7073 static int ipr_ioafp_identify_hrrq(struct ipr_cmnd *ipr_cmd)
7075 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7076 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
7111 ipr_cmd->job_step = ipr_ioafp_std_inquiry;
7113 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
7121 * @ipr_cmd: ipr command struct
7132 static void ipr_reset_timer_done(struct ipr_cmnd *ipr_cmd)
7134 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7139 if (ioa_cfg->reset_cmd == ipr_cmd) {
7140 list_del(&ipr_cmd->queue);
7141 ipr_cmd->done(ipr_cmd);
7149 * @ipr_cmd: ipr command struct
7161 static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd,
7164 list_add_tail(&ipr_cmd->queue, &ipr_cmd->ioa_cfg->pending_q);
7165 ipr_cmd->done = ipr_reset_ioa_job;
7167 ipr_cmd->timer.data = (unsigned long) ipr_cmd;
7168 ipr_cmd->timer.expires = jiffies + timeout;
7169 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_reset_timer_done;
7170 add_timer(&ipr_cmd->timer);
7196 * @ipr_cmd: ipr command struct
7201 static int ipr_reset_next_stage(struct ipr_cmnd *ipr_cmd)
7206 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7227 ipr_cmd->job_step = ipr_ioafp_identify_hrrq;
7231 ipr_cmd->job_step = ipr_ioafp_identify_hrrq;
7240 ipr_cmd->timer.data = (unsigned long) ipr_cmd;
7241 ipr_cmd->timer.expires = jiffies + stage_time * HZ;
7242 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout;
7243 ipr_cmd->done = ipr_reset_ioa_job;
7244 add_timer(&ipr_cmd->timer);
7245 list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
7252 * @ipr_cmd: ipr command struct
7260 static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd)
7262 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7267 ipr_cmd->job_step = ipr_ioafp_identify_hrrq;
7301 ipr_cmd->job_step = ipr_reset_next_stage;
7305 ipr_cmd->timer.data = (unsigned long) ipr_cmd;
7306 ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ);
7307 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout;
7308 ipr_cmd->done = ipr_reset_ioa_job;
7309 add_timer(&ipr_cmd->timer);
7310 list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
7318 * @ipr_cmd: ipr command struct
7326 static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd)
7328 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7333 ipr_cmd->job_step = ipr_reset_alert;
7422 * @ipr_cmd: ipr command struct
7431 static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd)
7433 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7442 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
7447 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
7462 ipr_cmd->job_step = ipr_reset_alert;
7463 ipr_reset_start_timer(ipr_cmd, 0);
7468 ipr_cmd->job_step = ipr_ioa_bringdown_done;
7470 ipr_cmd->job_step = ipr_reset_enable_ioa;
7473 ipr_reset_start_timer(ipr_cmd, IPR_DUMP_TIMEOUT);
7474 ipr_cmd->job_step = ipr_reset_wait_for_dump;
7486 * @ipr_cmd: ipr command struct
7493 static int ipr_reset_bist_done(struct ipr_cmnd *ipr_cmd)
7496 pci_unblock_user_cfg_access(ipr_cmd->ioa_cfg->pdev);
7497 ipr_cmd->job_step = ipr_reset_restore_cfg_space;
7504 * @ipr_cmd: ipr command struct
7511 static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd)
7513 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7526 ipr_cmd->job_step = ipr_reset_bist_done;
7527 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT);
7530 pci_unblock_user_cfg_access(ipr_cmd->ioa_cfg->pdev);
7531 ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
7541 * @ipr_cmd: ipr command struct
7548 static int ipr_reset_slot_reset_done(struct ipr_cmnd *ipr_cmd)
7551 pci_set_pcie_reset_state(ipr_cmd->ioa_cfg->pdev, pcie_deassert_reset);
7552 ipr_cmd->job_step = ipr_reset_bist_done;
7553 ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT);
7560 * @ipr_cmd: ipr command struct
7567 static int ipr_reset_slot_reset(struct ipr_cmnd *ipr_cmd)
7569 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7575 ipr_cmd->job_step = ipr_reset_slot_reset_done;
7576 ipr_reset_start_timer(ipr_cmd, IPR_PCI_RESET_TIMEOUT);
7598 * @ipr_cmd: ipr command struct
7611 static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd)
7613 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7616 if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) {
7617 ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
7618 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
7620 ipr_cmd->job_step = ioa_cfg->reset;
7629 * @ipr_cmd: ipr command struct
7639 static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd)
7641 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7651 ipr_cmd->job_step = ipr_reset_wait_to_start_bist;
7653 ipr_cmd->job_step = ioa_cfg->reset;
7656 ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
7657 ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
7665 * @ipr_cmd: ipr command struct
7672 static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd)
7674 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7680 ipr_cmd->job_step = ipr_reset_alert;
7686 * @ipr_cmd: ipr command struct
7694 static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd)
7696 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7700 ipr_cmd->job_step = ipr_reset_alert;
7705 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
7706 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
7707 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER;
7708 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE;
7709 ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16;
7710 ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8;
7711 ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff;
7714 ipr_build_ucode_ioadl64(ipr_cmd, sglist);
7716 ipr_build_ucode_ioadl(ipr_cmd, sglist);
7717 ipr_cmd->job_step = ipr_reset_ucode_download_done;
7719 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout,
7728 * @ipr_cmd: ipr command struct
7737 static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd)
7739 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7740 enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type;
7746 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
7747 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
7748 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN;
7749 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type;
7760 ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout);
7763 ipr_cmd->job_step = ipr_reset_ucode_download;
7765 ipr_cmd->job_step = ipr_reset_alert;
7773 * @ipr_cmd: ipr command struct
7780 static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd)
7783 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
7786 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
7788 if (ioa_cfg->reset_cmd != ipr_cmd) {
7793 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
7798 rc = ipr_cmd->job_step_failed(ipr_cmd);
7803 ipr_reinit_ipr_cmnd(ipr_cmd);
7804 ipr_cmd->job_step_failed = ipr_reset_cmd_failed;
7805 rc = ipr_cmd->job_step(ipr_cmd);
7827 struct ipr_cmnd *ipr_cmd;
7833 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
7834 ioa_cfg->reset_cmd = ipr_cmd;
7835 ipr_cmd->job_step = job_step;
7836 ipr_cmd->u.shutdown_type = shutdown_type;
7838 ipr_reset_ioa_job(ipr_cmd);
7891 * @ipr_cmd: ipr command struct
7897 static int ipr_reset_freeze(struct ipr_cmnd *ipr_cmd)
7900 ipr_cmd->ioa_cfg->allow_interrupts = 0;
7901 list_add_tail(&ipr_cmd->queue, &ipr_cmd->ioa_cfg->pending_q);
7902 ipr_cmd->done = ipr_reset_ioa_job;
8102 * @ipr_cmd: ipr command struct
8134 struct ipr_cmnd *ipr_cmd;
8146 ipr_cmd = pci_pool_alloc (ioa_cfg->ipr_cmd_pool, GFP_KERNEL, &dma_addr);
8148 if (!ipr_cmd) {
8153 memset(ipr_cmd, 0, sizeof(*ipr_cmd));
8154 ioa_cfg->ipr_cmnd_list[i] = ipr_cmd;
8157 ioarcb = &ipr_cmd->ioarcb;
8158 ipr_cmd->dma_addr = dma_addr;
8178 ipr_cmd->cmd_index = i;
8179 ipr_cmd->ioa_cfg = ioa_cfg;
8180 ipr_cmd->sense_buffer_dma = dma_addr +
8183 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
9009 static void ipr_halt_done(struct ipr_cmnd *ipr_cmd)
9011 struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
9013 list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
9024 struct ipr_cmnd *ipr_cmd;
9040 ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
9041 ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
9042 ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
9043 ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN;
9044 ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_SHUTDOWN_PREPARE_FOR_NORMAL;
9046 ipr_do_req(ipr_cmd, ipr_halt_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT);