Lines Matching refs:cmd
309 void pmcraid_init_cmdblk(struct pmcraid_cmd *cmd, int index) in pmcraid_init_cmdblk() argument
311 struct pmcraid_ioarcb *ioarcb = &(cmd->ioa_cb->ioarcb); in pmcraid_init_cmdblk()
312 dma_addr_t dma_addr = cmd->ioa_cb_bus_addr; in pmcraid_init_cmdblk()
319 cmd->index = index; in pmcraid_init_cmdblk()
328 memset(&cmd->ioa_cb->ioarcb.cdb, 0, PMCRAID_MAX_CDB_LEN); in pmcraid_init_cmdblk()
339 cmd->ioa_cb->ioasa.ioasc = 0; in pmcraid_init_cmdblk()
340 cmd->ioa_cb->ioasa.residual_data_length = 0; in pmcraid_init_cmdblk()
341 cmd->time_left = 0; in pmcraid_init_cmdblk()
344 cmd->cmd_done = NULL; in pmcraid_init_cmdblk()
345 cmd->scsi_cmd = NULL; in pmcraid_init_cmdblk()
346 cmd->release = 0; in pmcraid_init_cmdblk()
347 cmd->completion_req = 0; in pmcraid_init_cmdblk()
348 cmd->sense_buffer = 0; in pmcraid_init_cmdblk()
349 cmd->sense_buffer_dma = 0; in pmcraid_init_cmdblk()
350 cmd->dma_handle = 0; in pmcraid_init_cmdblk()
351 init_timer(&cmd->timer); in pmcraid_init_cmdblk()
362 static void pmcraid_reinit_cmdblk(struct pmcraid_cmd *cmd) in pmcraid_reinit_cmdblk() argument
364 pmcraid_init_cmdblk(cmd, -1); in pmcraid_reinit_cmdblk()
378 struct pmcraid_cmd *cmd = NULL; in pmcraid_get_free_cmd() local
385 cmd = list_entry(pinstance->free_cmd_pool.next, in pmcraid_get_free_cmd()
387 list_del(&cmd->free_list); in pmcraid_get_free_cmd()
392 if (cmd != NULL) in pmcraid_get_free_cmd()
393 pmcraid_reinit_cmdblk(cmd); in pmcraid_get_free_cmd()
394 return cmd; in pmcraid_get_free_cmd()
404 void pmcraid_return_cmd(struct pmcraid_cmd *cmd) in pmcraid_return_cmd() argument
406 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_return_cmd()
410 list_add_tail(&cmd->free_list, &pinstance->free_cmd_pool); in pmcraid_return_cmd()
560 static void pmcraid_bist_done(struct pmcraid_cmd *cmd) in pmcraid_bist_done() argument
562 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_bist_done()
571 cmd->time_left > 0) { in pmcraid_bist_done()
573 cmd->timer.expires = jiffies + cmd->time_left; in pmcraid_bist_done()
574 cmd->time_left = 0; in pmcraid_bist_done()
575 cmd->timer.data = (unsigned long)cmd; in pmcraid_bist_done()
576 cmd->timer.function = in pmcraid_bist_done()
578 add_timer(&cmd->timer); in pmcraid_bist_done()
580 cmd->time_left = 0; in pmcraid_bist_done()
583 pmcraid_ioa_reset(cmd); in pmcraid_bist_done()
594 static void pmcraid_start_bist(struct pmcraid_cmd *cmd) in pmcraid_start_bist() argument
596 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_start_bist()
607 cmd->time_left = msecs_to_jiffies(PMCRAID_BIST_TIMEOUT); in pmcraid_start_bist()
608 cmd->timer.data = (unsigned long)cmd; in pmcraid_start_bist()
609 cmd->timer.expires = jiffies + msecs_to_jiffies(PMCRAID_BIST_TIMEOUT); in pmcraid_start_bist()
610 cmd->timer.function = (void (*)(unsigned long))pmcraid_bist_done; in pmcraid_start_bist()
611 add_timer(&cmd->timer); in pmcraid_start_bist()
620 static void pmcraid_reset_alert_done(struct pmcraid_cmd *cmd) in pmcraid_reset_alert_done() argument
622 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert_done()
631 cmd->time_left <= 0) { in pmcraid_reset_alert_done()
634 pmcraid_ioa_reset(cmd); in pmcraid_reset_alert_done()
639 cmd->time_left -= PMCRAID_CHECK_FOR_RESET_TIMEOUT; in pmcraid_reset_alert_done()
640 cmd->timer.data = (unsigned long)cmd; in pmcraid_reset_alert_done()
641 cmd->timer.expires = jiffies + PMCRAID_CHECK_FOR_RESET_TIMEOUT; in pmcraid_reset_alert_done()
642 cmd->timer.function = in pmcraid_reset_alert_done()
644 add_timer(&cmd->timer); in pmcraid_reset_alert_done()
658 static void pmcraid_reset_alert(struct pmcraid_cmd *cmd) in pmcraid_reset_alert() argument
660 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert()
678 cmd->time_left = PMCRAID_RESET_TIMEOUT; in pmcraid_reset_alert()
679 cmd->timer.data = (unsigned long)cmd; in pmcraid_reset_alert()
680 cmd->timer.expires = jiffies + PMCRAID_CHECK_FOR_RESET_TIMEOUT; in pmcraid_reset_alert()
681 cmd->timer.function = in pmcraid_reset_alert()
683 add_timer(&cmd->timer); in pmcraid_reset_alert()
693 pmcraid_start_bist(cmd); in pmcraid_reset_alert()
707 static void pmcraid_timeout_handler(struct pmcraid_cmd *cmd) in pmcraid_timeout_handler() argument
709 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_timeout_handler()
714 cmd->ioa_cb->ioarcb.cdb[0]); in pmcraid_timeout_handler()
725 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_timeout_handler()
730 if (cmd == NULL) { in pmcraid_timeout_handler()
737 pinstance->reset_cmd = cmd; in pmcraid_timeout_handler()
742 if (pinstance->reset_cmd != cmd) { in pmcraid_timeout_handler()
755 if (cmd == pinstance->reset_cmd) in pmcraid_timeout_handler()
756 cmd->cmd_done = pmcraid_ioa_reset; in pmcraid_timeout_handler()
767 pmcraid_reset_alert(cmd); in pmcraid_timeout_handler()
779 static void pmcraid_internal_done(struct pmcraid_cmd *cmd) in pmcraid_internal_done() argument
782 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_internal_done()
783 le32_to_cpu(cmd->ioa_cb->ioasa.ioasc)); in pmcraid_internal_done()
790 if (cmd->completion_req) { in pmcraid_internal_done()
791 cmd->completion_req = 0; in pmcraid_internal_done()
792 complete(&cmd->wait_for_completion); in pmcraid_internal_done()
799 if (cmd->release) { in pmcraid_internal_done()
800 cmd->release = 0; in pmcraid_internal_done()
801 pmcraid_return_cmd(cmd); in pmcraid_internal_done()
817 static void pmcraid_reinit_cfgtable_done(struct pmcraid_cmd *cmd) in pmcraid_reinit_cfgtable_done() argument
820 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_reinit_cfgtable_done()
821 le32_to_cpu(cmd->ioa_cb->ioasa.ioasc)); in pmcraid_reinit_cfgtable_done()
823 if (cmd->release) { in pmcraid_reinit_cfgtable_done()
824 cmd->release = 0; in pmcraid_reinit_cfgtable_done()
825 pmcraid_return_cmd(cmd); in pmcraid_reinit_cfgtable_done()
828 schedule_work(&cmd->drv_inst->worker_q); in pmcraid_reinit_cfgtable_done()
841 static void pmcraid_erp_done(struct pmcraid_cmd *cmd) in pmcraid_erp_done() argument
843 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_erp_done()
844 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_erp_done()
845 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_erp_done()
851 cmd->ioa_cb->ioarcb.cdb[0], ioasc); in pmcraid_erp_done()
857 if (cmd->sense_buffer != NULL) { in pmcraid_erp_done()
859 cmd->sense_buffer, in pmcraid_erp_done()
863 cmd->sense_buffer, cmd->sense_buffer_dma); in pmcraid_erp_done()
864 cmd->sense_buffer = NULL; in pmcraid_erp_done()
865 cmd->sense_buffer_dma = 0; in pmcraid_erp_done()
869 pmcraid_return_cmd(cmd); in pmcraid_erp_done()
884 static void _pmcraid_fire_command(struct pmcraid_cmd *cmd) in _pmcraid_fire_command() argument
886 struct pmcraid_instance *pinstance = cmd->drv_inst; in _pmcraid_fire_command()
895 list_add_tail(&cmd->free_list, &pinstance->pending_cmd_pool); in _pmcraid_fire_command()
901 iowrite32(le32_to_cpu(cmd->ioa_cb->ioarcb.ioarcb_bus_addr), in _pmcraid_fire_command()
920 struct pmcraid_cmd *cmd, in pmcraid_send_cmd() argument
927 cmd->cmd_done = cmd_done; in pmcraid_send_cmd()
931 cmd->timer.data = (unsigned long)cmd; in pmcraid_send_cmd()
932 cmd->timer.expires = jiffies + timeout; in pmcraid_send_cmd()
933 cmd->timer.function = (void (*)(unsigned long))timeout_func; in pmcraid_send_cmd()
934 add_timer(&cmd->timer); in pmcraid_send_cmd()
938 _pmcraid_fire_command(cmd); in pmcraid_send_cmd()
948 static void pmcraid_ioa_shutdown_done(struct pmcraid_cmd *cmd) in pmcraid_ioa_shutdown_done() argument
950 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_shutdown_done()
954 pmcraid_ioa_reset(cmd); in pmcraid_ioa_shutdown_done()
966 static void pmcraid_ioa_shutdown(struct pmcraid_cmd *cmd) in pmcraid_ioa_shutdown() argument
969 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_ioa_shutdown()
970 le32_to_cpu(cmd->ioa_cb->ioasa.ioasc)); in pmcraid_ioa_shutdown()
975 pmcraid_reinit_cmdblk(cmd); in pmcraid_ioa_shutdown()
976 cmd->ioa_cb->ioarcb.request_type = REQ_TYPE_IOACMD; in pmcraid_ioa_shutdown()
977 cmd->ioa_cb->ioarcb.resource_handle = in pmcraid_ioa_shutdown()
979 cmd->ioa_cb->ioarcb.cdb[0] = PMCRAID_IOA_SHUTDOWN; in pmcraid_ioa_shutdown()
980 cmd->ioa_cb->ioarcb.cdb[1] = PMCRAID_SHUTDOWN_NORMAL; in pmcraid_ioa_shutdown()
984 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle)); in pmcraid_ioa_shutdown()
986 pmcraid_notify_ioastate(cmd->drv_inst, PMC_DEVICE_EVENT_SHUTDOWN_START); in pmcraid_ioa_shutdown()
988 pmcraid_send_cmd(cmd, pmcraid_ioa_shutdown_done, in pmcraid_ioa_shutdown()
1003 static void pmcraid_get_fwversion_done(struct pmcraid_cmd *cmd) in pmcraid_get_fwversion_done() argument
1005 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion_done()
1006 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_get_fwversion_done()
1017 pmcraid_reset_alert(cmd); in pmcraid_get_fwversion_done()
1020 pmcraid_querycfg(cmd); in pmcraid_get_fwversion_done()
1032 static void pmcraid_get_fwversion(struct pmcraid_cmd *cmd) in pmcraid_get_fwversion() argument
1034 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_get_fwversion()
1036 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion()
1039 pmcraid_reinit_cmdblk(cmd); in pmcraid_get_fwversion()
1050 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_get_fwversion()
1063 pmcraid_send_cmd(cmd, pmcraid_get_fwversion_done, in pmcraid_get_fwversion()
1074 static void pmcraid_identify_hrrq(struct pmcraid_cmd *cmd) in pmcraid_identify_hrrq() argument
1076 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_identify_hrrq()
1077 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_identify_hrrq()
1078 int index = cmd->hrrq_index; in pmcraid_identify_hrrq()
1083 pmcraid_reinit_cmdblk(cmd); in pmcraid_identify_hrrq()
1084 cmd->hrrq_index = index + 1; in pmcraid_identify_hrrq()
1086 if (cmd->hrrq_index < pinstance->num_hrrq) { in pmcraid_identify_hrrq()
1089 cmd->hrrq_index = 0; in pmcraid_identify_hrrq()
1115 pmcraid_send_cmd(cmd, done_function, in pmcraid_identify_hrrq()
1120 static void pmcraid_process_ccn(struct pmcraid_cmd *cmd);
1121 static void pmcraid_process_ldn(struct pmcraid_cmd *cmd);
1131 static void pmcraid_send_hcam_cmd(struct pmcraid_cmd *cmd) in pmcraid_send_hcam_cmd() argument
1133 if (cmd->ioa_cb->ioarcb.cdb[1] == PMCRAID_HCAM_CODE_CONFIG_CHANGE) in pmcraid_send_hcam_cmd()
1134 atomic_set(&(cmd->drv_inst->ccn.ignore), 0); in pmcraid_send_hcam_cmd()
1136 atomic_set(&(cmd->drv_inst->ldn.ignore), 0); in pmcraid_send_hcam_cmd()
1138 pmcraid_send_cmd(cmd, cmd->cmd_done, 0, NULL); in pmcraid_send_hcam_cmd()
1156 struct pmcraid_cmd *cmd; in pmcraid_init_hcam() local
1164 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_init_hcam()
1166 if (!cmd) { in pmcraid_init_hcam()
1168 return cmd; in pmcraid_init_hcam()
1184 hcam->cmd = cmd; in pmcraid_init_hcam()
1186 ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_init_hcam()
1187 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_init_hcam()
1207 cmd->cmd_done = cmd_done; in pmcraid_init_hcam()
1208 return cmd; in pmcraid_init_hcam()
1223 struct pmcraid_cmd *cmd = pmcraid_init_hcam(pinstance, type); in pmcraid_send_hcam() local
1224 pmcraid_send_hcam_cmd(cmd); in pmcraid_send_hcam()
1235 struct pmcraid_cmd *cmd, in pmcraid_prepare_cancel_cmd() argument
1239 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_prepare_cancel_cmd()
1266 struct pmcraid_cmd *cmd, in pmcraid_cancel_hcam() argument
1274 pinstance = cmd->drv_inst; in pmcraid_cancel_hcam()
1281 if (hcam->cmd == NULL) in pmcraid_cancel_hcam()
1284 pmcraid_prepare_cancel_cmd(cmd, hcam->cmd); in pmcraid_cancel_hcam()
1289 pmcraid_send_cmd(cmd, cmd_done, in pmcraid_cancel_hcam()
1299 static void pmcraid_cancel_ccn(struct pmcraid_cmd *cmd) in pmcraid_cancel_ccn() argument
1302 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_cancel_ccn()
1303 le32_to_cpu(cmd->ioa_cb->ioasa.ioasc)); in pmcraid_cancel_ccn()
1305 pmcraid_reinit_cmdblk(cmd); in pmcraid_cancel_ccn()
1307 pmcraid_cancel_hcam(cmd, in pmcraid_cancel_ccn()
1317 static void pmcraid_cancel_ldn(struct pmcraid_cmd *cmd) in pmcraid_cancel_ldn() argument
1319 pmcraid_cancel_hcam(cmd, in pmcraid_cancel_ldn()
1548 struct pmcraid_cmd *cmd; in pmcraid_handle_config_change() local
1687 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_handle_config_change()
1688 if (cmd) in pmcraid_handle_config_change()
1689 pmcraid_send_hcam_cmd(cmd); in pmcraid_handle_config_change()
1713 void pmcraid_ioasc_logger(u32 ioasc, struct pmcraid_cmd *cmd) in pmcraid_ioasc_logger() argument
1718 cmd->drv_inst->current_log_level < error_info->log_level) in pmcraid_ioasc_logger()
1723 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_ioasc_logger()
1724 cmd->ioa_cb->ioarcb.resource_handle, in pmcraid_ioasc_logger()
1785 static void pmcraid_process_ccn(struct pmcraid_cmd *cmd) in pmcraid_process_ccn() argument
1787 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ccn()
1788 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_process_ccn()
1791 pinstance->ccn.cmd = NULL; in pmcraid_process_ccn()
1792 pmcraid_return_cmd(cmd); in pmcraid_process_ccn()
1820 static void pmcraid_set_timestamp(struct pmcraid_cmd *cmd);
1822 static void pmcraid_process_ldn(struct pmcraid_cmd *cmd) in pmcraid_process_ldn() argument
1824 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ldn()
1827 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_process_ldn()
1832 pinstance->ldn.cmd = NULL; in pmcraid_process_ldn()
1833 pmcraid_return_cmd(cmd); in pmcraid_process_ldn()
1854 pmcraid_set_timestamp(cmd); in pmcraid_process_ldn()
1864 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_process_ldn()
1865 if (cmd) in pmcraid_process_ldn()
1866 pmcraid_send_hcam_cmd(cmd); in pmcraid_process_ldn()
1887 static void pmcraid_unregister_hcams(struct pmcraid_cmd *cmd) in pmcraid_unregister_hcams() argument
1889 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_unregister_hcams()
1908 pmcraid_reset_alert(cmd); in pmcraid_unregister_hcams()
1916 pmcraid_cancel_ldn(cmd); in pmcraid_unregister_hcams()
1957 static void pmcraid_soft_reset(struct pmcraid_cmd *cmd) in pmcraid_soft_reset() argument
1959 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_soft_reset()
1967 cmd->cmd_done = pmcraid_ioa_reset; in pmcraid_soft_reset()
1968 cmd->timer.data = (unsigned long)cmd; in pmcraid_soft_reset()
1969 cmd->timer.expires = jiffies + in pmcraid_soft_reset()
1971 cmd->timer.function = (void (*)(unsigned long))pmcraid_timeout_handler; in pmcraid_soft_reset()
1973 if (!timer_pending(&cmd->timer)) in pmcraid_soft_reset()
1974 add_timer(&cmd->timer); in pmcraid_soft_reset()
2027 struct pmcraid_cmd *cmd, *temp; in pmcraid_fail_outstanding_cmds() local
2034 list_for_each_entry_safe(cmd, temp, &pinstance->pending_cmd_pool, in pmcraid_fail_outstanding_cmds()
2036 list_del(&cmd->free_list); in pmcraid_fail_outstanding_cmds()
2039 cmd->ioa_cb->ioasa.ioasc = in pmcraid_fail_outstanding_cmds()
2041 cmd->ioa_cb->ioasa.ilid = in pmcraid_fail_outstanding_cmds()
2045 del_timer(&cmd->timer); in pmcraid_fail_outstanding_cmds()
2052 if (cmd->scsi_cmd) { in pmcraid_fail_outstanding_cmds()
2054 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_fail_outstanding_cmds()
2055 __le32 resp = cmd->ioa_cb->ioarcb.response_handle; in pmcraid_fail_outstanding_cmds()
2060 pmcraid_return_cmd(cmd); in pmcraid_fail_outstanding_cmds()
2064 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_fail_outstanding_cmds()
2067 } else if (cmd->cmd_done == pmcraid_internal_done || in pmcraid_fail_outstanding_cmds()
2068 cmd->cmd_done == pmcraid_erp_done) { in pmcraid_fail_outstanding_cmds()
2069 cmd->cmd_done(cmd); in pmcraid_fail_outstanding_cmds()
2070 } else if (cmd->cmd_done != pmcraid_ioa_reset && in pmcraid_fail_outstanding_cmds()
2071 cmd->cmd_done != pmcraid_ioa_shutdown_done) { in pmcraid_fail_outstanding_cmds()
2072 pmcraid_return_cmd(cmd); in pmcraid_fail_outstanding_cmds()
2097 static void pmcraid_ioa_reset(struct pmcraid_cmd *cmd) in pmcraid_ioa_reset() argument
2099 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_reset()
2104 if (pinstance->reset_cmd != cmd) { in pmcraid_ioa_reset()
2106 pinstance->reset_cmd = cmd; in pmcraid_ioa_reset()
2110 pinstance->ioa_state, cmd); in pmcraid_ioa_reset()
2130 pmcraid_reset_alert(cmd); in pmcraid_ioa_reset()
2148 pmcraid_reinit_cmdblk(cmd); in pmcraid_ioa_reset()
2149 pmcraid_identify_hrrq(cmd); in pmcraid_ioa_reset()
2152 pmcraid_soft_reset(cmd); in pmcraid_ioa_reset()
2159 pmcraid_reset_alert(cmd); in pmcraid_ioa_reset()
2170 pmcraid_start_bist(cmd); in pmcraid_ioa_reset()
2207 pmcraid_reset_alert(cmd); in pmcraid_ioa_reset()
2231 pmcraid_reinit_cmdblk(cmd); in pmcraid_ioa_reset()
2232 pmcraid_identify_hrrq(cmd); in pmcraid_ioa_reset()
2235 pmcraid_soft_reset(cmd); in pmcraid_ioa_reset()
2251 pmcraid_identify_hrrq(cmd); in pmcraid_ioa_reset()
2277 pmcraid_reinit_cmdblk(cmd); in pmcraid_ioa_reset()
2278 pmcraid_unregister_hcams(cmd); in pmcraid_ioa_reset()
2294 pmcraid_return_cmd(cmd); in pmcraid_ioa_reset()
2321 struct pmcraid_cmd *cmd; in pmcraid_initiate_reset() local
2328 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_initiate_reset()
2330 if (cmd == NULL) { in pmcraid_initiate_reset()
2336 pinstance->reset_cmd = cmd; in pmcraid_initiate_reset()
2340 pmcraid_ioa_reset(cmd); in pmcraid_initiate_reset()
2463 static void pmcraid_request_sense(struct pmcraid_cmd *cmd) in pmcraid_request_sense() argument
2465 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_request_sense()
2469 cmd->sense_buffer = pci_alloc_consistent(cmd->drv_inst->pdev, in pmcraid_request_sense()
2471 &cmd->sense_buffer_dma); in pmcraid_request_sense()
2473 if (cmd->sense_buffer == NULL) { in pmcraid_request_sense()
2476 pmcraid_erp_done(cmd); in pmcraid_request_sense()
2481 memset(&cmd->ioa_cb->ioasa, 0, sizeof(struct pmcraid_ioasa)); in pmcraid_request_sense()
2490 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_request_sense()
2497 ioadl->address = cpu_to_le64(cmd->sense_buffer_dma); in pmcraid_request_sense()
2506 pmcraid_send_cmd(cmd, pmcraid_erp_done, in pmcraid_request_sense()
2518 static void pmcraid_cancel_all(struct pmcraid_cmd *cmd, u32 sense) in pmcraid_cancel_all() argument
2520 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_cancel_all()
2521 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_cancel_all()
2542 pmcraid_send_cmd(cmd, cmd_done, in pmcraid_cancel_all()
2555 static void pmcraid_frame_auto_sense(struct pmcraid_cmd *cmd) in pmcraid_frame_auto_sense() argument
2557 u8 *sense_buf = cmd->scsi_cmd->sense_buffer; in pmcraid_frame_auto_sense()
2558 struct pmcraid_resource_entry *res = cmd->scsi_cmd->device->hostdata; in pmcraid_frame_auto_sense()
2559 struct pmcraid_ioasa *ioasa = &cmd->ioa_cb->ioasa; in pmcraid_frame_auto_sense()
2564 cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION; in pmcraid_frame_auto_sense()
2627 static int pmcraid_error_handler(struct pmcraid_cmd *cmd) in pmcraid_error_handler() argument
2629 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_error_handler()
2631 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_error_handler()
2632 struct pmcraid_ioasa *ioasa = &cmd->ioa_cb->ioasa; in pmcraid_error_handler()
2650 pmcraid_frame_auto_sense(cmd); in pmcraid_error_handler()
2654 pmcraid_ioasc_logger(ioasc, cmd); in pmcraid_error_handler()
2711 pmcraid_cancel_all(cmd, sense_copied); in pmcraid_error_handler()
2713 pmcraid_erp_done(cmd); in pmcraid_error_handler()
2715 pmcraid_request_sense(cmd); in pmcraid_error_handler()
2749 struct pmcraid_cmd *cmd; in pmcraid_reset_device() local
2784 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_device()
2786 if (cmd == NULL) { in pmcraid_reset_device()
2792 ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_reset_device()
2803 init_completion(&cmd->wait_for_completion); in pmcraid_reset_device()
2804 cmd->completion_req = 1; in pmcraid_reset_device()
2807 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_reset_device()
2808 le32_to_cpu(cmd->ioa_cb->ioarcb.resource_handle), in pmcraid_reset_device()
2809 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle) >> 2); in pmcraid_reset_device()
2811 pmcraid_send_cmd(cmd, in pmcraid_reset_device()
2822 wait_for_completion(&cmd->wait_for_completion); in pmcraid_reset_device()
2827 pmcraid_return_cmd(cmd); in pmcraid_reset_device()
2829 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_reset_device()
2851 static int _pmcraid_io_done(struct pmcraid_cmd *cmd, int reslen, int ioasc) in _pmcraid_io_done() argument
2853 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in _pmcraid_io_done()
2859 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle) >> 2, in _pmcraid_io_done()
2860 cmd->ioa_cb->ioarcb.cdb[0], in _pmcraid_io_done()
2864 rc = pmcraid_error_handler(cmd); in _pmcraid_io_done()
2886 static void pmcraid_io_done(struct pmcraid_cmd *cmd) in pmcraid_io_done() argument
2888 u32 ioasc = le32_to_cpu(cmd->ioa_cb->ioasa.ioasc); in pmcraid_io_done()
2889 u32 reslen = le32_to_cpu(cmd->ioa_cb->ioasa.residual_data_length); in pmcraid_io_done()
2891 if (_pmcraid_io_done(cmd, reslen, ioasc) == 0) in pmcraid_io_done()
2892 pmcraid_return_cmd(cmd); in pmcraid_io_done()
2903 static struct pmcraid_cmd *pmcraid_abort_cmd(struct pmcraid_cmd *cmd) in pmcraid_abort_cmd() argument
2909 pinstance = (struct pmcraid_instance *)cmd->drv_inst; in pmcraid_abort_cmd()
2910 res = cmd->scsi_cmd->device->hostdata; in pmcraid_abort_cmd()
2919 pmcraid_prepare_cancel_cmd(cancel_cmd, cmd); in pmcraid_abort_cmd()
2922 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_abort_cmd()
2923 cmd->ioa_cb->ioarcb.response_handle >> 2); in pmcraid_abort_cmd()
2989 struct pmcraid_cmd *cmd; in pmcraid_eh_abort_handler() local
3028 list_for_each_entry(cmd, &pinstance->pending_cmd_pool, free_list) { in pmcraid_eh_abort_handler()
3030 if (cmd->scsi_cmd == scsi_cmd) { in pmcraid_eh_abort_handler()
3043 cancel_cmd = pmcraid_abort_cmd(cmd); in pmcraid_eh_abort_handler()
3049 cancel_cmd->res = cmd->scsi_cmd->device->hostdata; in pmcraid_eh_abort_handler()
3141 pmcraid_init_ioadls(struct pmcraid_cmd *cmd, int sgcount) in pmcraid_init_ioadls() argument
3144 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_init_ioadls()
3160 cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_init_ioadls()
3166 cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_init_ioadls()
3191 struct pmcraid_cmd *cmd in pmcraid_build_ioadl() argument
3197 struct scsi_cmnd *scsi_cmd = cmd->scsi_cmd; in pmcraid_build_ioadl()
3198 struct pmcraid_ioarcb *ioarcb = &(cmd->ioa_cb->ioarcb); in pmcraid_build_ioadl()
3224 ioadl = pmcraid_init_ioadls(cmd, nseg); in pmcraid_build_ioadl()
3419 struct pmcraid_cmd *cmd; in pmcraid_queuecommand_lck() local
3454 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_queuecommand_lck()
3456 if (cmd == NULL) { in pmcraid_queuecommand_lck()
3461 cmd->scsi_cmd = scsi_cmd; in pmcraid_queuecommand_lck()
3462 ioarcb = &(cmd->ioa_cb->ioarcb); in pmcraid_queuecommand_lck()
3474 cmd->cmd_done = pmcraid_io_done; in pmcraid_queuecommand_lck()
3494 rc = pmcraid_build_ioadl(pinstance, cmd); in pmcraid_queuecommand_lck()
3509 _pmcraid_fire_command(cmd); in pmcraid_queuecommand_lck()
3512 pmcraid_return_cmd(cmd); in pmcraid_queuecommand_lck()
3570 struct pmcraid_cmd *cmd, in pmcraid_build_passthrough_ioadls() argument
3577 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_build_passthrough_ioadls()
3588 sglist->num_dma_sg = pci_map_sg(cmd->drv_inst->pdev, in pmcraid_build_passthrough_ioadls()
3593 dev_err(&cmd->drv_inst->pdev->dev, in pmcraid_build_passthrough_ioadls()
3599 cmd->sglist = sglist; in pmcraid_build_passthrough_ioadls()
3602 ioadl = pmcraid_init_ioadls(cmd, sglist->num_dma_sg); in pmcraid_build_passthrough_ioadls()
3629 struct pmcraid_cmd *cmd, in pmcraid_release_passthrough_ioadls() argument
3634 struct pmcraid_sglist *sglist = cmd->sglist; in pmcraid_release_passthrough_ioadls()
3637 pci_unmap_sg(cmd->drv_inst->pdev, in pmcraid_release_passthrough_ioadls()
3642 cmd->sglist = NULL; in pmcraid_release_passthrough_ioadls()
3665 struct pmcraid_cmd *cmd; in pmcraid_ioctl_passthrough() local
3751 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_ioctl_passthrough()
3753 if (!cmd) { in pmcraid_ioctl_passthrough()
3759 cmd->scsi_cmd = NULL; in pmcraid_ioctl_passthrough()
3760 ioarcb = &(cmd->ioa_cb->ioarcb); in pmcraid_ioctl_passthrough()
3790 rc = pmcraid_build_passthrough_ioadls(cmd, in pmcraid_ioctl_passthrough()
3806 rc = pmcraid_copy_sglist(cmd->sglist, in pmcraid_ioctl_passthrough()
3819 cmd->cmd_done = pmcraid_internal_done; in pmcraid_ioctl_passthrough()
3820 init_completion(&cmd->wait_for_completion); in pmcraid_ioctl_passthrough()
3821 cmd->completion_req = 1; in pmcraid_ioctl_passthrough()
3824 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle) >> 2, in pmcraid_ioctl_passthrough()
3825 cmd->ioa_cb->ioarcb.cdb[0], in pmcraid_ioctl_passthrough()
3826 le32_to_cpu(cmd->ioa_cb->ioarcb.resource_handle)); in pmcraid_ioctl_passthrough()
3829 _pmcraid_fire_command(cmd); in pmcraid_ioctl_passthrough()
3845 wait_for_completion(&cmd->wait_for_completion); in pmcraid_ioctl_passthrough()
3847 &cmd->wait_for_completion, in pmcraid_ioctl_passthrough()
3851 le32_to_cpu(cmd->ioa_cb->ioarcb.response_handle >> 2), in pmcraid_ioctl_passthrough()
3852 cmd->ioa_cb->ioarcb.cdb[0]); in pmcraid_ioctl_passthrough()
3855 cancel_cmd = pmcraid_abort_cmd(cmd); in pmcraid_ioctl_passthrough()
3882 &cmd->wait_for_completion, in pmcraid_ioctl_passthrough()
3884 pmcraid_reset_bringup(cmd->drv_inst); in pmcraid_ioctl_passthrough()
3894 if (copy_to_user(ioasa, &cmd->ioa_cb->ioasa, in pmcraid_ioctl_passthrough()
3904 rc = pmcraid_copy_sglist(cmd->sglist, in pmcraid_ioctl_passthrough()
3915 pmcraid_release_passthrough_ioadls(cmd, request_size, direction); in pmcraid_ioctl_passthrough()
3916 pmcraid_return_cmd(cmd); in pmcraid_ioctl_passthrough()
3940 unsigned int cmd, in pmcraid_ioctl_driver() argument
3947 if (!access_ok(VERIFY_READ, user_buffer, _IOC_SIZE(cmd))) { in pmcraid_ioctl_driver()
3952 switch (cmd) { in pmcraid_ioctl_driver()
3978 int cmd, in pmcraid_check_ioctl_buffer() argument
4001 if ((_IOC_DIR(cmd) & _IOC_READ) == _IOC_READ) in pmcraid_check_ioctl_buffer()
4021 unsigned int cmd, in pmcraid_chr_ioctl() argument
4036 retval = pmcraid_check_ioctl_buffer(cmd, (void *)arg, hdr); in pmcraid_chr_ioctl()
4052 switch (_IOC_TYPE(cmd)) { in pmcraid_chr_ioctl()
4058 if (cmd == PMCRAID_IOCTL_DOWNLOAD_MICROCODE) in pmcraid_chr_ioctl()
4062 cmd, in pmcraid_chr_ioctl()
4066 if (cmd == PMCRAID_IOCTL_DOWNLOAD_MICROCODE) in pmcraid_chr_ioctl()
4073 cmd, in pmcraid_chr_ioctl()
4536 struct pmcraid_cmd *cmd = NULL; in pmcraid_tasklet_function() local
4552 cmd = pinstance->cmd_list[cmd_index]; in pmcraid_tasklet_function()
4557 list_del(&cmd->free_list); in pmcraid_tasklet_function()
4560 del_timer(&cmd->timer); in pmcraid_tasklet_function()
4563 if (cmd->cmd_done == pmcraid_ioa_reset) { in pmcraid_tasklet_function()
4566 cmd->cmd_done(cmd); in pmcraid_tasklet_function()
4569 } else if (cmd->cmd_done != NULL) { in pmcraid_tasklet_function()
4570 cmd->cmd_done(cmd); in pmcraid_tasklet_function()
5498 static void pmcraid_complete_ioa_reset(struct pmcraid_cmd *cmd) in pmcraid_complete_ioa_reset() argument
5500 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_complete_ioa_reset()
5504 pmcraid_ioa_reset(cmd); in pmcraid_complete_ioa_reset()
5518 static void pmcraid_set_supported_devs(struct pmcraid_cmd *cmd) in pmcraid_set_supported_devs() argument
5520 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_set_supported_devs()
5523 pmcraid_reinit_cmdblk(cmd); in pmcraid_set_supported_devs()
5534 if (cmd->drv_inst->reinit_cfg_table) { in pmcraid_set_supported_devs()
5535 cmd->drv_inst->reinit_cfg_table = 0; in pmcraid_set_supported_devs()
5536 cmd->release = 1; in pmcraid_set_supported_devs()
5544 pmcraid_send_cmd(cmd, in pmcraid_set_supported_devs()
5559 static void pmcraid_set_timestamp(struct pmcraid_cmd *cmd) in pmcraid_set_timestamp() argument
5561 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_set_timestamp()
5562 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_set_timestamp()
5577 pmcraid_reinit_cmdblk(cmd); in pmcraid_set_timestamp()
5584 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_set_timestamp()
5601 pmcraid_send_cmd(cmd, pmcraid_set_supported_devs, in pmcraid_set_timestamp()
5604 pmcraid_send_cmd(cmd, pmcraid_return_cmd, in pmcraid_set_timestamp()
5623 static void pmcraid_init_res_table(struct pmcraid_cmd *cmd) in pmcraid_init_res_table() argument
5625 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_init_res_table()
5722 pmcraid_set_timestamp(cmd); in pmcraid_init_res_table()
5735 static void pmcraid_querycfg(struct pmcraid_cmd *cmd) in pmcraid_querycfg() argument
5737 struct pmcraid_ioarcb *ioarcb = &cmd->ioa_cb->ioarcb; in pmcraid_querycfg()
5739 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_querycfg()
5761 ioarcb->ioadl_bus_addr = cpu_to_le64((cmd->ioa_cb_bus_addr) + in pmcraid_querycfg()
5776 pmcraid_send_cmd(cmd, pmcraid_init_res_table, in pmcraid_querycfg()