Lines Matching refs:cmd

294 static void pmcraid_init_cmdblk(struct pmcraid_cmd *cmd, int index)  in pmcraid_init_cmdblk()  argument
296 struct pmcraid_ioarcb *ioarcb = &(cmd->ioa_cb->ioarcb); in pmcraid_init_cmdblk()
297 dma_addr_t dma_addr = cmd->ioa_cb_bus_addr; in pmcraid_init_cmdblk()
304 cmd->index = index; in pmcraid_init_cmdblk()
313 memset(&cmd->ioa_cb->ioarcb.cdb, 0, PMCRAID_MAX_CDB_LEN); in pmcraid_init_cmdblk()
324 cmd->ioa_cb->ioasa.ioasc = 0; in pmcraid_init_cmdblk()
325 cmd->ioa_cb->ioasa.residual_data_length = 0; in pmcraid_init_cmdblk()
326 cmd->time_left = 0; in pmcraid_init_cmdblk()
329 cmd->cmd_done = NULL; in pmcraid_init_cmdblk()
330 cmd->scsi_cmd = NULL; in pmcraid_init_cmdblk()
331 cmd->release = 0; in pmcraid_init_cmdblk()
332 cmd->completion_req = 0; in pmcraid_init_cmdblk()
333 cmd->sense_buffer = NULL; in pmcraid_init_cmdblk()
334 cmd->sense_buffer_dma = 0; in pmcraid_init_cmdblk()
335 cmd->dma_handle = 0; in pmcraid_init_cmdblk()
336 timer_setup(&cmd->timer, NULL, 0); in pmcraid_init_cmdblk()
347 static void pmcraid_reinit_cmdblk(struct pmcraid_cmd *cmd) in pmcraid_reinit_cmdblk() argument
349 pmcraid_init_cmdblk(cmd, -1); in pmcraid_reinit_cmdblk()
363 struct pmcraid_cmd *cmd = NULL; in pmcraid_get_free_cmd() local
370 cmd = list_entry(pinstance->free_cmd_pool.next, in pmcraid_get_free_cmd()
372 list_del(&cmd->free_list); in pmcraid_get_free_cmd()
377 if (cmd != NULL) in pmcraid_get_free_cmd()
378 pmcraid_reinit_cmdblk(cmd); in pmcraid_get_free_cmd()
379 return cmd; in pmcraid_get_free_cmd()
389 static void pmcraid_return_cmd(struct pmcraid_cmd *cmd) in pmcraid_return_cmd() argument
391 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_return_cmd()
395 list_add_tail(&cmd->free_list, &pinstance->free_cmd_pool); in pmcraid_return_cmd()
544 struct pmcraid_cmd *cmd = from_timer(cmd, t, timer); in pmcraid_bist_done() local
545 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_bist_done()
554 cmd->time_left > 0) { in pmcraid_bist_done()
556 cmd->timer.expires = jiffies + cmd->time_left; in pmcraid_bist_done()
557 cmd->time_left = 0; in pmcraid_bist_done()
558 add_timer(&cmd->timer); in pmcraid_bist_done()
560 cmd->time_left = 0; in pmcraid_bist_done()
563 pmcraid_ioa_reset(cmd); in pmcraid_bist_done()
574 static void pmcraid_start_bist(struct pmcraid_cmd *cmd) in pmcraid_start_bist() argument
576 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_start_bist()
587 cmd->time_left = msecs_to_jiffies(PMCRAID_BIST_TIMEOUT); in pmcraid_start_bist()
588 cmd->timer.expires = jiffies + msecs_to_jiffies(PMCRAID_BIST_TIMEOUT); in pmcraid_start_bist()
589 cmd->timer.function = pmcraid_bist_done; in pmcraid_start_bist()
590 add_timer(&cmd->timer); in pmcraid_start_bist()
601 struct pmcraid_cmd *cmd = from_timer(cmd, t, timer); in pmcraid_reset_alert_done() local
602 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert_done()
611 cmd->time_left <= 0) { in pmcraid_reset_alert_done()
614 pmcraid_ioa_reset(cmd); in pmcraid_reset_alert_done()
619 cmd->time_left -= PMCRAID_CHECK_FOR_RESET_TIMEOUT; in pmcraid_reset_alert_done()
620 cmd->timer.expires = jiffies + PMCRAID_CHECK_FOR_RESET_TIMEOUT; in pmcraid_reset_alert_done()
621 cmd->timer.function = pmcraid_reset_alert_done; in pmcraid_reset_alert_done()
622 add_timer(&cmd->timer); in pmcraid_reset_alert_done()
636 static void pmcraid_reset_alert(struct pmcraid_cmd *cmd) in pmcraid_reset_alert() argument
638 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert()
656 cmd->time_left = PMCRAID_RESET_TIMEOUT; in pmcraid_reset_alert()
657 cmd->timer.expires = jiffies + PMCRAID_CHECK_FOR_RESET_TIMEOUT; in pmcraid_reset_alert()
658 cmd->timer.function = pmcraid_reset_alert_done; in pmcraid_reset_alert()
659 add_timer(&cmd->timer); in pmcraid_reset_alert()
669 pmcraid_start_bist(cmd); in pmcraid_reset_alert()
685 struct pmcraid_cmd *cmd = from_timer(cmd, t, timer); in pmcraid_timeout_handler() local
686 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_timeout_handler()
691 cmd->ioa_cb->ioarcb.cdb[0]); in pmcraid_timeout_handler()
702 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_timeout_handler()
707 if (cmd == NULL) { in pmcraid_timeout_handler()
714 pinstance->reset_cmd = cmd; in pmcraid_timeout_handler()
719 if (pinstance->reset_cmd != cmd) { in pmcraid_timeout_handler()
732 if (cmd == pinstance->reset_cmd) in pmcraid_timeout_handler()
733 cmd->cmd_done = pmcraid_ioa_reset; in pmcraid_timeout_handler()
744 pmcraid_reset_alert(cmd); in pmcraid_timeout_handler()
756 static void pmcraid_internal_done(struct pmcraid_cmd *cmd) in pmcraid_internal_done() argument
759 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_internal_done()
760 le32_to_cpu(cmd->ioa_cb->ioasa.ioasc)); in pmcraid_internal_done()
767 if (cmd->completion_req) { in pmcraid_internal_done()
768 cmd->completion_req = 0; in pmcraid_internal_done()
769 complete(&cmd->wait_for_completion); in pmcraid_internal_done()
776 if (cmd->release) { in pmcraid_internal_done()
777 cmd->release = 0; in pmcraid_internal_done()
778 pmcraid_return_cmd(cmd); in pmcraid_internal_done()
794 static void pmcraid_reinit_cfgtable_done(struct pmcraid_cmd *cmd) in pmcraid_reinit_cfgtable_done() argument
797 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_reinit_cfgtable_done()
798 le32_to_cpu(cmd->ioa_cb->ioasa.ioasc)); in pmcraid_reinit_cfgtable_done()
800 if (cmd->release) { in pmcraid_reinit_cfgtable_done()
801 cmd->release = 0; in pmcraid_reinit_cfgtable_done()
802 pmcraid_return_cmd(cmd); in pmcraid_reinit_cfgtable_done()
805 schedule_work(&cmd->drv_inst->worker_q); in pmcraid_reinit_cfgtable_done()
818 static void pmcraid_erp_done(struct pmcraid_cmd *cmd) in pmcraid_erp_done() argument
820 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_erp_done()
821 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_erp_done()
822 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_erp_done()
828 cmd->ioa_cb->ioarcb.cdb[0], ioasc); in pmcraid_erp_done()
831 if (cmd->sense_buffer) { in pmcraid_erp_done()
832 dma_unmap_single(&pinstance->pdev->dev, cmd->sense_buffer_dma, in pmcraid_erp_done()
834 cmd->sense_buffer = NULL; in pmcraid_erp_done()
835 cmd->sense_buffer_dma = 0; in pmcraid_erp_done()
839 pmcraid_return_cmd(cmd); in pmcraid_erp_done()
854 static void _pmcraid_fire_command(struct pmcraid_cmd *cmd) in _pmcraid_fire_command() argument
856 struct pmcraid_instance *pinstance = cmd->drv_inst; in _pmcraid_fire_command()
865 list_add_tail(&cmd->free_list, &pinstance->pending_cmd_pool); in _pmcraid_fire_command()
871 iowrite32(le64_to_cpu(cmd->ioa_cb->ioarcb.ioarcb_bus_addr), pinstance->ioarrin); in _pmcraid_fire_command()
889 struct pmcraid_cmd *cmd, in pmcraid_send_cmd() argument
896 cmd->cmd_done = cmd_done; in pmcraid_send_cmd()
900 cmd->timer.expires = jiffies + timeout; in pmcraid_send_cmd()
901 cmd->timer.function = timeout_func; in pmcraid_send_cmd()
902 add_timer(&cmd->timer); in pmcraid_send_cmd()
906 _pmcraid_fire_command(cmd); in pmcraid_send_cmd()
916 static void pmcraid_ioa_shutdown_done(struct pmcraid_cmd *cmd) in pmcraid_ioa_shutdown_done() argument
918 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_shutdown_done()
922 pmcraid_ioa_reset(cmd); in pmcraid_ioa_shutdown_done()
934 static void pmcraid_ioa_shutdown(struct pmcraid_cmd *cmd) in pmcraid_ioa_shutdown() argument
937 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_ioa_shutdown()
938 le32_to_cpu(cmd->ioa_cb->ioasa.ioasc)); in pmcraid_ioa_shutdown()
943 pmcraid_reinit_cmdblk(cmd); in pmcraid_ioa_shutdown()
944 cmd->ioa_cb->ioarcb.request_type = REQ_TYPE_IOACMD; in pmcraid_ioa_shutdown()
945 cmd->ioa_cb->ioarcb.resource_handle = in pmcraid_ioa_shutdown()
947 cmd->ioa_cb->ioarcb.cdb[0] = PMCRAID_IOA_SHUTDOWN; in pmcraid_ioa_shutdown()
948 cmd->ioa_cb->ioarcb.cdb[1] = PMCRAID_SHUTDOWN_NORMAL; in pmcraid_ioa_shutdown()
952 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle)); in pmcraid_ioa_shutdown()
954 pmcraid_notify_ioastate(cmd->drv_inst, PMC_DEVICE_EVENT_SHUTDOWN_START); in pmcraid_ioa_shutdown()
956 pmcraid_send_cmd(cmd, pmcraid_ioa_shutdown_done, in pmcraid_ioa_shutdown()
970 static void pmcraid_get_fwversion_done(struct pmcraid_cmd *cmd) in pmcraid_get_fwversion_done() argument
972 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion_done()
973 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_get_fwversion_done()
984 pmcraid_reset_alert(cmd); in pmcraid_get_fwversion_done()
987 pmcraid_querycfg(cmd); in pmcraid_get_fwversion_done()
999 static void pmcraid_get_fwversion(struct pmcraid_cmd *cmd) in pmcraid_get_fwversion() argument
1001 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_get_fwversion()
1003 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion()
1006 pmcraid_reinit_cmdblk(cmd); in pmcraid_get_fwversion()
1017 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_get_fwversion()
1030 pmcraid_send_cmd(cmd, pmcraid_get_fwversion_done, in pmcraid_get_fwversion()
1041 static void pmcraid_identify_hrrq(struct pmcraid_cmd *cmd) in pmcraid_identify_hrrq() argument
1043 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_identify_hrrq()
1044 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_identify_hrrq()
1045 int index = cmd->hrrq_index; in pmcraid_identify_hrrq()
1050 pmcraid_reinit_cmdblk(cmd); in pmcraid_identify_hrrq()
1051 cmd->hrrq_index = index + 1; in pmcraid_identify_hrrq()
1053 if (cmd->hrrq_index < pinstance->num_hrrq) { in pmcraid_identify_hrrq()
1056 cmd->hrrq_index = 0; in pmcraid_identify_hrrq()
1082 pmcraid_send_cmd(cmd, done_function, in pmcraid_identify_hrrq()
1087 static void pmcraid_process_ccn(struct pmcraid_cmd *cmd);
1088 static void pmcraid_process_ldn(struct pmcraid_cmd *cmd);
1098 static void pmcraid_send_hcam_cmd(struct pmcraid_cmd *cmd) in pmcraid_send_hcam_cmd() argument
1100 if (cmd->ioa_cb->ioarcb.cdb[1] == PMCRAID_HCAM_CODE_CONFIG_CHANGE) in pmcraid_send_hcam_cmd()
1101 atomic_set(&(cmd->drv_inst->ccn.ignore), 0); in pmcraid_send_hcam_cmd()
1103 atomic_set(&(cmd->drv_inst->ldn.ignore), 0); in pmcraid_send_hcam_cmd()
1105 pmcraid_send_cmd(cmd, cmd->cmd_done, 0, NULL); in pmcraid_send_hcam_cmd()
1123 struct pmcraid_cmd *cmd; in pmcraid_init_hcam() local
1131 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_init_hcam()
1133 if (!cmd) { in pmcraid_init_hcam()
1135 return cmd; in pmcraid_init_hcam()
1151 hcam->cmd = cmd; in pmcraid_init_hcam()
1153 ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_init_hcam()
1154 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_init_hcam()
1174 cmd->cmd_done = cmd_done; in pmcraid_init_hcam()
1175 return cmd; in pmcraid_init_hcam()
1190 struct pmcraid_cmd *cmd = pmcraid_init_hcam(pinstance, type); in pmcraid_send_hcam() local
1191 pmcraid_send_hcam_cmd(cmd); in pmcraid_send_hcam()
1202 struct pmcraid_cmd *cmd, in pmcraid_prepare_cancel_cmd() argument
1206 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_prepare_cancel_cmd()
1234 struct pmcraid_cmd *cmd, in pmcraid_cancel_hcam() argument
1242 pinstance = cmd->drv_inst; in pmcraid_cancel_hcam()
1249 if (hcam->cmd == NULL) in pmcraid_cancel_hcam()
1252 pmcraid_prepare_cancel_cmd(cmd, hcam->cmd); in pmcraid_cancel_hcam()
1257 pmcraid_send_cmd(cmd, cmd_done, in pmcraid_cancel_hcam()
1267 static void pmcraid_cancel_ccn(struct pmcraid_cmd *cmd) in pmcraid_cancel_ccn() argument
1270 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_cancel_ccn()
1271 le32_to_cpu(cmd->ioa_cb->ioasa.ioasc)); in pmcraid_cancel_ccn()
1273 pmcraid_reinit_cmdblk(cmd); in pmcraid_cancel_ccn()
1275 pmcraid_cancel_hcam(cmd, in pmcraid_cancel_ccn()
1285 static void pmcraid_cancel_ldn(struct pmcraid_cmd *cmd) in pmcraid_cancel_ldn() argument
1287 pmcraid_cancel_hcam(cmd, in pmcraid_cancel_ldn()
1509 struct pmcraid_cmd *cmd; in pmcraid_handle_config_change() local
1643 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_handle_config_change()
1644 if (cmd) in pmcraid_handle_config_change()
1645 pmcraid_send_hcam_cmd(cmd); in pmcraid_handle_config_change()
1669 static void pmcraid_ioasc_logger(u32 ioasc, struct pmcraid_cmd *cmd) in pmcraid_ioasc_logger() argument
1674 cmd->drv_inst->current_log_level < error_info->log_level) in pmcraid_ioasc_logger()
1679 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_ioasc_logger()
1680 le32_to_cpu(cmd->ioa_cb->ioarcb.resource_handle), in pmcraid_ioasc_logger()
1741 static void pmcraid_process_ccn(struct pmcraid_cmd *cmd) in pmcraid_process_ccn() argument
1743 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ccn()
1744 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_process_ccn()
1747 pinstance->ccn.cmd = NULL; in pmcraid_process_ccn()
1748 pmcraid_return_cmd(cmd); in pmcraid_process_ccn()
1769 static void pmcraid_set_timestamp(struct pmcraid_cmd *cmd);
1777 static void pmcraid_process_ldn(struct pmcraid_cmd *cmd) in pmcraid_process_ldn() argument
1779 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ldn()
1782 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_process_ldn()
1787 pinstance->ldn.cmd = NULL; in pmcraid_process_ldn()
1788 pmcraid_return_cmd(cmd); in pmcraid_process_ldn()
1809 pmcraid_set_timestamp(cmd); in pmcraid_process_ldn()
1819 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_process_ldn()
1820 if (cmd) in pmcraid_process_ldn()
1821 pmcraid_send_hcam_cmd(cmd); in pmcraid_process_ldn()
1842 static void pmcraid_unregister_hcams(struct pmcraid_cmd *cmd) in pmcraid_unregister_hcams() argument
1844 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_unregister_hcams()
1863 pmcraid_reset_alert(cmd); in pmcraid_unregister_hcams()
1871 pmcraid_cancel_ldn(cmd); in pmcraid_unregister_hcams()
1912 static void pmcraid_soft_reset(struct pmcraid_cmd *cmd) in pmcraid_soft_reset() argument
1914 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_soft_reset()
1922 cmd->cmd_done = pmcraid_ioa_reset; in pmcraid_soft_reset()
1923 cmd->timer.expires = jiffies + in pmcraid_soft_reset()
1925 cmd->timer.function = pmcraid_timeout_handler; in pmcraid_soft_reset()
1927 if (!timer_pending(&cmd->timer)) in pmcraid_soft_reset()
1928 add_timer(&cmd->timer); in pmcraid_soft_reset()
1981 struct pmcraid_cmd *cmd, *temp; in pmcraid_fail_outstanding_cmds() local
1988 list_for_each_entry_safe(cmd, temp, &pinstance->pending_cmd_pool, in pmcraid_fail_outstanding_cmds()
1990 list_del(&cmd->free_list); in pmcraid_fail_outstanding_cmds()
1993 cmd->ioa_cb->ioasa.ioasc = in pmcraid_fail_outstanding_cmds()
1995 cmd->ioa_cb->ioasa.ilid = in pmcraid_fail_outstanding_cmds()
1999 del_timer(&cmd->timer); in pmcraid_fail_outstanding_cmds()
2006 if (cmd->scsi_cmd) { in pmcraid_fail_outstanding_cmds()
2008 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_fail_outstanding_cmds()
2009 __le32 resp = cmd->ioa_cb->ioarcb.response_handle; in pmcraid_fail_outstanding_cmds()
2014 pmcraid_return_cmd(cmd); in pmcraid_fail_outstanding_cmds()
2018 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_fail_outstanding_cmds()
2021 } else if (cmd->cmd_done == pmcraid_internal_done || in pmcraid_fail_outstanding_cmds()
2022 cmd->cmd_done == pmcraid_erp_done) { in pmcraid_fail_outstanding_cmds()
2023 cmd->cmd_done(cmd); in pmcraid_fail_outstanding_cmds()
2024 } else if (cmd->cmd_done != pmcraid_ioa_reset && in pmcraid_fail_outstanding_cmds()
2025 cmd->cmd_done != pmcraid_ioa_shutdown_done) { in pmcraid_fail_outstanding_cmds()
2026 pmcraid_return_cmd(cmd); in pmcraid_fail_outstanding_cmds()
2051 static void pmcraid_ioa_reset(struct pmcraid_cmd *cmd) in pmcraid_ioa_reset() argument
2053 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_reset()
2058 if (pinstance->reset_cmd != cmd) { in pmcraid_ioa_reset()
2060 pinstance->reset_cmd = cmd; in pmcraid_ioa_reset()
2064 pinstance->ioa_state, cmd); in pmcraid_ioa_reset()
2084 pmcraid_reset_alert(cmd); in pmcraid_ioa_reset()
2102 pmcraid_reinit_cmdblk(cmd); in pmcraid_ioa_reset()
2103 pmcraid_identify_hrrq(cmd); in pmcraid_ioa_reset()
2106 pmcraid_soft_reset(cmd); in pmcraid_ioa_reset()
2113 pmcraid_reset_alert(cmd); in pmcraid_ioa_reset()
2124 pmcraid_start_bist(cmd); in pmcraid_ioa_reset()
2161 pmcraid_reset_alert(cmd); in pmcraid_ioa_reset()
2185 pmcraid_reinit_cmdblk(cmd); in pmcraid_ioa_reset()
2186 pmcraid_identify_hrrq(cmd); in pmcraid_ioa_reset()
2189 pmcraid_soft_reset(cmd); in pmcraid_ioa_reset()
2205 pmcraid_identify_hrrq(cmd); in pmcraid_ioa_reset()
2231 pmcraid_reinit_cmdblk(cmd); in pmcraid_ioa_reset()
2232 pmcraid_unregister_hcams(cmd); in pmcraid_ioa_reset()
2248 pmcraid_return_cmd(cmd); in pmcraid_ioa_reset()
2275 struct pmcraid_cmd *cmd; in pmcraid_initiate_reset() local
2282 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_initiate_reset()
2284 if (cmd == NULL) { in pmcraid_initiate_reset()
2290 pinstance->reset_cmd = cmd; in pmcraid_initiate_reset()
2294 pmcraid_ioa_reset(cmd); in pmcraid_initiate_reset()
2414 static void pmcraid_request_sense(struct pmcraid_cmd *cmd) in pmcraid_request_sense() argument
2416 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_request_sense()
2418 struct device *dev = &cmd->drv_inst->pdev->dev; in pmcraid_request_sense()
2420 cmd->sense_buffer = cmd->scsi_cmd->sense_buffer; in pmcraid_request_sense()
2421 cmd->sense_buffer_dma = dma_map_single(dev, cmd->sense_buffer, in pmcraid_request_sense()
2423 if (dma_mapping_error(dev, cmd->sense_buffer_dma)) { in pmcraid_request_sense()
2426 pmcraid_erp_done(cmd); in pmcraid_request_sense()
2431 memset(&cmd->ioa_cb->ioasa, 0, sizeof(struct pmcraid_ioasa)); in pmcraid_request_sense()
2440 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_request_sense()
2447 ioadl->address = cpu_to_le64(cmd->sense_buffer_dma); in pmcraid_request_sense()
2456 pmcraid_send_cmd(cmd, pmcraid_erp_done, in pmcraid_request_sense()
2468 static void pmcraid_cancel_all(struct pmcraid_cmd *cmd, bool need_sense) in pmcraid_cancel_all() argument
2470 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_cancel_all()
2471 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_cancel_all()
2490 pmcraid_send_cmd(cmd, need_sense ? in pmcraid_cancel_all()
2504 static void pmcraid_frame_auto_sense(struct pmcraid_cmd *cmd) in pmcraid_frame_auto_sense() argument
2506 u8 *sense_buf = cmd->scsi_cmd->sense_buffer; in pmcraid_frame_auto_sense()
2507 struct pmcraid_resource_entry *res = cmd->scsi_cmd->device->hostdata; in pmcraid_frame_auto_sense()
2508 struct pmcraid_ioasa *ioasa = &cmd->ioa_cb->ioasa; in pmcraid_frame_auto_sense()
2513 cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION; in pmcraid_frame_auto_sense()
2576 static int pmcraid_error_handler(struct pmcraid_cmd *cmd) in pmcraid_error_handler() argument
2578 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_error_handler()
2580 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_error_handler()
2581 struct pmcraid_ioasa *ioasa = &cmd->ioa_cb->ioasa; in pmcraid_error_handler()
2599 pmcraid_frame_auto_sense(cmd); in pmcraid_error_handler()
2603 pmcraid_ioasc_logger(ioasc, cmd); in pmcraid_error_handler()
2660 pmcraid_cancel_all(cmd, sense_copied); in pmcraid_error_handler()
2662 pmcraid_erp_done(cmd); in pmcraid_error_handler()
2664 pmcraid_request_sense(cmd); in pmcraid_error_handler()
2698 struct pmcraid_cmd *cmd; in pmcraid_reset_device() local
2733 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_device()
2735 if (cmd == NULL) { in pmcraid_reset_device()
2741 ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_reset_device()
2752 init_completion(&cmd->wait_for_completion); in pmcraid_reset_device()
2753 cmd->completion_req = 1; in pmcraid_reset_device()
2756 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_reset_device()
2757 le32_to_cpu(cmd->ioa_cb->ioarcb.resource_handle), in pmcraid_reset_device()
2758 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle) >> 2); in pmcraid_reset_device()
2760 pmcraid_send_cmd(cmd, in pmcraid_reset_device()
2771 wait_for_completion(&cmd->wait_for_completion); in pmcraid_reset_device()
2776 pmcraid_return_cmd(cmd); in pmcraid_reset_device()
2778 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_reset_device()
2800 static int _pmcraid_io_done(struct pmcraid_cmd *cmd, int reslen, int ioasc) in _pmcraid_io_done() argument
2802 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in _pmcraid_io_done()
2808 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle) >> 2, in _pmcraid_io_done()
2809 cmd->ioa_cb->ioarcb.cdb[0], in _pmcraid_io_done()
2813 rc = pmcraid_error_handler(cmd); in _pmcraid_io_done()
2835 static void pmcraid_io_done(struct pmcraid_cmd *cmd) in pmcraid_io_done() argument
2837 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_io_done()
2838 u32 reslen = le32_to_cpu(cmd->ioa_cb->ioasa.residual_data_length); in pmcraid_io_done()
2840 if (_pmcraid_io_done(cmd, reslen, ioasc) == 0) in pmcraid_io_done()
2841 pmcraid_return_cmd(cmd); in pmcraid_io_done()
2852 static struct pmcraid_cmd *pmcraid_abort_cmd(struct pmcraid_cmd *cmd) in pmcraid_abort_cmd() argument
2857 pinstance = (struct pmcraid_instance *)cmd->drv_inst; in pmcraid_abort_cmd()
2866 pmcraid_prepare_cancel_cmd(cancel_cmd, cmd); in pmcraid_abort_cmd()
2869 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_abort_cmd()
2870 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle) >> 2); in pmcraid_abort_cmd()
2936 struct pmcraid_cmd *cmd; in pmcraid_eh_abort_handler() local
2975 list_for_each_entry(cmd, &pinstance->pending_cmd_pool, free_list) { in pmcraid_eh_abort_handler()
2977 if (cmd->scsi_cmd == scsi_cmd) { in pmcraid_eh_abort_handler()
2990 cancel_cmd = pmcraid_abort_cmd(cmd); in pmcraid_eh_abort_handler()
2996 cancel_cmd->res = cmd->scsi_cmd->device->hostdata; in pmcraid_eh_abort_handler()
3088 pmcraid_init_ioadls(struct pmcraid_cmd *cmd, int sgcount) in pmcraid_init_ioadls() argument
3091 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_init_ioadls()
3106 cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_init_ioadls()
3112 cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_init_ioadls()
3137 struct pmcraid_cmd *cmd in pmcraid_build_ioadl() argument
3143 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_build_ioadl()
3144 struct pmcraid_ioarcb *ioarcb = &(cmd->ioa_cb->ioarcb); in pmcraid_build_ioadl()
3170 ioadl = pmcraid_init_ioadls(cmd, nseg); in pmcraid_build_ioadl()
3202 struct pmcraid_cmd *cmd; in pmcraid_queuecommand_lck() local
3236 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_queuecommand_lck()
3238 if (cmd == NULL) { in pmcraid_queuecommand_lck()
3243 cmd->scsi_cmd = scsi_cmd; in pmcraid_queuecommand_lck()
3244 ioarcb = &(cmd->ioa_cb->ioarcb); in pmcraid_queuecommand_lck()
3256 cmd->cmd_done = pmcraid_io_done; in pmcraid_queuecommand_lck()
3276 rc = pmcraid_build_ioadl(pinstance, cmd); in pmcraid_queuecommand_lck()
3291 _pmcraid_fire_command(cmd); in pmcraid_queuecommand_lck()
3294 pmcraid_return_cmd(cmd); in pmcraid_queuecommand_lck()
3352 unsigned int cmd, in pmcraid_ioctl_driver() argument
3359 switch (cmd) { in pmcraid_ioctl_driver()
3385 int cmd, in pmcraid_check_ioctl_buffer() argument
3414 unsigned int cmd, in pmcraid_chr_ioctl() argument
3430 retval = pmcraid_check_ioctl_buffer(cmd, argp, hdr); in pmcraid_chr_ioctl()
3446 switch (_IOC_TYPE(cmd)) { in pmcraid_chr_ioctl()
3450 retval = pmcraid_ioctl_driver(pinstance, cmd, in pmcraid_chr_ioctl()
3913 struct pmcraid_cmd *cmd = NULL; in pmcraid_tasklet_function() local
3929 cmd = pinstance->cmd_list[cmd_index]; in pmcraid_tasklet_function()
3934 list_del(&cmd->free_list); in pmcraid_tasklet_function()
3937 del_timer(&cmd->timer); in pmcraid_tasklet_function()
3940 if (cmd->cmd_done == pmcraid_ioa_reset) { in pmcraid_tasklet_function()
3943 cmd->cmd_done(cmd); in pmcraid_tasklet_function()
3946 } else if (cmd->cmd_done != NULL) { in pmcraid_tasklet_function()
3947 cmd->cmd_done(cmd); in pmcraid_tasklet_function()
4831 static void pmcraid_complete_ioa_reset(struct pmcraid_cmd *cmd) in pmcraid_complete_ioa_reset() argument
4833 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_complete_ioa_reset()
4837 pmcraid_ioa_reset(cmd); in pmcraid_complete_ioa_reset()
4851 static void pmcraid_set_supported_devs(struct pmcraid_cmd *cmd) in pmcraid_set_supported_devs() argument
4853 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_set_supported_devs()
4856 pmcraid_reinit_cmdblk(cmd); in pmcraid_set_supported_devs()
4867 if (cmd->drv_inst->reinit_cfg_table) { in pmcraid_set_supported_devs()
4868 cmd->drv_inst->reinit_cfg_table = 0; in pmcraid_set_supported_devs()
4869 cmd->release = 1; in pmcraid_set_supported_devs()
4877 pmcraid_send_cmd(cmd, in pmcraid_set_supported_devs()
4892 static void pmcraid_set_timestamp(struct pmcraid_cmd *cmd) in pmcraid_set_timestamp() argument
4894 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_set_timestamp()
4895 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_set_timestamp()
4909 pmcraid_reinit_cmdblk(cmd); in pmcraid_set_timestamp()
4916 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_set_timestamp()
4933 pmcraid_send_cmd(cmd, pmcraid_set_supported_devs, in pmcraid_set_timestamp()
4936 pmcraid_send_cmd(cmd, pmcraid_return_cmd, in pmcraid_set_timestamp()
4955 static void pmcraid_init_res_table(struct pmcraid_cmd *cmd) in pmcraid_init_res_table() argument
4957 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_init_res_table()
5054 pmcraid_set_timestamp(cmd); in pmcraid_init_res_table()
5067 static void pmcraid_querycfg(struct pmcraid_cmd *cmd) in pmcraid_querycfg() argument
5069 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_querycfg()
5071 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_querycfg()
5093 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_querycfg()
5108 pmcraid_send_cmd(cmd, pmcraid_init_res_table, in pmcraid_querycfg()