Lines Matching full:instance

121 int megasas_transition_to_ready(struct megasas_instance *instance, int ocr);
122 static int megasas_get_pd_list(struct megasas_instance *instance);
123 static int megasas_ld_list_query(struct megasas_instance *instance,
125 static int megasas_issue_init_mfi(struct megasas_instance *instance);
126 static int megasas_register_aen(struct megasas_instance *instance,
128 static void megasas_get_pd_info(struct megasas_instance *instance,
207 megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
210 megasas_read_fw_status_reg_gen2(struct megasas_instance *instance);
212 megasas_adp_reset_gen2(struct megasas_instance *instance,
216 megasas_init_adapter_mfi(struct megasas_instance *instance);
218 megasas_build_and_issue_cmd(struct megasas_instance *instance,
222 wait_and_poll(struct megasas_instance *instance, struct megasas_cmd *cmd,
225 static int megasas_get_ld_vf_affiliation(struct megasas_instance *instance,
228 megasas_set_dma_mask(struct megasas_instance *instance);
230 megasas_alloc_ctrl_mem(struct megasas_instance *instance);
232 megasas_free_ctrl_mem(struct megasas_instance *instance);
234 megasas_alloc_ctrl_dma_buffers(struct megasas_instance *instance);
236 megasas_free_ctrl_dma_buffers(struct megasas_instance *instance);
238 megasas_init_ctrl_params(struct megasas_instance *instance);
240 u32 megasas_readl(struct megasas_instance *instance, in megasas_readl() argument
251 if (instance->adapter_type == AERO_SERIES) { in megasas_readl()
264 * @instance: Adapter soft state
270 void megasas_set_dma_settings(struct megasas_instance *instance, in megasas_set_dma_settings() argument
274 if (instance->consistent_mask_64bit) { in megasas_set_dma_settings()
288 megasas_issue_dcmd(struct megasas_instance *instance, struct megasas_cmd *cmd) in megasas_issue_dcmd() argument
290 instance->instancet->fire_cmd(instance, in megasas_issue_dcmd()
291 cmd->frame_phys_addr, 0, instance->reg_set); in megasas_issue_dcmd()
297 * @instance: Adapter soft state
302 *instance) in megasas_get_cmd()
307 spin_lock_irqsave(&instance->mfi_pool_lock, flags); in megasas_get_cmd()
309 if (!list_empty(&instance->cmd_pool)) { in megasas_get_cmd()
310 cmd = list_entry((&instance->cmd_pool)->next, in megasas_get_cmd()
314 dev_err(&instance->pdev->dev, "Command pool empty!\n"); in megasas_get_cmd()
317 spin_unlock_irqrestore(&instance->mfi_pool_lock, flags); in megasas_get_cmd()
323 * @instance: Adapter soft state
327 megasas_return_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd) in megasas_return_cmd() argument
332 struct fusion_context *fusion = instance->ctrl_context; in megasas_return_cmd()
340 spin_lock_irqsave(&instance->mfi_pool_lock, flags); in megasas_return_cmd()
343 blk_tags = instance->max_scsi_cmds + cmd->index; in megasas_return_cmd()
345 megasas_return_cmd_fusion(instance, cmd_fusion); in megasas_return_cmd()
350 memset(cmd->frame, 0, instance->mfi_frame_size); in megasas_return_cmd()
354 list_add(&cmd->list, (&instance->cmd_pool)->next); in megasas_return_cmd()
356 spin_unlock_irqrestore(&instance->mfi_pool_lock, flags); in megasas_return_cmd()
402 * @instance: Adapter soft state
405 megasas_decode_evt(struct megasas_instance *instance) in megasas_decode_evt() argument
407 struct megasas_evt_detail *evt_detail = instance->evt_detail; in megasas_decode_evt()
418 dev_info(&instance->pdev->dev, "%d (%s/0x%04x/%s) - %s\n", in megasas_decode_evt()
433 * @instance: Adapter soft state
436 megasas_enable_intr_xscale(struct megasas_instance *instance) in megasas_enable_intr_xscale() argument
440 regs = instance->reg_set; in megasas_enable_intr_xscale()
449 * @instance: Adapter soft state
452 megasas_disable_intr_xscale(struct megasas_instance *instance) in megasas_disable_intr_xscale() argument
457 regs = instance->reg_set; in megasas_disable_intr_xscale()
465 * @instance: Adapter soft state
468 megasas_read_fw_status_reg_xscale(struct megasas_instance *instance) in megasas_read_fw_status_reg_xscale() argument
470 return readl(&instance->reg_set->outbound_msg_0); in megasas_read_fw_status_reg_xscale()
474 * @instance: Adapter soft state
477 megasas_clear_intr_xscale(struct megasas_instance *instance) in megasas_clear_intr_xscale() argument
482 regs = instance->reg_set; in megasas_clear_intr_xscale()
508 * @instance: Adapter soft state
514 megasas_fire_cmd_xscale(struct megasas_instance *instance, in megasas_fire_cmd_xscale() argument
521 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_xscale()
524 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_xscale()
529 * @instance: Adapter soft state
533 megasas_adp_reset_xscale(struct megasas_instance *instance, in megasas_adp_reset_xscale() argument
544 pci_read_config_dword(instance->pdev, MFI_1068_PCSR_OFFSET, &pcidata); in megasas_adp_reset_xscale()
545 dev_notice(&instance->pdev->dev, "pcidata = %x\n", pcidata); in megasas_adp_reset_xscale()
547 dev_notice(&instance->pdev->dev, "mfi 1068 offset read=%x\n", pcidata); in megasas_adp_reset_xscale()
549 pci_write_config_dword(instance->pdev, in megasas_adp_reset_xscale()
556 pci_read_config_dword(instance->pdev, in megasas_adp_reset_xscale()
558 dev_notice(&instance->pdev->dev, "1068 offset handshake read=%x\n", pcidata); in megasas_adp_reset_xscale()
560 dev_notice(&instance->pdev->dev, "1068 offset pcidt=%x\n", pcidata); in megasas_adp_reset_xscale()
562 pci_write_config_dword(instance->pdev, in megasas_adp_reset_xscale()
571 * @instance: Adapter soft state
575 megasas_check_reset_xscale(struct megasas_instance *instance, in megasas_check_reset_xscale() argument
578 if ((atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) && in megasas_check_reset_xscale()
579 (le32_to_cpu(*instance->consumer) == in megasas_check_reset_xscale()
613 * @instance: Adapter soft state
616 megasas_enable_intr_ppc(struct megasas_instance *instance) in megasas_enable_intr_ppc() argument
620 regs = instance->reg_set; in megasas_enable_intr_ppc()
631 * @instance: Adapter soft state
634 megasas_disable_intr_ppc(struct megasas_instance *instance) in megasas_disable_intr_ppc() argument
639 regs = instance->reg_set; in megasas_disable_intr_ppc()
647 * @instance: Adapter soft state
650 megasas_read_fw_status_reg_ppc(struct megasas_instance *instance) in megasas_read_fw_status_reg_ppc() argument
652 return readl(&instance->reg_set->outbound_scratch_pad_0); in megasas_read_fw_status_reg_ppc()
657 * @instance: Adapter soft state
660 megasas_clear_intr_ppc(struct megasas_instance *instance) in megasas_clear_intr_ppc() argument
664 regs = instance->reg_set; in megasas_clear_intr_ppc()
690 * @instance: Adapter soft state
696 megasas_fire_cmd_ppc(struct megasas_instance *instance, in megasas_fire_cmd_ppc() argument
703 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_ppc()
706 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_ppc()
711 * @instance: Adapter soft state
715 megasas_check_reset_ppc(struct megasas_instance *instance, in megasas_check_reset_ppc() argument
718 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) in megasas_check_reset_ppc()
742 * @instance: Adapter soft state
745 megasas_enable_intr_skinny(struct megasas_instance *instance) in megasas_enable_intr_skinny() argument
749 regs = instance->reg_set; in megasas_enable_intr_skinny()
760 * @instance: Adapter soft state
763 megasas_disable_intr_skinny(struct megasas_instance *instance) in megasas_disable_intr_skinny() argument
768 regs = instance->reg_set; in megasas_disable_intr_skinny()
776 * @instance: Adapter soft state
779 megasas_read_fw_status_reg_skinny(struct megasas_instance *instance) in megasas_read_fw_status_reg_skinny() argument
781 return readl(&instance->reg_set->outbound_scratch_pad_0); in megasas_read_fw_status_reg_skinny()
786 * @instance: Adapter soft state
789 megasas_clear_intr_skinny(struct megasas_instance *instance) in megasas_clear_intr_skinny() argument
794 regs = instance->reg_set; in megasas_clear_intr_skinny()
808 if ((megasas_read_fw_status_reg_skinny(instance) & MFI_STATE_MASK) == in megasas_clear_intr_skinny()
829 * @instance: Adapter soft state
835 megasas_fire_cmd_skinny(struct megasas_instance *instance, in megasas_fire_cmd_skinny() argument
842 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_skinny()
847 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_skinny()
852 * @instance: Adapter soft state
856 megasas_check_reset_skinny(struct megasas_instance *instance, in megasas_check_reset_skinny() argument
859 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) in megasas_check_reset_skinny()
889 * @instance: Adapter soft state
892 megasas_enable_intr_gen2(struct megasas_instance *instance) in megasas_enable_intr_gen2() argument
896 regs = instance->reg_set; in megasas_enable_intr_gen2()
908 * @instance: Adapter soft state
911 megasas_disable_intr_gen2(struct megasas_instance *instance) in megasas_disable_intr_gen2() argument
916 regs = instance->reg_set; in megasas_disable_intr_gen2()
924 * @instance: Adapter soft state
927 megasas_read_fw_status_reg_gen2(struct megasas_instance *instance) in megasas_read_fw_status_reg_gen2() argument
929 return readl(&instance->reg_set->outbound_scratch_pad_0); in megasas_read_fw_status_reg_gen2()
934 * @instance: Adapter soft state
937 megasas_clear_intr_gen2(struct megasas_instance *instance) in megasas_clear_intr_gen2() argument
942 regs = instance->reg_set; in megasas_clear_intr_gen2()
970 * @instance: Adapter soft state
976 megasas_fire_cmd_gen2(struct megasas_instance *instance, in megasas_fire_cmd_gen2() argument
983 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_gen2()
986 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_gen2()
991 * @instance: Adapter soft state
995 megasas_adp_reset_gen2(struct megasas_instance *instance, in megasas_adp_reset_gen2() argument
1003 if (instance->instancet == &megasas_instance_template_skinny) { in megasas_adp_reset_gen2()
1022 dev_notice(&instance->pdev->dev, "RESETGEN2: retry=%x, hostdiag=%x\n", in megasas_adp_reset_gen2()
1030 dev_notice(&instance->pdev->dev, "ADP_RESET_GEN2: HostDiag=%x\n", HostDiag); in megasas_adp_reset_gen2()
1040 dev_notice(&instance->pdev->dev, "RESET_GEN2: retry=%x, hostdiag=%x\n", in megasas_adp_reset_gen2()
1052 * @instance: Adapter soft state
1056 megasas_check_reset_gen2(struct megasas_instance *instance, in megasas_check_reset_gen2() argument
1059 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) in megasas_check_reset_gen2()
1093 * @instance: Adapter soft state
1099 megasas_issue_polled(struct megasas_instance *instance, struct megasas_cmd *cmd) in megasas_issue_polled() argument
1106 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_issue_polled()
1107 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_issue_polled()
1112 instance->instancet->issue_dcmd(instance, cmd); in megasas_issue_polled()
1114 return wait_and_poll(instance, cmd, instance->requestorId ? in megasas_issue_polled()
1120 * @instance: Adapter soft state
1129 megasas_issue_blocked_cmd(struct megasas_instance *instance, in megasas_issue_blocked_cmd() argument
1135 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_issue_blocked_cmd()
1136 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_issue_blocked_cmd()
1141 instance->instancet->issue_dcmd(instance, cmd); in megasas_issue_blocked_cmd()
1144 ret = wait_event_timeout(instance->int_cmd_wait_q, in megasas_issue_blocked_cmd()
1147 dev_err(&instance->pdev->dev, in megasas_issue_blocked_cmd()
1153 wait_event(instance->int_cmd_wait_q, in megasas_issue_blocked_cmd()
1161 * @instance: Adapter soft state
1171 megasas_issue_blocked_abort_cmd(struct megasas_instance *instance, in megasas_issue_blocked_abort_cmd() argument
1179 cmd = megasas_get_cmd(instance); in megasas_issue_blocked_abort_cmd()
1201 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_issue_blocked_abort_cmd()
1202 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_issue_blocked_abort_cmd()
1207 instance->instancet->issue_dcmd(instance, cmd); in megasas_issue_blocked_abort_cmd()
1210 ret = wait_event_timeout(instance->abort_cmd_wait_q, in megasas_issue_blocked_abort_cmd()
1214 dev_err(&instance->pdev->dev, in megasas_issue_blocked_abort_cmd()
1220 wait_event(instance->abort_cmd_wait_q, in megasas_issue_blocked_abort_cmd()
1225 megasas_return_cmd(instance, cmd); in megasas_issue_blocked_abort_cmd()
1231 * @instance: Adapter soft state
1239 megasas_make_sgl32(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_make_sgl32() argument
1260 * @instance: Adapter soft state
1268 megasas_make_sgl64(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_make_sgl64() argument
1289 * @instance: Adapter soft state
1297 megasas_make_sgl_skinny(struct megasas_instance *instance, in megasas_make_sgl_skinny() argument
1326 static u32 megasas_get_frame_count(struct megasas_instance *instance, in megasas_get_frame_count() argument
1337 if (instance->flag_ieee) { in megasas_get_frame_count()
1348 if (instance->flag_ieee == 1) { in megasas_get_frame_count()
1355 if (instance->flag_ieee == 1) { in megasas_get_frame_count()
1379 * @instance: Adapter soft state
1387 megasas_build_dcdb(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_build_dcdb() argument
1406 if (instance->flag_ieee == 1) { in megasas_build_dcdb()
1440 if (instance->flag_ieee == 1) { in megasas_build_dcdb()
1442 pthru->sge_count = megasas_make_sgl_skinny(instance, scp, in megasas_build_dcdb()
1446 pthru->sge_count = megasas_make_sgl64(instance, scp, in megasas_build_dcdb()
1449 pthru->sge_count = megasas_make_sgl32(instance, scp, in megasas_build_dcdb()
1452 if (pthru->sge_count > instance->max_num_sge) { in megasas_build_dcdb()
1453 dev_err(&instance->pdev->dev, "DCDB too many SGE NUM=%x\n", in megasas_build_dcdb()
1471 cmd->frame_count = megasas_get_frame_count(instance, pthru->sge_count, in megasas_build_dcdb()
1479 * @instance: Adapter soft state
1486 megasas_build_ldio(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_build_ldio() argument
1502 if (instance->flag_ieee == 1) { in megasas_build_ldio()
1583 if (instance->flag_ieee) { in megasas_build_ldio()
1585 ldio->sge_count = megasas_make_sgl_skinny(instance, scp, in megasas_build_ldio()
1589 ldio->sge_count = megasas_make_sgl64(instance, scp, &ldio->sgl); in megasas_build_ldio()
1591 ldio->sge_count = megasas_make_sgl32(instance, scp, &ldio->sgl); in megasas_build_ldio()
1593 if (ldio->sge_count > instance->max_num_sge) { in megasas_build_ldio()
1594 dev_err(&instance->pdev->dev, "build_ld_io: sge_count = %x\n", in megasas_build_ldio()
1610 cmd->frame_count = megasas_get_frame_count(instance, in megasas_build_ldio()
1648 * @instance: Adapter soft state
1651 megasas_dump_pending_frames(struct megasas_instance *instance) in megasas_dump_pending_frames() argument
1659 u16 max_cmd = instance->max_fw_cmds; in megasas_dump_pending_frames()
1661 …dev_err(&instance->pdev->dev, "[%d]: Dumping Frame Phys Address of all pending cmds in FW\n",insta… in megasas_dump_pending_frames()
1662 …dev_err(&instance->pdev->dev, "[%d]: Total OS Pending cmds : %d\n",instance->host->host_no,atomic_… in megasas_dump_pending_frames()
1664 dev_err(&instance->pdev->dev, "[%d]: 64 bit SGLs were sent to FW\n",instance->host->host_no); in megasas_dump_pending_frames()
1666 dev_err(&instance->pdev->dev, "[%d]: 32 bit SGLs were sent to FW\n",instance->host->host_no); in megasas_dump_pending_frames()
1668 dev_err(&instance->pdev->dev, "[%d]: Pending OS cmds in FW : \n",instance->host->host_no); in megasas_dump_pending_frames()
1670 cmd = instance->cmd_list[i]; in megasas_dump_pending_frames()
1673 …dev_err(&instance->pdev->dev, "[%d]: Frame addr :0x%08lx : ",instance->host->host_no,(unsigned lon… in megasas_dump_pending_frames()
1678 dev_err(&instance->pdev->dev, "[%d]: frame count : 0x%x, Cmd : 0x%x, Tgt id : 0x%x," in megasas_dump_pending_frames()
1680 instance->host->host_no, cmd->frame_count, ldio->cmd, ldio->target_id, in megasas_dump_pending_frames()
1687 dev_err(&instance->pdev->dev, "[%d]: frame count : 0x%x, Cmd : 0x%x, Tgt id : 0x%x, " in megasas_dump_pending_frames()
1689 instance->host->host_no, cmd->frame_count, pthru->cmd, pthru->target_id, in megasas_dump_pending_frames()
1696 dev_err(&instance->pdev->dev, "sgl len : 0x%x, sgl addr : 0x%llx\n", in megasas_dump_pending_frames()
1700 dev_err(&instance->pdev->dev, "sgl len : 0x%x, sgl addr : 0x%x\n", in megasas_dump_pending_frames()
1706 dev_err(&instance->pdev->dev, "[%d]: Pending Internal cmds in FW : \n",instance->host->host_no); in megasas_dump_pending_frames()
1709 cmd = instance->cmd_list[i]; in megasas_dump_pending_frames()
1712 dev_err(&instance->pdev->dev, "0x%08lx : ", (unsigned long)cmd->frame_phys_addr); in megasas_dump_pending_frames()
1714 dev_err(&instance->pdev->dev, "[%d]: Dumping Done\n\n",instance->host->host_no); in megasas_dump_pending_frames()
1718 megasas_build_and_issue_cmd(struct megasas_instance *instance, in megasas_build_and_issue_cmd() argument
1724 cmd = megasas_get_cmd(instance); in megasas_build_and_issue_cmd()
1732 frame_count = megasas_build_ldio(instance, scmd, cmd); in megasas_build_and_issue_cmd()
1734 frame_count = megasas_build_dcdb(instance, scmd, cmd); in megasas_build_and_issue_cmd()
1745 atomic_inc(&instance->fw_outstanding); in megasas_build_and_issue_cmd()
1747 instance->instancet->fire_cmd(instance, cmd->frame_phys_addr, in megasas_build_and_issue_cmd()
1748 cmd->frame_count-1, instance->reg_set); in megasas_build_and_issue_cmd()
1752 megasas_return_cmd(instance, cmd); in megasas_build_and_issue_cmd()
1765 struct megasas_instance *instance; in megasas_queue_command() local
1768 instance = (struct megasas_instance *) in megasas_queue_command()
1771 if (instance->unload == 1) { in megasas_queue_command()
1777 if (instance->issuepend_done == 0) in megasas_queue_command()
1782 if (atomic_read(&instance->adprecovery) == MEGASAS_ADPRESET_SM_INFAULT) { in megasas_queue_command()
1783 if (megasas_check_mpio_paths(instance, scmd) == in megasas_queue_command()
1793 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_queue_command()
1806 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) in megasas_queue_command()
1816 (scmd->device->id >= instance->fw_supported_vd_count || in megasas_queue_command()
1824 (!instance->fw_sync_cache_support)) { in megasas_queue_command()
1829 return instance->instancet->build_and_issue_cmd(instance, scmd); in megasas_queue_command()
1842 if ((megasas_mgmt_info.instance[i]) && in megasas_lookup_instance()
1843 (megasas_mgmt_info.instance[i]->host->host_no == host_no)) in megasas_lookup_instance()
1844 return megasas_mgmt_info.instance[i]; in megasas_lookup_instance()
1867 struct megasas_instance *instance; in megasas_set_dynamic_target_properties() local
1874 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_set_dynamic_target_properties()
1875 fusion = instance->ctrl_context; in megasas_set_dynamic_target_properties()
1884 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_set_dynamic_target_properties()
1886 if (ld >= instance->fw_supported_vd_count) in megasas_set_dynamic_target_properties()
1899 } else if (instance->use_seqnum_jbod_fp) { in megasas_set_dynamic_target_properties()
1903 [(instance->pd_seq_map_id - 1) & 1]; in megasas_set_dynamic_target_properties()
1908 if (is_target_prop && instance->tgt_prop->reset_tmo) { in megasas_set_dynamic_target_properties()
1914 min_t(u8, instance->max_reset_tmo, in megasas_set_dynamic_target_properties()
1915 instance->tgt_prop->reset_tmo); in megasas_set_dynamic_target_properties()
1916 mr_device_priv_data->task_abort_tmo = instance->task_abort_tmo; in megasas_set_dynamic_target_properties()
1944 struct megasas_instance *instance; in megasas_set_nvme_device_properties() local
1947 instance = (struct megasas_instance *)sdev->host->hostdata; in megasas_set_nvme_device_properties()
1948 mr_nvme_pg_size = max_t(u32, instance->nvme_page_size, in megasas_set_nvme_device_properties()
1971 struct megasas_instance *instance; in megasas_set_fw_assisted_qd() local
1974 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_set_fw_assisted_qd()
1991 tgt_device_qd = le32_to_cpu(instance->tgt_prop->device_qdepth); in megasas_set_fw_assisted_qd()
1993 device_qd = min(instance->host->can_queue, in megasas_set_fw_assisted_qd()
1997 if (instance->enable_sdev_max_qd && interface_type != UNKNOWN_DRIVE) in megasas_set_fw_assisted_qd()
1998 device_qd = instance->host->can_queue; in megasas_set_fw_assisted_qd()
2019 struct megasas_instance *instance; in megasas_set_static_target_properties() local
2021 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_set_static_target_properties()
2032 max_io_size_kb = le32_to_cpu(instance->tgt_prop->max_io_size_kb); in megasas_set_static_target_properties()
2034 if (instance->nvme_page_size && max_io_size_kb) in megasas_set_static_target_properties()
2044 struct megasas_instance *instance; in megasas_slave_configure() local
2048 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_slave_configure()
2049 if (instance->pd_list_not_supported) { in megasas_slave_configure()
2053 if (instance->pd_list[pd_index].driveState != in megasas_slave_configure()
2059 mutex_lock(&instance->reset_mutex); in megasas_slave_configure()
2061 if ((instance->pd_info) && !MEGASAS_IS_LOGICAL(sdev)) in megasas_slave_configure()
2062 megasas_get_pd_info(instance, sdev); in megasas_slave_configure()
2064 /* Some ventura firmware may not have instance->nvme_page_size set. in megasas_slave_configure()
2067 if ((instance->tgt_prop) && (instance->nvme_page_size)) in megasas_slave_configure()
2068 ret_target_prop = megasas_get_target_prop(instance, sdev); in megasas_slave_configure()
2076 mutex_unlock(&instance->reset_mutex); in megasas_slave_configure()
2084 struct megasas_instance *instance ; in megasas_slave_alloc() local
2087 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_slave_alloc()
2095 if ((instance->pd_list_not_supported || in megasas_slave_alloc()
2096 instance->pd_list[pd_index].driveState == in megasas_slave_alloc()
2111 instance->r1_ldio_hint_default); in megasas_slave_alloc()
2124 * @instance: Adapter soft state
2127 static void megasas_complete_outstanding_ioctls(struct megasas_instance *instance) in megasas_complete_outstanding_ioctls() argument
2132 struct fusion_context *fusion = instance->ctrl_context; in megasas_complete_outstanding_ioctls()
2136 for (i = 0; i < instance->max_fw_cmds; i++) { in megasas_complete_outstanding_ioctls()
2139 cmd_mfi = instance->cmd_list[cmd_fusion->sync_cmd_idx]; in megasas_complete_outstanding_ioctls()
2144 megasas_complete_cmd(instance, in megasas_complete_outstanding_ioctls()
2150 for (i = 0; i < instance->max_fw_cmds; i++) { in megasas_complete_outstanding_ioctls()
2151 cmd_mfi = instance->cmd_list[i]; in megasas_complete_outstanding_ioctls()
2154 megasas_complete_cmd(instance, cmd_mfi, DID_OK); in megasas_complete_outstanding_ioctls()
2160 void megaraid_sas_kill_hba(struct megasas_instance *instance) in megaraid_sas_kill_hba() argument
2162 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megaraid_sas_kill_hba()
2163 dev_warn(&instance->pdev->dev, in megaraid_sas_kill_hba()
2169 atomic_set(&instance->adprecovery, MEGASAS_HW_CRITICAL_ERROR); in megaraid_sas_kill_hba()
2172 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) || in megaraid_sas_kill_hba()
2173 (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY) || in megaraid_sas_kill_hba()
2174 (instance->adapter_type != MFI_SERIES)) { in megaraid_sas_kill_hba()
2175 if (!instance->requestorId) { in megaraid_sas_kill_hba()
2176 writel(MFI_STOP_ADP, &instance->reg_set->doorbell); in megaraid_sas_kill_hba()
2178 readl(&instance->reg_set->doorbell); in megaraid_sas_kill_hba()
2180 if (instance->requestorId && instance->peerIsPresent) in megaraid_sas_kill_hba()
2181 memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS); in megaraid_sas_kill_hba()
2184 &instance->reg_set->inbound_doorbell); in megaraid_sas_kill_hba()
2187 megasas_complete_outstanding_ioctls(instance); in megaraid_sas_kill_hba()
2193 * @instance: Adapter soft state
2197 megasas_check_and_restore_queue_depth(struct megasas_instance *instance) in megasas_check_and_restore_queue_depth() argument
2201 if (instance->flag & MEGASAS_FW_BUSY in megasas_check_and_restore_queue_depth()
2202 && time_after(jiffies, instance->last_time + 5 * HZ) in megasas_check_and_restore_queue_depth()
2203 && atomic_read(&instance->fw_outstanding) < in megasas_check_and_restore_queue_depth()
2204 instance->throttlequeuedepth + 1) { in megasas_check_and_restore_queue_depth()
2206 spin_lock_irqsave(instance->host->host_lock, flags); in megasas_check_and_restore_queue_depth()
2207 instance->flag &= ~MEGASAS_FW_BUSY; in megasas_check_and_restore_queue_depth()
2209 instance->host->can_queue = instance->cur_can_queue; in megasas_check_and_restore_queue_depth()
2210 spin_unlock_irqrestore(instance->host->host_lock, flags); in megasas_check_and_restore_queue_depth()
2226 struct megasas_instance *instance = in megasas_complete_cmd_dpc() local
2231 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) in megasas_complete_cmd_dpc()
2234 spin_lock_irqsave(&instance->completion_lock, flags); in megasas_complete_cmd_dpc()
2236 producer = le32_to_cpu(*instance->producer); in megasas_complete_cmd_dpc()
2237 consumer = le32_to_cpu(*instance->consumer); in megasas_complete_cmd_dpc()
2240 context = le32_to_cpu(instance->reply_queue[consumer]); in megasas_complete_cmd_dpc()
2241 if (context >= instance->max_fw_cmds) { in megasas_complete_cmd_dpc()
2242 dev_err(&instance->pdev->dev, "Unexpected context value %x\n", in megasas_complete_cmd_dpc()
2247 cmd = instance->cmd_list[context]; in megasas_complete_cmd_dpc()
2249 megasas_complete_cmd(instance, cmd, DID_OK); in megasas_complete_cmd_dpc()
2252 if (consumer == (instance->max_fw_cmds + 1)) { in megasas_complete_cmd_dpc()
2257 *instance->consumer = cpu_to_le32(producer); in megasas_complete_cmd_dpc()
2259 spin_unlock_irqrestore(&instance->completion_lock, flags); in megasas_complete_cmd_dpc()
2264 megasas_check_and_restore_queue_depth(instance); in megasas_complete_cmd_dpc()
2271 * @instance: Adapter soft state
2274 void megasas_start_timer(struct megasas_instance *instance) in megasas_start_timer() argument
2276 struct timer_list *timer = &instance->sriov_heartbeat_timer; in megasas_start_timer()
2284 megasas_internal_reset_defer_cmds(struct megasas_instance *instance);
2289 static void megasas_do_ocr(struct megasas_instance *instance) in megasas_do_ocr() argument
2291 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS1064R) || in megasas_do_ocr()
2292 (instance->pdev->device == PCI_DEVICE_ID_DELL_PERC5) || in megasas_do_ocr()
2293 (instance->pdev->device == PCI_DEVICE_ID_LSI_VERDE_ZCR)) { in megasas_do_ocr()
2294 *instance->consumer = cpu_to_le32(MEGASAS_ADPRESET_INPROG_SIGN); in megasas_do_ocr()
2296 instance->instancet->disable_intr(instance); in megasas_do_ocr()
2297 atomic_set(&instance->adprecovery, MEGASAS_ADPRESET_SM_INFAULT); in megasas_do_ocr()
2298 instance->issuepend_done = 0; in megasas_do_ocr()
2300 atomic_set(&instance->fw_outstanding, 0); in megasas_do_ocr()
2301 megasas_internal_reset_defer_cmds(instance); in megasas_do_ocr()
2302 process_fw_state_change_wq(&instance->work_init); in megasas_do_ocr()
2305 static int megasas_get_ld_vf_affiliation_111(struct megasas_instance *instance, in megasas_get_ld_vf_affiliation_111() argument
2315 cmd = megasas_get_cmd(instance); in megasas_get_ld_vf_affiliation_111()
2318 dev_printk(KERN_DEBUG, &instance->pdev->dev, "megasas_get_ld_vf_affiliation_111:" in megasas_get_ld_vf_affiliation_111()
2320 instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2326 if (!instance->vf_affiliation_111) { in megasas_get_ld_vf_affiliation_111()
2327 dev_warn(&instance->pdev->dev, "SR-IOV: Couldn't get LD/VF " in megasas_get_ld_vf_affiliation_111()
2328 "affiliation for scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2329 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_111()
2334 memset(instance->vf_affiliation_111, 0, in megasas_get_ld_vf_affiliation_111()
2338 dma_alloc_coherent(&instance->pdev->dev, in megasas_get_ld_vf_affiliation_111()
2342 dev_printk(KERN_DEBUG, &instance->pdev->dev, "SR-IOV: Couldn't allocate " in megasas_get_ld_vf_affiliation_111()
2344 instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2345 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_111()
2364 cpu_to_le32(instance->vf_affiliation_111_h); in megasas_get_ld_vf_affiliation_111()
2372 dev_warn(&instance->pdev->dev, "SR-IOV: Getting LD/VF affiliation for " in megasas_get_ld_vf_affiliation_111()
2373 "scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2375 if (megasas_issue_blocked_cmd(instance, cmd, 0) != DCMD_SUCCESS) { in megasas_get_ld_vf_affiliation_111()
2376 dev_warn(&instance->pdev->dev, "SR-IOV: LD/VF affiliation DCMD" in megasas_get_ld_vf_affiliation_111()
2378 dcmd->cmd_status, instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2386 if (instance->vf_affiliation_111->map[ld].policy[thisVf] != in megasas_get_ld_vf_affiliation_111()
2388 dev_warn(&instance->pdev->dev, "SR-IOV: " in megasas_get_ld_vf_affiliation_111()
2390 instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2391 memcpy(instance->vf_affiliation_111, in megasas_get_ld_vf_affiliation_111()
2400 dma_free_coherent(&instance->pdev->dev, in megasas_get_ld_vf_affiliation_111()
2406 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_111()
2411 static int megasas_get_ld_vf_affiliation_12(struct megasas_instance *instance, in megasas_get_ld_vf_affiliation_12() argument
2422 cmd = megasas_get_cmd(instance); in megasas_get_ld_vf_affiliation_12()
2425 dev_printk(KERN_DEBUG, &instance->pdev->dev, "megasas_get_ld_vf_affiliation12: " in megasas_get_ld_vf_affiliation_12()
2427 instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2433 if (!instance->vf_affiliation) { in megasas_get_ld_vf_affiliation_12()
2434 dev_warn(&instance->pdev->dev, "SR-IOV: Couldn't get LD/VF " in megasas_get_ld_vf_affiliation_12()
2435 "affiliation for scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2436 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_12()
2441 memset(instance->vf_affiliation, 0, (MAX_LOGICAL_DRIVES + 1) * in megasas_get_ld_vf_affiliation_12()
2445 dma_alloc_coherent(&instance->pdev->dev, in megasas_get_ld_vf_affiliation_12()
2449 dev_printk(KERN_DEBUG, &instance->pdev->dev, "SR-IOV: Couldn't allocate " in megasas_get_ld_vf_affiliation_12()
2451 instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2452 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_12()
2471 cpu_to_le32(instance->vf_affiliation_h); in megasas_get_ld_vf_affiliation_12()
2479 dev_warn(&instance->pdev->dev, "SR-IOV: Getting LD/VF affiliation for " in megasas_get_ld_vf_affiliation_12()
2480 "scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2483 if (megasas_issue_blocked_cmd(instance, cmd, 0) != DCMD_SUCCESS) { in megasas_get_ld_vf_affiliation_12()
2484 dev_warn(&instance->pdev->dev, "SR-IOV: LD/VF affiliation DCMD" in megasas_get_ld_vf_affiliation_12()
2486 dcmd->cmd_status, instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2493 dev_warn(&instance->pdev->dev, "SR-IOV: Got new LD/VF " in megasas_get_ld_vf_affiliation_12()
2495 instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2500 savedmap = instance->vf_affiliation->map; in megasas_get_ld_vf_affiliation_12()
2504 for (j = 0; j < instance->vf_affiliation->ldCount; in megasas_get_ld_vf_affiliation_12()
2529 savedmap = instance->vf_affiliation->map; in megasas_get_ld_vf_affiliation_12()
2531 for (i = 0 ; i < instance->vf_affiliation->ldCount; i++) { in megasas_get_ld_vf_affiliation_12()
2559 dev_warn(&instance->pdev->dev, "SR-IOV: Got new LD/VF " in megasas_get_ld_vf_affiliation_12()
2560 "affiliation for scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2561 memcpy(instance->vf_affiliation, new_affiliation, in megasas_get_ld_vf_affiliation_12()
2567 dma_free_coherent(&instance->pdev->dev, in megasas_get_ld_vf_affiliation_12()
2571 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_12()
2577 static int megasas_get_ld_vf_affiliation(struct megasas_instance *instance, in megasas_get_ld_vf_affiliation() argument
2582 if (instance->PlasmaFW111) in megasas_get_ld_vf_affiliation()
2583 retval = megasas_get_ld_vf_affiliation_111(instance, initial); in megasas_get_ld_vf_affiliation()
2585 retval = megasas_get_ld_vf_affiliation_12(instance, initial); in megasas_get_ld_vf_affiliation()
2590 int megasas_sriov_start_heartbeat(struct megasas_instance *instance, in megasas_sriov_start_heartbeat() argument
2597 cmd = megasas_get_cmd(instance); in megasas_sriov_start_heartbeat()
2600 dev_printk(KERN_DEBUG, &instance->pdev->dev, "megasas_sriov_start_heartbeat: " in megasas_sriov_start_heartbeat()
2602 instance->host->host_no); in megasas_sriov_start_heartbeat()
2609 instance->hb_host_mem = in megasas_sriov_start_heartbeat()
2610 dma_alloc_coherent(&instance->pdev->dev, in megasas_sriov_start_heartbeat()
2612 &instance->hb_host_mem_h, in megasas_sriov_start_heartbeat()
2614 if (!instance->hb_host_mem) { in megasas_sriov_start_heartbeat()
2615 dev_printk(KERN_DEBUG, &instance->pdev->dev, "SR-IOV: Couldn't allocate" in megasas_sriov_start_heartbeat()
2617 instance->host->host_no); in megasas_sriov_start_heartbeat()
2635 megasas_set_dma_settings(instance, dcmd, instance->hb_host_mem_h, in megasas_sriov_start_heartbeat()
2638 dev_warn(&instance->pdev->dev, "SR-IOV: Starting heartbeat for scsi%d\n", in megasas_sriov_start_heartbeat()
2639 instance->host->host_no); in megasas_sriov_start_heartbeat()
2641 if ((instance->adapter_type != MFI_SERIES) && in megasas_sriov_start_heartbeat()
2642 !instance->mask_interrupts) in megasas_sriov_start_heartbeat()
2643 retval = megasas_issue_blocked_cmd(instance, cmd, in megasas_sriov_start_heartbeat()
2646 retval = megasas_issue_polled(instance, cmd); in megasas_sriov_start_heartbeat()
2649 dev_warn(&instance->pdev->dev, "SR-IOV: MR_DCMD_CTRL_SHARED_HOST" in megasas_sriov_start_heartbeat()
2652 "timed out" : "failed", instance->host->host_no); in megasas_sriov_start_heartbeat()
2657 megasas_return_cmd(instance, cmd); in megasas_sriov_start_heartbeat()
2665 struct megasas_instance *instance = in megasas_sriov_heartbeat_handler() local
2666 from_timer(instance, t, sriov_heartbeat_timer); in megasas_sriov_heartbeat_handler()
2668 if (instance->hb_host_mem->HB.fwCounter != in megasas_sriov_heartbeat_handler()
2669 instance->hb_host_mem->HB.driverCounter) { in megasas_sriov_heartbeat_handler()
2670 instance->hb_host_mem->HB.driverCounter = in megasas_sriov_heartbeat_handler()
2671 instance->hb_host_mem->HB.fwCounter; in megasas_sriov_heartbeat_handler()
2672 mod_timer(&instance->sriov_heartbeat_timer, in megasas_sriov_heartbeat_handler()
2675 dev_warn(&instance->pdev->dev, "SR-IOV: Heartbeat never " in megasas_sriov_heartbeat_handler()
2676 "completed for scsi%d\n", instance->host->host_no); in megasas_sriov_heartbeat_handler()
2677 schedule_work(&instance->work_init); in megasas_sriov_heartbeat_handler()
2683 * @instance: Adapter soft state
2689 static int megasas_wait_for_outstanding(struct megasas_instance *instance) in megasas_wait_for_outstanding() argument
2699 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_wait_for_outstanding()
2700 dev_info(&instance->pdev->dev, "%s:%d HBA is killed.\n", in megasas_wait_for_outstanding()
2705 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) { in megasas_wait_for_outstanding()
2708 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_wait_for_outstanding()
2709 list_splice_init(&instance->internal_reset_pending_q, in megasas_wait_for_outstanding()
2711 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_wait_for_outstanding()
2713 dev_notice(&instance->pdev->dev, "HBA reset wait ...\n"); in megasas_wait_for_outstanding()
2716 if (atomic_read(&instance->adprecovery) == MEGASAS_HBA_OPERATIONAL) in megasas_wait_for_outstanding()
2720 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) { in megasas_wait_for_outstanding()
2721 dev_notice(&instance->pdev->dev, "reset: Stopping HBA.\n"); in megasas_wait_for_outstanding()
2722 atomic_set(&instance->adprecovery, MEGASAS_HW_CRITICAL_ERROR); in megasas_wait_for_outstanding()
2733 dev_notice(&instance->pdev->dev, "%d:%p reset [%02x]\n", in megasas_wait_for_outstanding()
2738 megasas_return_cmd(instance, reset_cmd); in megasas_wait_for_outstanding()
2740 dev_notice(&instance->pdev->dev, "%p synch cmds" in megasas_wait_for_outstanding()
2745 instance->instancet->fire_cmd(instance, in megasas_wait_for_outstanding()
2747 0, instance->reg_set); in megasas_wait_for_outstanding()
2749 dev_notice(&instance->pdev->dev, "%p unexpected" in megasas_wait_for_outstanding()
2760 outstanding = atomic_read(&instance->fw_outstanding); in megasas_wait_for_outstanding()
2766 dev_notice(&instance->pdev->dev, "[%2d]waiting for %d " in megasas_wait_for_outstanding()
2772 megasas_complete_cmd_dpc((unsigned long)instance); in megasas_wait_for_outstanding()
2779 outstanding = atomic_read(&instance->fw_outstanding); in megasas_wait_for_outstanding()
2780 fw_state = instance->instancet->read_fw_status_reg(instance) & MFI_STATE_MASK; in megasas_wait_for_outstanding()
2785 if (instance->disableOnlineCtrlReset) in megasas_wait_for_outstanding()
2788 if ((fw_state == MFI_STATE_FAULT) || atomic_read(&instance->fw_outstanding)) { in megasas_wait_for_outstanding()
2789 dev_info(&instance->pdev->dev, in megasas_wait_for_outstanding()
2791 __func__, __LINE__, fw_state, atomic_read(&instance->fw_outstanding)); in megasas_wait_for_outstanding()
2794 megasas_do_ocr(instance); in megasas_wait_for_outstanding()
2796 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_wait_for_outstanding()
2797 dev_info(&instance->pdev->dev, "%s:%d OCR failed and HBA is killed.\n", in megasas_wait_for_outstanding()
2801 dev_info(&instance->pdev->dev, "%s:%d waiting_for_outstanding: after issue OCR.\n", in megasas_wait_for_outstanding()
2807 outstanding = atomic_read(&instance->fw_outstanding); in megasas_wait_for_outstanding()
2809 fw_state = instance->instancet->read_fw_status_reg(instance) & MFI_STATE_MASK; in megasas_wait_for_outstanding()
2818 dev_info(&instance->pdev->dev, "%s:%d no more pending commands remain after reset handling.\n", in megasas_wait_for_outstanding()
2825 dev_info(&instance->pdev->dev, "%s:%d killing adapter scsi%d" in megasas_wait_for_outstanding()
2827 __func__, __LINE__, instance->host->host_no, instance->disableOnlineCtrlReset, in megasas_wait_for_outstanding()
2828 atomic_read(&instance->fw_outstanding)); in megasas_wait_for_outstanding()
2829 megasas_dump_pending_frames(instance); in megasas_wait_for_outstanding()
2830 megaraid_sas_kill_hba(instance); in megasas_wait_for_outstanding()
2846 struct megasas_instance *instance; in megasas_generic_reset() local
2848 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_generic_reset()
2853 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_generic_reset()
2854 dev_err(&instance->pdev->dev, "cannot recover from previous reset failures\n"); in megasas_generic_reset()
2858 ret_val = megasas_wait_for_outstanding(instance); in megasas_generic_reset()
2860 dev_notice(&instance->pdev->dev, "reset successful\n"); in megasas_generic_reset()
2862 dev_err(&instance->pdev->dev, "failed to do reset\n"); in megasas_generic_reset()
2877 struct megasas_instance *instance; in megasas_reset_timer() local
2885 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_reset_timer()
2886 if (!(instance->flag & MEGASAS_FW_BUSY)) { in megasas_reset_timer()
2888 spin_lock_irqsave(instance->host->host_lock, flags); in megasas_reset_timer()
2890 instance->host->can_queue = instance->throttlequeuedepth; in megasas_reset_timer()
2891 instance->last_time = jiffies; in megasas_reset_timer()
2892 instance->flag |= MEGASAS_FW_BUSY; in megasas_reset_timer()
2894 spin_unlock_irqrestore(instance->host->host_lock, flags); in megasas_reset_timer()
2948 struct megasas_instance *instance; in megasas_dump_fusion_io() local
2951 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_dump_fusion_io()
2972 instance->max_chain_frame_sz, 8); in megasas_dump_fusion_io()
3008 struct megasas_instance *instance; in megasas_reset_bus_host() local
3010 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_reset_bus_host()
3019 atomic_read(&instance->fw_outstanding)); in megasas_reset_bus_host()
3023 if (instance->adapter_type == MFI_SERIES) { in megasas_reset_bus_host()
3042 struct megasas_instance *instance; in megasas_task_abort() local
3044 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_task_abort()
3046 if (instance->adapter_type != MFI_SERIES) in megasas_task_abort()
3064 struct megasas_instance *instance; in megasas_reset_target() local
3066 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_reset_target()
3068 if (instance->adapter_type != MFI_SERIES) in megasas_reset_target()
3126 * @instance: Adapter soft state
3137 megasas_service_aen(struct megasas_instance *instance, struct megasas_cmd *cmd) in megasas_service_aen() argument
3144 if ((!cmd->abort_aen) && (instance->unload == 0)) { in megasas_service_aen()
3154 instance->aen_cmd = NULL; in megasas_service_aen()
3156 megasas_return_cmd(instance, cmd); in megasas_service_aen()
3158 if ((instance->unload == 0) && in megasas_service_aen()
3159 ((instance->issuepend_done == 1))) { in megasas_service_aen()
3164 dev_err(&instance->pdev->dev, "megasas_service_aen: out of memory\n"); in megasas_service_aen()
3166 ev->instance = instance; in megasas_service_aen()
3167 instance->ev = ev; in megasas_service_aen()
3180 struct megasas_instance *instance = in fw_crash_buffer_store() local
3188 spin_lock_irqsave(&instance->crashdump_lock, flags); in fw_crash_buffer_store()
3189 instance->fw_crash_buffer_offset = val; in fw_crash_buffer_store()
3190 spin_unlock_irqrestore(&instance->crashdump_lock, flags); in fw_crash_buffer_store()
3199 struct megasas_instance *instance = in fw_crash_buffer_show() local
3208 spin_lock_irqsave(&instance->crashdump_lock, flags); in fw_crash_buffer_show()
3209 buff_offset = instance->fw_crash_buffer_offset; in fw_crash_buffer_show()
3210 if (!instance->crash_dump_buf && in fw_crash_buffer_show()
3211 !((instance->fw_crash_state == AVAILABLE) || in fw_crash_buffer_show()
3212 (instance->fw_crash_state == COPYING))) { in fw_crash_buffer_show()
3213 dev_err(&instance->pdev->dev, in fw_crash_buffer_show()
3215 spin_unlock_irqrestore(&instance->crashdump_lock, flags); in fw_crash_buffer_show()
3219 if (buff_offset > (instance->fw_crash_buffer_size * dmachunk)) { in fw_crash_buffer_show()
3220 dev_err(&instance->pdev->dev, in fw_crash_buffer_show()
3222 spin_unlock_irqrestore(&instance->crashdump_lock, flags); in fw_crash_buffer_show()
3226 size = (instance->fw_crash_buffer_size * dmachunk) - buff_offset; in fw_crash_buffer_show()
3231 src_addr = (unsigned long)instance->crash_buf[buff_offset / dmachunk] + in fw_crash_buffer_show()
3234 spin_unlock_irqrestore(&instance->crashdump_lock, flags); in fw_crash_buffer_show()
3244 struct megasas_instance *instance = in fw_crash_buffer_size_show() local
3248 ((instance->fw_crash_buffer_size) * 1024 * 1024)/PAGE_SIZE); in fw_crash_buffer_size_show()
3256 struct megasas_instance *instance = in fw_crash_state_store() local
3265 dev_err(&instance->pdev->dev, "application updates invalid " in fw_crash_state_store()
3270 instance->fw_crash_state = val; in fw_crash_state_store()
3273 spin_lock_irqsave(&instance->crashdump_lock, flags); in fw_crash_state_store()
3274 megasas_free_host_crash_buffer(instance); in fw_crash_state_store()
3275 spin_unlock_irqrestore(&instance->crashdump_lock, flags); in fw_crash_state_store()
3277 dev_info(&instance->pdev->dev, "application failed to " in fw_crash_state_store()
3280 dev_info(&instance->pdev->dev, "Firmware crash dump " in fw_crash_state_store()
3291 struct megasas_instance *instance = in fw_crash_state_show() local
3294 return snprintf(buf, PAGE_SIZE, "%d\n", instance->fw_crash_state); in fw_crash_state_show()
3309 struct megasas_instance *instance = (struct megasas_instance *)shost->hostdata; in ldio_outstanding_show() local
3311 return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&instance->ldio_outstanding)); in ldio_outstanding_show()
3319 struct megasas_instance *instance = (struct megasas_instance *)shost->hostdata; in fw_cmds_outstanding_show() local
3321 return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&instance->fw_outstanding)); in fw_cmds_outstanding_show()
3329 struct megasas_instance *instance = (struct megasas_instance *)shost->hostdata; in enable_sdev_max_qd_show() local
3331 return snprintf(buf, PAGE_SIZE, "%d\n", instance->enable_sdev_max_qd); in enable_sdev_max_qd_show()
3339 struct megasas_instance *instance = (struct megasas_instance *)shost->hostdata; in enable_sdev_max_qd_store() local
3350 mutex_lock(&instance->reset_mutex); in enable_sdev_max_qd_store()
3352 instance->enable_sdev_max_qd = true; in enable_sdev_max_qd_store()
3354 instance->enable_sdev_max_qd = false; in enable_sdev_max_qd_store()
3357 ret_target_prop = megasas_get_target_prop(instance, sdev); in enable_sdev_max_qd_store()
3361 mutex_unlock(&instance->reset_mutex); in enable_sdev_max_qd_store()
3371 struct megasas_instance *instance = in dump_system_regs_show() local
3374 return megasas_dump_sys_regs(instance->reg_set, buf); in dump_system_regs_show()
3382 struct megasas_instance *instance = in raid_map_id_show() local
3386 (unsigned long)instance->map_id); in raid_map_id_show()
3436 * @instance: Adapter soft state
3444 megasas_complete_int_cmd(struct megasas_instance *instance, in megasas_complete_int_cmd() argument
3452 wake_up(&instance->int_cmd_wait_q); in megasas_complete_int_cmd()
3457 * @instance: Adapter soft state
3465 megasas_complete_abort(struct megasas_instance *instance, in megasas_complete_abort() argument
3471 wake_up(&instance->abort_cmd_wait_q); in megasas_complete_abort()
3477 * @instance: Adapter soft state
3486 megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd, in megasas_complete_cmd() argument
3492 struct fusion_context *fusion = instance->ctrl_context; in megasas_complete_cmd()
3507 dev_warn(&instance->pdev->dev, "MFI_CMD_INVALID command " in megasas_complete_cmd()
3509 dev_warn(&instance->pdev->dev, "If you have a controller " in megasas_complete_cmd()
3522 megasas_complete_int_cmd(instance, cmd); in megasas_complete_cmd()
3537 atomic_dec(&instance->fw_outstanding); in megasas_complete_cmd()
3541 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3579 dev_printk(KERN_DEBUG, &instance->pdev->dev, "MFI FW status %#x\n", in megasas_complete_cmd()
3585 atomic_dec(&instance->fw_outstanding); in megasas_complete_cmd()
3589 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3597 megasas_complete_int_cmd(instance, cmd); in megasas_complete_cmd()
3606 spin_lock_irqsave(instance->host->host_lock, flags); in megasas_complete_cmd()
3608 instance->map_update_cmd = NULL; in megasas_complete_cmd()
3611 dev_warn(&instance->pdev->dev, "map syncfailed, status = 0x%x\n", in megasas_complete_cmd()
3614 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3616 instance->host->host_lock, in megasas_complete_cmd()
3622 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3630 (MR_ValidateMapInfo(instance, (instance->map_id + 1)))) { in megasas_complete_cmd()
3631 instance->map_id++; in megasas_complete_cmd()
3637 megasas_sync_map_info(instance); in megasas_complete_cmd()
3638 spin_unlock_irqrestore(instance->host->host_lock, in megasas_complete_cmd()
3653 spin_lock_irqsave(instance->host->host_lock, flags); in megasas_complete_cmd()
3655 instance->jbod_seq_cmd = NULL; in megasas_complete_cmd()
3656 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3659 instance->pd_seq_map_id++; in megasas_complete_cmd()
3661 if (megasas_sync_pd_seq_num(instance, true)) in megasas_complete_cmd()
3662 instance->use_seqnum_jbod_fp = false; in megasas_complete_cmd()
3664 instance->use_seqnum_jbod_fp = false; in megasas_complete_cmd()
3666 spin_unlock_irqrestore(instance->host->host_lock, flags); in megasas_complete_cmd()
3674 megasas_service_aen(instance, cmd); in megasas_complete_cmd()
3676 megasas_complete_int_cmd(instance, cmd); in megasas_complete_cmd()
3684 megasas_complete_abort(instance, cmd); in megasas_complete_cmd()
3688 dev_info(&instance->pdev->dev, "Unknown command completed! [0x%X]\n", in megasas_complete_cmd()
3690 megasas_complete_int_cmd(instance, cmd); in megasas_complete_cmd()
3698 * @instance: Adapter soft state
3701 megasas_issue_pending_cmds_again(struct megasas_instance *instance) in megasas_issue_pending_cmds_again() argument
3710 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_issue_pending_cmds_again()
3711 list_splice_init(&instance->internal_reset_pending_q, &clist_local); in megasas_issue_pending_cmds_again()
3712 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_issue_pending_cmds_again()
3720 dev_notice(&instance->pdev->dev, "command %p, %p:%d" in megasas_issue_pending_cmds_again()
3727 dev_notice(&instance->pdev->dev, "cmd %p, %p:%d" in megasas_issue_pending_cmds_again()
3731 instance->instancet->disable_intr(instance); in megasas_issue_pending_cmds_again()
3732 atomic_set(&instance->fw_reset_no_pci_access, 1); in megasas_issue_pending_cmds_again()
3733 megaraid_sas_kill_hba(instance); in megasas_issue_pending_cmds_again()
3740 dev_notice(&instance->pdev->dev, "unexpected" in megasas_issue_pending_cmds_again()
3743 dev_notice(&instance->pdev->dev, "%p synchronous cmd" in megasas_issue_pending_cmds_again()
3747 instance->instancet->fire_cmd(instance, in megasas_issue_pending_cmds_again()
3749 0, instance->reg_set); in megasas_issue_pending_cmds_again()
3751 dev_notice(&instance->pdev->dev, "%p scsi cmd [%02x]" in megasas_issue_pending_cmds_again()
3755 atomic_inc(&instance->fw_outstanding); in megasas_issue_pending_cmds_again()
3756 instance->instancet->fire_cmd(instance, in megasas_issue_pending_cmds_again()
3758 cmd->frame_count-1, instance->reg_set); in megasas_issue_pending_cmds_again()
3760 dev_notice(&instance->pdev->dev, "%p unexpected cmd on the" in megasas_issue_pending_cmds_again()
3766 if (instance->aen_cmd) { in megasas_issue_pending_cmds_again()
3767 dev_notice(&instance->pdev->dev, "aen_cmd in def process\n"); in megasas_issue_pending_cmds_again()
3768 megasas_return_cmd(instance, instance->aen_cmd); in megasas_issue_pending_cmds_again()
3770 instance->aen_cmd = NULL; in megasas_issue_pending_cmds_again()
3776 seq_num = instance->last_seq_num; in megasas_issue_pending_cmds_again()
3781 megasas_register_aen(instance, seq_num, class_locale.word); in megasas_issue_pending_cmds_again()
3794 megasas_internal_reset_defer_cmds(struct megasas_instance *instance) in megasas_internal_reset_defer_cmds() argument
3798 u16 max_cmd = instance->max_fw_cmds; in megasas_internal_reset_defer_cmds()
3803 spin_lock_irqsave(&instance->mfi_pool_lock, flags); in megasas_internal_reset_defer_cmds()
3805 cmd = instance->cmd_list[i]; in megasas_internal_reset_defer_cmds()
3807 dev_notice(&instance->pdev->dev, "moving cmd[%d]:%p:%d:%p" in megasas_internal_reset_defer_cmds()
3812 dev_notice(&instance->pdev->dev, "ERROR while" in megasas_internal_reset_defer_cmds()
3821 &instance->internal_reset_pending_q); in megasas_internal_reset_defer_cmds()
3824 spin_unlock_irqrestore(&instance->mfi_pool_lock, flags); in megasas_internal_reset_defer_cmds()
3831 struct megasas_instance *instance = in process_fw_state_change_wq() local
3836 if (atomic_read(&instance->adprecovery) != MEGASAS_ADPRESET_SM_INFAULT) { in process_fw_state_change_wq()
3837 dev_notice(&instance->pdev->dev, "error, recovery st %x\n", in process_fw_state_change_wq()
3838 atomic_read(&instance->adprecovery)); in process_fw_state_change_wq()
3842 if (atomic_read(&instance->adprecovery) == MEGASAS_ADPRESET_SM_INFAULT) { in process_fw_state_change_wq()
3843 dev_notice(&instance->pdev->dev, "FW detected to be in fault" in process_fw_state_change_wq()
3846 instance->instancet->disable_intr(instance); in process_fw_state_change_wq()
3847 atomic_set(&instance->fw_outstanding, 0); in process_fw_state_change_wq()
3849 atomic_set(&instance->fw_reset_no_pci_access, 1); in process_fw_state_change_wq()
3850 instance->instancet->adp_reset(instance, instance->reg_set); in process_fw_state_change_wq()
3851 atomic_set(&instance->fw_reset_no_pci_access, 0); in process_fw_state_change_wq()
3853 dev_notice(&instance->pdev->dev, "FW restarted successfully," in process_fw_state_change_wq()
3856 dev_notice(&instance->pdev->dev, "HBA recovery state machine," in process_fw_state_change_wq()
3864 if (megasas_transition_to_ready(instance, 1)) { in process_fw_state_change_wq()
3865 dev_notice(&instance->pdev->dev, "adapter not ready\n"); in process_fw_state_change_wq()
3867 atomic_set(&instance->fw_reset_no_pci_access, 1); in process_fw_state_change_wq()
3868 megaraid_sas_kill_hba(instance); in process_fw_state_change_wq()
3872 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS1064R) || in process_fw_state_change_wq()
3873 (instance->pdev->device == PCI_DEVICE_ID_DELL_PERC5) || in process_fw_state_change_wq()
3874 (instance->pdev->device == PCI_DEVICE_ID_LSI_VERDE_ZCR) in process_fw_state_change_wq()
3876 *instance->consumer = *instance->producer; in process_fw_state_change_wq()
3878 *instance->consumer = 0; in process_fw_state_change_wq()
3879 *instance->producer = 0; in process_fw_state_change_wq()
3882 megasas_issue_init_mfi(instance); in process_fw_state_change_wq()
3884 spin_lock_irqsave(&instance->hba_lock, flags); in process_fw_state_change_wq()
3885 atomic_set(&instance->adprecovery, MEGASAS_HBA_OPERATIONAL); in process_fw_state_change_wq()
3886 spin_unlock_irqrestore(&instance->hba_lock, flags); in process_fw_state_change_wq()
3887 instance->instancet->enable_intr(instance); in process_fw_state_change_wq()
3889 megasas_issue_pending_cmds_again(instance); in process_fw_state_change_wq()
3890 instance->issuepend_done = 1; in process_fw_state_change_wq()
3896 * @instance: Adapter soft state
3903 megasas_deplete_reply_queue(struct megasas_instance *instance, in megasas_deplete_reply_queue() argument
3909 if ((mfiStatus = instance->instancet->check_reset(instance, in megasas_deplete_reply_queue()
3910 instance->reg_set)) == 1) { in megasas_deplete_reply_queue()
3914 mfiStatus = instance->instancet->clear_intr(instance); in megasas_deplete_reply_queue()
3917 if (!instance->msix_vectors) in megasas_deplete_reply_queue()
3921 instance->mfiStatus = mfiStatus; in megasas_deplete_reply_queue()
3924 fw_state = instance->instancet->read_fw_status_reg( in megasas_deplete_reply_queue()
3925 instance) & MFI_STATE_MASK; in megasas_deplete_reply_queue()
3928 dev_notice(&instance->pdev->dev, "fw state:%x\n", in megasas_deplete_reply_queue()
3933 (instance->disableOnlineCtrlReset == 0)) { in megasas_deplete_reply_queue()
3934 dev_notice(&instance->pdev->dev, "wait adp restart\n"); in megasas_deplete_reply_queue()
3936 if ((instance->pdev->device == in megasas_deplete_reply_queue()
3938 (instance->pdev->device == in megasas_deplete_reply_queue()
3940 (instance->pdev->device == in megasas_deplete_reply_queue()
3943 *instance->consumer = in megasas_deplete_reply_queue()
3948 instance->instancet->disable_intr(instance); in megasas_deplete_reply_queue()
3949 atomic_set(&instance->adprecovery, MEGASAS_ADPRESET_SM_INFAULT); in megasas_deplete_reply_queue()
3950 instance->issuepend_done = 0; in megasas_deplete_reply_queue()
3952 atomic_set(&instance->fw_outstanding, 0); in megasas_deplete_reply_queue()
3953 megasas_internal_reset_defer_cmds(instance); in megasas_deplete_reply_queue()
3955 dev_notice(&instance->pdev->dev, "fwState=%x, stage:%d\n", in megasas_deplete_reply_queue()
3956 fw_state, atomic_read(&instance->adprecovery)); in megasas_deplete_reply_queue()
3958 schedule_work(&instance->work_init); in megasas_deplete_reply_queue()
3962 dev_notice(&instance->pdev->dev, "fwstate:%x, dis_OCR=%x\n", in megasas_deplete_reply_queue()
3963 fw_state, instance->disableOnlineCtrlReset); in megasas_deplete_reply_queue()
3967 tasklet_schedule(&instance->isr_tasklet); in megasas_deplete_reply_queue()
3979 struct megasas_instance *instance = irq_context->instance; in megasas_isr() local
3983 if (atomic_read(&instance->fw_reset_no_pci_access)) in megasas_isr()
3986 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_isr()
3987 rc = megasas_deplete_reply_queue(instance, DID_OK); in megasas_isr()
3988 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_isr()
3995 * @instance: Adapter soft state
4004 megasas_transition_to_ready(struct megasas_instance *instance, int ocr) in megasas_transition_to_ready() argument
4011 abs_state = instance->instancet->read_fw_status_reg(instance); in megasas_transition_to_ready()
4015 dev_info(&instance->pdev->dev, "Waiting for FW to come to ready" in megasas_transition_to_ready()
4023 dev_printk(KERN_ERR, &instance->pdev->dev, in megasas_transition_to_ready()
4031 dev_printk(KERN_DEBUG, &instance->pdev->dev, "System Register set:\n"); in megasas_transition_to_ready()
4032 megasas_dump_reg_set(instance->reg_set); in megasas_transition_to_ready()
4040 if ((instance->pdev->device == in megasas_transition_to_ready()
4042 (instance->pdev->device == in megasas_transition_to_ready()
4044 (instance->adapter_type != MFI_SERIES)) in megasas_transition_to_ready()
4047 &instance->reg_set->doorbell); in megasas_transition_to_ready()
4051 &instance->reg_set->inbound_doorbell); in megasas_transition_to_ready()
4057 if ((instance->pdev->device == in megasas_transition_to_ready()
4059 (instance->pdev->device == in megasas_transition_to_ready()
4061 (instance->adapter_type != MFI_SERIES)) in megasas_transition_to_ready()
4063 &instance->reg_set->doorbell); in megasas_transition_to_ready()
4066 &instance->reg_set->inbound_doorbell); in megasas_transition_to_ready()
4075 instance->instancet->disable_intr(instance); in megasas_transition_to_ready()
4076 if ((instance->pdev->device == in megasas_transition_to_ready()
4078 (instance->pdev->device == in megasas_transition_to_ready()
4080 (instance->adapter_type != MFI_SERIES)) { in megasas_transition_to_ready()
4082 &instance->reg_set->doorbell); in megasas_transition_to_ready()
4084 if (instance->adapter_type != MFI_SERIES) { in megasas_transition_to_ready()
4087 instance, in megasas_transition_to_ready()
4088 &instance-> in megasas_transition_to_ready()
4098 &instance->reg_set->inbound_doorbell); in megasas_transition_to_ready()
4131 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Unknown state 0x%x\n", in megasas_transition_to_ready()
4133 dev_printk(KERN_DEBUG, &instance->pdev->dev, "System Register set:\n"); in megasas_transition_to_ready()
4134 megasas_dump_reg_set(instance->reg_set); in megasas_transition_to_ready()
4142 curr_abs_state = instance->instancet-> in megasas_transition_to_ready()
4143 read_fw_status_reg(instance); in megasas_transition_to_ready()
4155 dev_printk(KERN_DEBUG, &instance->pdev->dev, "FW state [%d] hasn't changed " in megasas_transition_to_ready()
4157 dev_printk(KERN_DEBUG, &instance->pdev->dev, "System Register set:\n"); in megasas_transition_to_ready()
4158 megasas_dump_reg_set(instance->reg_set); in megasas_transition_to_ready()
4165 dev_info(&instance->pdev->dev, "FW now in Ready state\n"); in megasas_transition_to_ready()
4172 * @instance: Adapter soft state
4174 static void megasas_teardown_frame_pool(struct megasas_instance *instance) in megasas_teardown_frame_pool() argument
4177 u16 max_cmd = instance->max_mfi_cmds; in megasas_teardown_frame_pool()
4180 if (!instance->frame_dma_pool) in megasas_teardown_frame_pool()
4188 cmd = instance->cmd_list[i]; in megasas_teardown_frame_pool()
4191 dma_pool_free(instance->frame_dma_pool, cmd->frame, in megasas_teardown_frame_pool()
4195 dma_pool_free(instance->sense_dma_pool, cmd->sense, in megasas_teardown_frame_pool()
4202 dma_pool_destroy(instance->frame_dma_pool); in megasas_teardown_frame_pool()
4203 dma_pool_destroy(instance->sense_dma_pool); in megasas_teardown_frame_pool()
4205 instance->frame_dma_pool = NULL; in megasas_teardown_frame_pool()
4206 instance->sense_dma_pool = NULL; in megasas_teardown_frame_pool()
4211 * @instance: Adapter soft state
4218 static int megasas_create_frame_pool(struct megasas_instance *instance) in megasas_create_frame_pool() argument
4225 max_cmd = instance->max_mfi_cmds; in megasas_create_frame_pool()
4238 frame_count = (instance->adapter_type == MFI_SERIES) ? in megasas_create_frame_pool()
4240 instance->mfi_frame_size = MEGAMFI_FRAME_SIZE * frame_count; in megasas_create_frame_pool()
4244 instance->frame_dma_pool = dma_pool_create("megasas frame pool", in megasas_create_frame_pool()
4245 &instance->pdev->dev, in megasas_create_frame_pool()
4246 instance->mfi_frame_size, 256, 0); in megasas_create_frame_pool()
4248 if (!instance->frame_dma_pool) { in megasas_create_frame_pool()
4249 dev_printk(KERN_DEBUG, &instance->pdev->dev, "failed to setup frame pool\n"); in megasas_create_frame_pool()
4253 instance->sense_dma_pool = dma_pool_create("megasas sense pool", in megasas_create_frame_pool()
4254 &instance->pdev->dev, 128, in megasas_create_frame_pool()
4257 if (!instance->sense_dma_pool) { in megasas_create_frame_pool()
4258 dev_printk(KERN_DEBUG, &instance->pdev->dev, "failed to setup sense pool\n"); in megasas_create_frame_pool()
4260 dma_pool_destroy(instance->frame_dma_pool); in megasas_create_frame_pool()
4261 instance->frame_dma_pool = NULL; in megasas_create_frame_pool()
4273 cmd = instance->cmd_list[i]; in megasas_create_frame_pool()
4275 cmd->frame = dma_pool_zalloc(instance->frame_dma_pool, in megasas_create_frame_pool()
4278 cmd->sense = dma_pool_alloc(instance->sense_dma_pool, in megasas_create_frame_pool()
4286 dev_printk(KERN_DEBUG, &instance->pdev->dev, "dma_pool_alloc failed\n"); in megasas_create_frame_pool()
4287 megasas_teardown_frame_pool(instance); in megasas_create_frame_pool()
4293 if ((instance->adapter_type == MFI_SERIES) && reset_devices) in megasas_create_frame_pool()
4302 * @instance: Adapter soft state
4304 void megasas_free_cmds(struct megasas_instance *instance) in megasas_free_cmds() argument
4309 megasas_teardown_frame_pool(instance); in megasas_free_cmds()
4312 for (i = 0; i < instance->max_mfi_cmds; i++) in megasas_free_cmds()
4314 kfree(instance->cmd_list[i]); in megasas_free_cmds()
4317 kfree(instance->cmd_list); in megasas_free_cmds()
4318 instance->cmd_list = NULL; in megasas_free_cmds()
4320 INIT_LIST_HEAD(&instance->cmd_pool); in megasas_free_cmds()
4325 * @instance: Adapter soft state
4341 int megasas_alloc_cmds(struct megasas_instance *instance) in megasas_alloc_cmds() argument
4348 max_cmd = instance->max_mfi_cmds; in megasas_alloc_cmds()
4351 * instance->cmd_list is an array of struct megasas_cmd pointers. in megasas_alloc_cmds()
4355 instance->cmd_list = kcalloc(max_cmd, sizeof(struct megasas_cmd*), GFP_KERNEL); in megasas_alloc_cmds()
4357 if (!instance->cmd_list) { in megasas_alloc_cmds()
4358 dev_printk(KERN_DEBUG, &instance->pdev->dev, "out of memory\n"); in megasas_alloc_cmds()
4362 memset(instance->cmd_list, 0, sizeof(struct megasas_cmd *) *max_cmd); in megasas_alloc_cmds()
4365 instance->cmd_list[i] = kmalloc(sizeof(struct megasas_cmd), in megasas_alloc_cmds()
4368 if (!instance->cmd_list[i]) { in megasas_alloc_cmds()
4371 kfree(instance->cmd_list[j]); in megasas_alloc_cmds()
4373 kfree(instance->cmd_list); in megasas_alloc_cmds()
4374 instance->cmd_list = NULL; in megasas_alloc_cmds()
4381 cmd = instance->cmd_list[i]; in megasas_alloc_cmds()
4385 cmd->instance = instance; in megasas_alloc_cmds()
4387 list_add_tail(&cmd->list, &instance->cmd_pool); in megasas_alloc_cmds()
4393 if (megasas_create_frame_pool(instance)) { in megasas_alloc_cmds()
4394 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Error creating frame DMA pool\n"); in megasas_alloc_cmds()
4395 megasas_free_cmds(instance); in megasas_alloc_cmds()
4404 * @instance: Adapter soft state
4410 dcmd_timeout_ocr_possible(struct megasas_instance *instance) { in dcmd_timeout_ocr_possible() argument
4412 if (instance->adapter_type == MFI_SERIES) in dcmd_timeout_ocr_possible()
4414 else if (instance->unload || in dcmd_timeout_ocr_possible()
4416 &instance->reset_flags)) in dcmd_timeout_ocr_possible()
4423 megasas_get_pd_info(struct megasas_instance *instance, struct scsi_device *sdev) in megasas_get_pd_info() argument
4433 cmd = megasas_get_cmd(instance); in megasas_get_pd_info()
4436 dev_err(&instance->pdev->dev, "Failed to get cmd %s\n", __func__); in megasas_get_pd_info()
4442 memset(instance->pd_info, 0, sizeof(*instance->pd_info)); in megasas_get_pd_info()
4455 megasas_set_dma_settings(instance, dcmd, instance->pd_info_h, in megasas_get_pd_info()
4458 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_pd_info()
4459 !instance->mask_interrupts) in megasas_get_pd_info()
4460 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_get_pd_info()
4462 ret = megasas_issue_polled(instance, cmd); in megasas_get_pd_info()
4467 le16_to_cpus((u16 *)&instance->pd_info->state.ddf.pdType); in megasas_get_pd_info()
4469 instance->pd_info->state.ddf.pdType.intf; in megasas_get_pd_info()
4474 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_pd_info()
4477 mutex_unlock(&instance->reset_mutex); in megasas_get_pd_info()
4478 megasas_reset_fusion(instance->host, in megasas_get_pd_info()
4480 mutex_lock(&instance->reset_mutex); in megasas_get_pd_info()
4483 megaraid_sas_kill_hba(instance); in megasas_get_pd_info()
4486 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_get_pd_info()
4495 megasas_return_cmd(instance, cmd); in megasas_get_pd_info()
4501 * @instance: Adapter soft state
4509 megasas_get_pd_list(struct megasas_instance *instance) in megasas_get_pd_list() argument
4517 if (instance->pd_list_not_supported) { in megasas_get_pd_list()
4518 dev_info(&instance->pdev->dev, "MR_DCMD_PD_LIST_QUERY " in megasas_get_pd_list()
4523 ci = instance->pd_list_buf; in megasas_get_pd_list()
4525 cmd = megasas_get_cmd(instance); in megasas_get_pd_list()
4528 dev_printk(KERN_DEBUG, &instance->pdev->dev, "(get_pd_list): Failed to get cmd\n"); in megasas_get_pd_list()
4548 megasas_set_dma_settings(instance, dcmd, instance->pd_list_buf_h, in megasas_get_pd_list()
4551 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_pd_list()
4552 !instance->mask_interrupts) in megasas_get_pd_list()
4553 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_get_pd_list()
4556 ret = megasas_issue_polled(instance, cmd); in megasas_get_pd_list()
4560 dev_info(&instance->pdev->dev, "MR_DCMD_PD_LIST_QUERY " in megasas_get_pd_list()
4563 if (instance->adapter_type != MFI_SERIES) in megasas_get_pd_list()
4564 megaraid_sas_kill_hba(instance); in megasas_get_pd_list()
4566 instance->pd_list_not_supported = 1; in megasas_get_pd_list()
4570 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_pd_list()
4578 mutex_unlock(&instance->reset_mutex); in megasas_get_pd_list()
4579 megasas_reset_fusion(instance->host, in megasas_get_pd_list()
4581 mutex_lock(&instance->reset_mutex); in megasas_get_pd_list()
4584 megaraid_sas_kill_hba(instance); in megasas_get_pd_list()
4587 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d \n", in megasas_get_pd_list()
4597 dev_info(&instance->pdev->dev, "%s, sysPD count: 0x%x\n", in megasas_get_pd_list()
4604 memset(instance->local_pd_list, 0, in megasas_get_pd_list()
4608 instance->local_pd_list[le16_to_cpu(pd_addr->deviceId)].tid = in megasas_get_pd_list()
4610 instance->local_pd_list[le16_to_cpu(pd_addr->deviceId)].driveType = in megasas_get_pd_list()
4612 instance->local_pd_list[le16_to_cpu(pd_addr->deviceId)].driveState = in megasas_get_pd_list()
4615 dev_info(&instance->pdev->dev, in megasas_get_pd_list()
4622 memcpy(instance->pd_list, instance->local_pd_list, in megasas_get_pd_list()
4623 sizeof(instance->pd_list)); in megasas_get_pd_list()
4629 megasas_return_cmd(instance, cmd); in megasas_get_pd_list()
4636 * @instance: Adapter soft state
4644 megasas_get_ld_list(struct megasas_instance *instance) in megasas_get_ld_list() argument
4653 ci = instance->ld_list_buf; in megasas_get_ld_list()
4654 ci_h = instance->ld_list_buf_h; in megasas_get_ld_list()
4656 cmd = megasas_get_cmd(instance); in megasas_get_ld_list()
4659 dev_printk(KERN_DEBUG, &instance->pdev->dev, "megasas_get_ld_list: Failed to get cmd\n"); in megasas_get_ld_list()
4668 if (instance->supportmax256vd) in megasas_get_ld_list()
4679 megasas_set_dma_settings(instance, dcmd, ci_h, in megasas_get_ld_list()
4682 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_ld_list()
4683 !instance->mask_interrupts) in megasas_get_ld_list()
4684 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_get_ld_list()
4687 ret = megasas_issue_polled(instance, cmd); in megasas_get_ld_list()
4693 megaraid_sas_kill_hba(instance); in megasas_get_ld_list()
4697 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_ld_list()
4705 mutex_unlock(&instance->reset_mutex); in megasas_get_ld_list()
4706 megasas_reset_fusion(instance->host, in megasas_get_ld_list()
4708 mutex_lock(&instance->reset_mutex); in megasas_get_ld_list()
4711 megaraid_sas_kill_hba(instance); in megasas_get_ld_list()
4714 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_get_ld_list()
4723 dev_info(&instance->pdev->dev, "%s, LD count: 0x%x\n", in megasas_get_ld_list()
4726 if (ld_count > instance->fw_supported_vd_count) in megasas_get_ld_list()
4729 memset(instance->ld_ids, 0xff, MAX_LOGICAL_DRIVES_EXT); in megasas_get_ld_list()
4734 instance->ld_ids[ids] = ci->ldList[ld_index].ref.targetId; in megasas_get_ld_list()
4736 dev_info(&instance->pdev->dev, in megasas_get_ld_list()
4746 megasas_return_cmd(instance, cmd); in megasas_get_ld_list()
4753 * @instance: Adapter soft state
4761 megasas_ld_list_query(struct megasas_instance *instance, u8 query_type) in megasas_ld_list_query() argument
4770 ci = instance->ld_targetid_list_buf; in megasas_ld_list_query()
4771 ci_h = instance->ld_targetid_list_buf_h; in megasas_ld_list_query()
4773 cmd = megasas_get_cmd(instance); in megasas_ld_list_query()
4776 dev_warn(&instance->pdev->dev, in megasas_ld_list_query()
4787 if (instance->supportmax256vd) in megasas_ld_list_query()
4799 megasas_set_dma_settings(instance, dcmd, ci_h, in megasas_ld_list_query()
4802 if ((instance->adapter_type != MFI_SERIES) && in megasas_ld_list_query()
4803 !instance->mask_interrupts) in megasas_ld_list_query()
4804 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_ld_list_query()
4806 ret = megasas_issue_polled(instance, cmd); in megasas_ld_list_query()
4810 dev_info(&instance->pdev->dev, in megasas_ld_list_query()
4813 ret = megasas_get_ld_list(instance); in megasas_ld_list_query()
4816 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_ld_list_query()
4824 mutex_unlock(&instance->reset_mutex); in megasas_ld_list_query()
4825 megasas_reset_fusion(instance->host, in megasas_ld_list_query()
4827 mutex_lock(&instance->reset_mutex); in megasas_ld_list_query()
4830 megaraid_sas_kill_hba(instance); in megasas_ld_list_query()
4833 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_ld_list_query()
4843 dev_info(&instance->pdev->dev, "%s, LD count: 0x%x\n", in megasas_ld_list_query()
4846 if ((tgtid_count > (instance->fw_supported_vd_count))) in megasas_ld_list_query()
4849 memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS); in megasas_ld_list_query()
4852 instance->ld_ids[ids] = ci->targetId[ld_index]; in megasas_ld_list_query()
4854 dev_info(&instance->pdev->dev, "LD%d: targetID: 0x%03x\n", in megasas_ld_list_query()
4862 megasas_return_cmd(instance, cmd); in megasas_ld_list_query()
4875 * @instance: Adapter soft state
4881 megasas_host_device_list_query(struct megasas_instance *instance, in megasas_host_device_list_query() argument
4891 ci = instance->host_device_list_buf; in megasas_host_device_list_query()
4892 ci_h = instance->host_device_list_buf_h; in megasas_host_device_list_query()
4894 cmd = megasas_get_cmd(instance); in megasas_host_device_list_query()
4897 dev_warn(&instance->pdev->dev, in megasas_host_device_list_query()
4918 megasas_set_dma_settings(instance, dcmd, ci_h, HOST_DEVICE_LIST_SZ); in megasas_host_device_list_query()
4920 if (!instance->mask_interrupts) { in megasas_host_device_list_query()
4921 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_host_device_list_query()
4924 ret = megasas_issue_polled(instance, cmd); in megasas_host_device_list_query()
4939 dev_info(&instance->pdev->dev, "%s, Device count: 0x%x\n", in megasas_host_device_list_query()
4942 memset(instance->local_pd_list, 0, in megasas_host_device_list_query()
4944 memset(instance->ld_ids, 0xff, MAX_LOGICAL_DRIVES_EXT); in megasas_host_device_list_query()
4948 instance->local_pd_list[target_id].tid = target_id; in megasas_host_device_list_query()
4949 instance->local_pd_list[target_id].driveType = in megasas_host_device_list_query()
4951 instance->local_pd_list[target_id].driveState = in megasas_host_device_list_query()
4954 dev_info(&instance->pdev->dev, in megasas_host_device_list_query()
4958 instance->ld_ids[target_id] = target_id; in megasas_host_device_list_query()
4960 dev_info(&instance->pdev->dev, in megasas_host_device_list_query()
4966 memcpy(instance->pd_list, instance->local_pd_list, in megasas_host_device_list_query()
4967 sizeof(instance->pd_list)); in megasas_host_device_list_query()
4971 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_host_device_list_query()
4974 mutex_unlock(&instance->reset_mutex); in megasas_host_device_list_query()
4975 megasas_reset_fusion(instance->host, in megasas_host_device_list_query()
4977 mutex_lock(&instance->reset_mutex); in megasas_host_device_list_query()
4980 megaraid_sas_kill_hba(instance); in megasas_host_device_list_query()
4983 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_host_device_list_query()
4989 dev_err(&instance->pdev->dev, in megasas_host_device_list_query()
4996 megasas_return_cmd(instance, cmd); in megasas_host_device_list_query()
5003 * instance : Controller's instance
5005 static void megasas_update_ext_vd_details(struct megasas_instance *instance) in megasas_update_ext_vd_details() argument
5010 fusion = instance->ctrl_context; in megasas_update_ext_vd_details()
5015 instance->supportmax256vd = in megasas_update_ext_vd_details()
5016 instance->ctrl_info_buf->adapterOperations3.supportMaxExtLDs; in megasas_update_ext_vd_details()
5018 if (instance->ctrl_info_buf->max_lds > 64) in megasas_update_ext_vd_details()
5019 instance->supportmax256vd = 1; in megasas_update_ext_vd_details()
5021 instance->drv_supported_vd_count = MEGASAS_MAX_LD_CHANNELS in megasas_update_ext_vd_details()
5023 instance->drv_supported_pd_count = MEGASAS_MAX_PD_CHANNELS in megasas_update_ext_vd_details()
5025 if (instance->supportmax256vd) { in megasas_update_ext_vd_details()
5026 instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES_EXT; in megasas_update_ext_vd_details()
5027 instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES; in megasas_update_ext_vd_details()
5029 instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES; in megasas_update_ext_vd_details()
5030 instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES; in megasas_update_ext_vd_details()
5033 dev_info(&instance->pdev->dev, in megasas_update_ext_vd_details()
5035 instance->ctrl_info_buf->adapterOperations3.supportMaxExtLDs ? 1 : 0, in megasas_update_ext_vd_details()
5036 instance->ctrl_info_buf->max_lds); in megasas_update_ext_vd_details()
5038 if (instance->max_raid_mapsize) { in megasas_update_ext_vd_details()
5039 ventura_map_sz = instance->max_raid_mapsize * in megasas_update_ext_vd_details()
5046 (instance->fw_supported_vd_count - 1)); in megasas_update_ext_vd_details()
5052 if (instance->supportmax256vd) in megasas_update_ext_vd_details()
5068 void megasas_get_snapdump_properties(struct megasas_instance *instance) in megasas_get_snapdump_properties() argument
5076 ci = instance->snapdump_prop; in megasas_get_snapdump_properties()
5077 ci_h = instance->snapdump_prop_h; in megasas_get_snapdump_properties()
5082 cmd = megasas_get_cmd(instance); in megasas_get_snapdump_properties()
5085 dev_dbg(&instance->pdev->dev, "Failed to get a free cmd\n"); in megasas_get_snapdump_properties()
5103 megasas_set_dma_settings(instance, dcmd, ci_h, in megasas_get_snapdump_properties()
5106 if (!instance->mask_interrupts) { in megasas_get_snapdump_properties()
5107 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_get_snapdump_properties()
5110 ret = megasas_issue_polled(instance, cmd); in megasas_get_snapdump_properties()
5116 instance->snapdump_wait_time = in megasas_get_snapdump_properties()
5122 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_snapdump_properties()
5125 mutex_unlock(&instance->reset_mutex); in megasas_get_snapdump_properties()
5126 megasas_reset_fusion(instance->host, in megasas_get_snapdump_properties()
5128 mutex_lock(&instance->reset_mutex); in megasas_get_snapdump_properties()
5131 megaraid_sas_kill_hba(instance); in megasas_get_snapdump_properties()
5134 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_get_snapdump_properties()
5141 megasas_return_cmd(instance, cmd); in megasas_get_snapdump_properties()
5146 * @instance: Adapter soft state
5153 megasas_get_ctrl_info(struct megasas_instance *instance) in megasas_get_ctrl_info() argument
5161 ci = instance->ctrl_info_buf; in megasas_get_ctrl_info()
5162 ci_h = instance->ctrl_info_buf_h; in megasas_get_ctrl_info()
5164 cmd = megasas_get_cmd(instance); in megasas_get_ctrl_info()
5167 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to get a free cmd\n"); in megasas_get_ctrl_info()
5186 megasas_set_dma_settings(instance, dcmd, ci_h, in megasas_get_ctrl_info()
5189 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_ctrl_info()
5190 !instance->mask_interrupts) { in megasas_get_ctrl_info()
5191 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_get_ctrl_info()
5193 ret = megasas_issue_polled(instance, cmd); in megasas_get_ctrl_info()
5214 megasas_update_ext_vd_details(instance); in megasas_get_ctrl_info()
5215 instance->support_seqnum_jbod_fp = in megasas_get_ctrl_info()
5217 instance->support_morethan256jbod = in megasas_get_ctrl_info()
5219 instance->support_nvme_passthru = in megasas_get_ctrl_info()
5221 instance->support_pci_lane_margining = in megasas_get_ctrl_info()
5223 instance->task_abort_tmo = ci->TaskAbortTO; in megasas_get_ctrl_info()
5224 instance->max_reset_tmo = ci->MaxResetTO; in megasas_get_ctrl_info()
5227 instance->is_imr = (ci->memory_size ? 0 : 1); in megasas_get_ctrl_info()
5229 instance->snapdump_wait_time = in megasas_get_ctrl_info()
5233 instance->enable_fw_dev_list = in megasas_get_ctrl_info()
5236 dev_info(&instance->pdev->dev, in megasas_get_ctrl_info()
5238 instance->is_imr ? "iMR" : "MR", in megasas_get_ctrl_info()
5241 instance->disableOnlineCtrlReset = in megasas_get_ctrl_info()
5243 instance->secure_jbod_support = in megasas_get_ctrl_info()
5245 dev_info(&instance->pdev->dev, "Online Controller Reset(OCR)\t: %s\n", in megasas_get_ctrl_info()
5246 instance->disableOnlineCtrlReset ? "Disabled" : "Enabled"); in megasas_get_ctrl_info()
5247 dev_info(&instance->pdev->dev, "Secure JBOD support\t: %s\n", in megasas_get_ctrl_info()
5248 instance->secure_jbod_support ? "Yes" : "No"); in megasas_get_ctrl_info()
5249 dev_info(&instance->pdev->dev, "NVMe passthru support\t: %s\n", in megasas_get_ctrl_info()
5250 instance->support_nvme_passthru ? "Yes" : "No"); in megasas_get_ctrl_info()
5251 dev_info(&instance->pdev->dev, in megasas_get_ctrl_info()
5253 instance->task_abort_tmo, instance->max_reset_tmo); in megasas_get_ctrl_info()
5254 dev_info(&instance->pdev->dev, "JBOD sequence map support\t: %s\n", in megasas_get_ctrl_info()
5255 instance->support_seqnum_jbod_fp ? "Yes" : "No"); in megasas_get_ctrl_info()
5256 dev_info(&instance->pdev->dev, "PCI Lane Margining support\t: %s\n", in megasas_get_ctrl_info()
5257 instance->support_pci_lane_margining ? "Yes" : "No"); in megasas_get_ctrl_info()
5262 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_ctrl_info()
5265 mutex_unlock(&instance->reset_mutex); in megasas_get_ctrl_info()
5266 megasas_reset_fusion(instance->host, in megasas_get_ctrl_info()
5268 mutex_lock(&instance->reset_mutex); in megasas_get_ctrl_info()
5271 megaraid_sas_kill_hba(instance); in megasas_get_ctrl_info()
5274 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_get_ctrl_info()
5280 megaraid_sas_kill_hba(instance); in megasas_get_ctrl_info()
5286 megasas_return_cmd(instance, cmd); in megasas_get_ctrl_info()
5295 * @instance: Adapter soft state
5306 int megasas_set_crash_dump_params(struct megasas_instance *instance, in megasas_set_crash_dump_params() argument
5313 cmd = megasas_get_cmd(instance); in megasas_set_crash_dump_params()
5316 dev_err(&instance->pdev->dev, "Failed to get a free cmd\n"); in megasas_set_crash_dump_params()
5334 megasas_set_dma_settings(instance, dcmd, instance->crash_dump_h, in megasas_set_crash_dump_params()
5337 if ((instance->adapter_type != MFI_SERIES) && in megasas_set_crash_dump_params()
5338 !instance->mask_interrupts) in megasas_set_crash_dump_params()
5339 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_set_crash_dump_params()
5341 ret = megasas_issue_polled(instance, cmd); in megasas_set_crash_dump_params()
5344 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_set_crash_dump_params()
5347 megasas_reset_fusion(instance->host, in megasas_set_crash_dump_params()
5351 megaraid_sas_kill_hba(instance); in megasas_set_crash_dump_params()
5354 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_set_crash_dump_params()
5359 megasas_return_cmd(instance, cmd); in megasas_set_crash_dump_params()
5366 * @instance: Adapter soft state
5371 megasas_issue_init_mfi(struct megasas_instance *instance) in megasas_issue_init_mfi() argument
5388 cmd = megasas_get_cmd(instance); in megasas_issue_init_mfi()
5402 initq_info->reply_queue_entries = cpu_to_le32(instance->max_fw_cmds + 1); in megasas_issue_init_mfi()
5403 initq_info->reply_queue_start_phys_addr_lo = cpu_to_le32(instance->reply_queue_h); in megasas_issue_init_mfi()
5405 initq_info->producer_index_phys_addr_lo = cpu_to_le32(instance->producer_h); in megasas_issue_init_mfi()
5406 initq_info->consumer_index_phys_addr_lo = cpu_to_le32(instance->consumer_h); in megasas_issue_init_mfi()
5420 instance->instancet->disable_intr(instance); in megasas_issue_init_mfi()
5426 if (megasas_issue_polled(instance, cmd)) { in megasas_issue_init_mfi()
5427 dev_err(&instance->pdev->dev, "Failed to init firmware\n"); in megasas_issue_init_mfi()
5428 megasas_return_cmd(instance, cmd); in megasas_issue_init_mfi()
5432 megasas_return_cmd(instance, cmd); in megasas_issue_init_mfi()
5441 megasas_init_adapter_mfi(struct megasas_instance *instance) in megasas_init_adapter_mfi() argument
5449 instance->max_fw_cmds = instance->instancet->read_fw_status_reg(instance) & 0x00FFFF; in megasas_init_adapter_mfi()
5455 instance->max_fw_cmds = instance->max_fw_cmds-1; in megasas_init_adapter_mfi()
5456 instance->max_mfi_cmds = instance->max_fw_cmds; in megasas_init_adapter_mfi()
5457 instance->max_num_sge = (instance->instancet->read_fw_status_reg(instance) & 0xFF0000) >> in megasas_init_adapter_mfi()
5463 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) || in megasas_init_adapter_mfi()
5464 (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY)) { in megasas_init_adapter_mfi()
5465 instance->max_scsi_cmds = (instance->max_fw_cmds - in megasas_init_adapter_mfi()
5467 sema_init(&instance->ioctl_sem, MEGASAS_SKINNY_INT_CMDS); in megasas_init_adapter_mfi()
5469 instance->max_scsi_cmds = (instance->max_fw_cmds - in megasas_init_adapter_mfi()
5471 sema_init(&instance->ioctl_sem, (MEGASAS_MFI_IOCTL_CMDS)); in megasas_init_adapter_mfi()
5474 instance->cur_can_queue = instance->max_scsi_cmds; in megasas_init_adapter_mfi()
5478 if (megasas_alloc_cmds(instance)) in megasas_init_adapter_mfi()
5491 reply_q_sz = context_sz * (instance->max_fw_cmds + 1); in megasas_init_adapter_mfi()
5493 instance->reply_queue = dma_alloc_coherent(&instance->pdev->dev, in megasas_init_adapter_mfi()
5494 reply_q_sz, &instance->reply_queue_h, GFP_KERNEL); in megasas_init_adapter_mfi()
5496 if (!instance->reply_queue) { in megasas_init_adapter_mfi()
5497 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Out of DMA mem for reply queue\n"); in megasas_init_adapter_mfi()
5501 if (megasas_issue_init_mfi(instance)) in megasas_init_adapter_mfi()
5504 if (megasas_get_ctrl_info(instance)) { in megasas_init_adapter_mfi()
5505 dev_err(&instance->pdev->dev, "(%d): Could get controller info " in megasas_init_adapter_mfi()
5506 "Fail from %s %d\n", instance->unique_id, in megasas_init_adapter_mfi()
5511 instance->fw_support_ieee = 0; in megasas_init_adapter_mfi()
5512 instance->fw_support_ieee = in megasas_init_adapter_mfi()
5513 (instance->instancet->read_fw_status_reg(instance) & in megasas_init_adapter_mfi()
5516 dev_notice(&instance->pdev->dev, "megasas_init_mfi: fw_support_ieee=%d", in megasas_init_adapter_mfi()
5517 instance->fw_support_ieee); in megasas_init_adapter_mfi()
5519 if (instance->fw_support_ieee) in megasas_init_adapter_mfi()
5520 instance->flag_ieee = 1; in megasas_init_adapter_mfi()
5526 dma_free_coherent(&instance->pdev->dev, reply_q_sz, in megasas_init_adapter_mfi()
5527 instance->reply_queue, instance->reply_queue_h); in megasas_init_adapter_mfi()
5529 megasas_free_cmds(instance); in megasas_init_adapter_mfi()
5536 void megasas_setup_irq_poll(struct megasas_instance *instance) in megasas_setup_irq_poll() argument
5541 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_setup_irq_poll()
5545 irq_ctx = &instance->irq_context[i]; in megasas_setup_irq_poll()
5546 irq_ctx->os_irq = pci_irq_vector(instance->pdev, i); in megasas_setup_irq_poll()
5549 instance->threshold_reply_count, in megasas_setup_irq_poll()
5556 * @instance: Adapter soft state
5563 megasas_setup_irqs_ioapic(struct megasas_instance *instance) in megasas_setup_irqs_ioapic() argument
5567 pdev = instance->pdev; in megasas_setup_irqs_ioapic()
5568 instance->irq_context[0].instance = instance; in megasas_setup_irqs_ioapic()
5569 instance->irq_context[0].MSIxIndex = 0; in megasas_setup_irqs_ioapic()
5570 snprintf(instance->irq_context->name, MEGASAS_MSIX_NAME_LEN, "%s%u", in megasas_setup_irqs_ioapic()
5571 "megasas", instance->host->host_no); in megasas_setup_irqs_ioapic()
5573 instance->instancet->service_isr, IRQF_SHARED, in megasas_setup_irqs_ioapic()
5574 instance->irq_context->name, &instance->irq_context[0])) { in megasas_setup_irqs_ioapic()
5575 dev_err(&instance->pdev->dev, in megasas_setup_irqs_ioapic()
5580 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_setup_irqs_ioapic()
5581 instance->low_latency_index_start = 0; in megasas_setup_irqs_ioapic()
5587 * @instance: Adapter soft state
5595 megasas_setup_irqs_msix(struct megasas_instance *instance, u8 is_probe) in megasas_setup_irqs_msix() argument
5600 pdev = instance->pdev; in megasas_setup_irqs_msix()
5603 for (i = 0; i < instance->msix_vectors; i++) { in megasas_setup_irqs_msix()
5604 instance->irq_context[i].instance = instance; in megasas_setup_irqs_msix()
5605 instance->irq_context[i].MSIxIndex = i; in megasas_setup_irqs_msix()
5606 snprintf(instance->irq_context[i].name, MEGASAS_MSIX_NAME_LEN, "%s%u-msix%u", in megasas_setup_irqs_msix()
5607 "megasas", instance->host->host_no, i); in megasas_setup_irqs_msix()
5609 instance->instancet->service_isr, 0, instance->irq_context[i].name, in megasas_setup_irqs_msix()
5610 &instance->irq_context[i])) { in megasas_setup_irqs_msix()
5611 dev_err(&instance->pdev->dev, in megasas_setup_irqs_msix()
5614 if (j < instance->low_latency_index_start) in megasas_setup_irqs_msix()
5618 &instance->irq_context[j]); in megasas_setup_irqs_msix()
5621 instance->msix_vectors = 0; in megasas_setup_irqs_msix()
5622 instance->msix_load_balance = false; in megasas_setup_irqs_msix()
5624 pci_free_irq_vectors(instance->pdev); in megasas_setup_irqs_msix()
5625 return megasas_setup_irqs_ioapic(instance); in megasas_setup_irqs_msix()
5637 * @instance: Adapter soft state
5641 megasas_destroy_irqs(struct megasas_instance *instance) { in megasas_destroy_irqs() argument
5647 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_destroy_irqs()
5648 if (instance->adapter_type != MFI_SERIES) { in megasas_destroy_irqs()
5650 irq_ctx = &instance->irq_context[i]; in megasas_destroy_irqs()
5655 if (instance->msix_vectors) in megasas_destroy_irqs()
5656 for (i = 0; i < instance->msix_vectors; i++) { in megasas_destroy_irqs()
5657 if (i < instance->low_latency_index_start) in megasas_destroy_irqs()
5659 pci_irq_vector(instance->pdev, i), NULL); in megasas_destroy_irqs()
5660 free_irq(pci_irq_vector(instance->pdev, i), in megasas_destroy_irqs()
5661 &instance->irq_context[i]); in megasas_destroy_irqs()
5664 free_irq(pci_irq_vector(instance->pdev, 0), in megasas_destroy_irqs()
5665 &instance->irq_context[0]); in megasas_destroy_irqs()
5670 * @instance: Adapter soft state
5675 megasas_setup_jbod_map(struct megasas_instance *instance) in megasas_setup_jbod_map() argument
5678 struct fusion_context *fusion = instance->ctrl_context; in megasas_setup_jbod_map()
5684 instance->use_seqnum_jbod_fp = in megasas_setup_jbod_map()
5685 instance->support_seqnum_jbod_fp; in megasas_setup_jbod_map()
5687 !instance->support_seqnum_jbod_fp) { in megasas_setup_jbod_map()
5688 dev_info(&instance->pdev->dev, in megasas_setup_jbod_map()
5691 instance->use_seqnum_jbod_fp = false; in megasas_setup_jbod_map()
5700 (&instance->pdev->dev, pd_seq_map_sz, in megasas_setup_jbod_map()
5703 dev_err(&instance->pdev->dev, in megasas_setup_jbod_map()
5707 dma_free_coherent(&instance->pdev->dev, in megasas_setup_jbod_map()
5712 instance->use_seqnum_jbod_fp = false; in megasas_setup_jbod_map()
5718 if (!megasas_sync_pd_seq_num(instance, false) && in megasas_setup_jbod_map()
5719 !megasas_sync_pd_seq_num(instance, true)) in megasas_setup_jbod_map()
5720 instance->use_seqnum_jbod_fp = true; in megasas_setup_jbod_map()
5722 instance->use_seqnum_jbod_fp = false; in megasas_setup_jbod_map()
5725 static void megasas_setup_reply_map(struct megasas_instance *instance) in megasas_setup_reply_map() argument
5730 low_latency_index_start = instance->low_latency_index_start; in megasas_setup_reply_map()
5732 for (queue = low_latency_index_start; queue < instance->msix_vectors; queue++) { in megasas_setup_reply_map()
5733 mask = pci_irq_get_affinity(instance->pdev, queue); in megasas_setup_reply_map()
5738 instance->reply_map[cpu] = queue; in megasas_setup_reply_map()
5745 instance->reply_map[cpu] = queue; in megasas_setup_reply_map()
5746 if (queue == (instance->msix_vectors - 1)) in megasas_setup_reply_map()
5755 * @instance: Adapter soft state
5763 int megasas_get_device_list(struct megasas_instance *instance) in megasas_get_device_list() argument
5765 memset(instance->pd_list, 0, in megasas_get_device_list()
5767 memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS); in megasas_get_device_list()
5769 if (instance->enable_fw_dev_list) { in megasas_get_device_list()
5770 if (megasas_host_device_list_query(instance, true)) in megasas_get_device_list()
5773 if (megasas_get_pd_list(instance) < 0) { in megasas_get_device_list()
5774 dev_err(&instance->pdev->dev, "failed to get PD list\n"); in megasas_get_device_list()
5778 if (megasas_ld_list_query(instance, in megasas_get_device_list()
5780 dev_err(&instance->pdev->dev, "failed to get LD list\n"); in megasas_get_device_list()
5790 * @instance: Adapter soft state
5794 megasas_set_high_iops_queue_affinity_hint(struct megasas_instance *instance) in megasas_set_high_iops_queue_affinity_hint() argument
5799 if (instance->perf_mode == MR_BALANCED_PERF_MODE) { in megasas_set_high_iops_queue_affinity_hint()
5800 local_numa_node = dev_to_node(&instance->pdev->dev); in megasas_set_high_iops_queue_affinity_hint()
5802 for (i = 0; i < instance->low_latency_index_start; i++) in megasas_set_high_iops_queue_affinity_hint()
5803 irq_set_affinity_hint(pci_irq_vector(instance->pdev, i), in megasas_set_high_iops_queue_affinity_hint()
5809 __megasas_alloc_irq_vectors(struct megasas_instance *instance) in __megasas_alloc_irq_vectors() argument
5812 struct irq_affinity desc = { .pre_vectors = instance->low_latency_index_start }; in __megasas_alloc_irq_vectors()
5817 if (instance->smp_affinity_enable) in __megasas_alloc_irq_vectors()
5822 i = pci_alloc_irq_vectors_affinity(instance->pdev, in __megasas_alloc_irq_vectors()
5823 instance->low_latency_index_start, in __megasas_alloc_irq_vectors()
5824 instance->msix_vectors, irq_flags, descp); in __megasas_alloc_irq_vectors()
5831 * @instance: Adapter soft state
5835 megasas_alloc_irq_vectors(struct megasas_instance *instance) in megasas_alloc_irq_vectors() argument
5840 i = __megasas_alloc_irq_vectors(instance); in megasas_alloc_irq_vectors()
5842 if ((instance->perf_mode == MR_BALANCED_PERF_MODE) && in megasas_alloc_irq_vectors()
5843 (i != instance->msix_vectors)) { in megasas_alloc_irq_vectors()
5844 if (instance->msix_vectors) in megasas_alloc_irq_vectors()
5845 pci_free_irq_vectors(instance->pdev); in megasas_alloc_irq_vectors()
5847 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_alloc_irq_vectors()
5848 instance->low_latency_index_start = 1; in megasas_alloc_irq_vectors()
5849 num_msix_req = num_online_cpus() + instance->low_latency_index_start; in megasas_alloc_irq_vectors()
5851 instance->msix_vectors = min(num_msix_req, in megasas_alloc_irq_vectors()
5852 instance->msix_vectors); in megasas_alloc_irq_vectors()
5854 i = __megasas_alloc_irq_vectors(instance); in megasas_alloc_irq_vectors()
5858 dev_info(&instance->pdev->dev, in megasas_alloc_irq_vectors()
5859 "requested/available msix %d/%d\n", instance->msix_vectors, i); in megasas_alloc_irq_vectors()
5862 instance->msix_vectors = i; in megasas_alloc_irq_vectors()
5864 instance->msix_vectors = 0; in megasas_alloc_irq_vectors()
5866 if (instance->smp_affinity_enable) in megasas_alloc_irq_vectors()
5867 megasas_set_high_iops_queue_affinity_hint(instance); in megasas_alloc_irq_vectors()
5872 * @instance: Adapter soft state
5877 static int megasas_init_fw(struct megasas_instance *instance) in megasas_init_fw() argument
5893 fusion = instance->ctrl_context; in megasas_init_fw()
5896 bar_list = pci_select_bars(instance->pdev, IORESOURCE_MEM); in megasas_init_fw()
5897 instance->bar = find_first_bit(&bar_list, BITS_PER_LONG); in megasas_init_fw()
5898 if (pci_request_selected_regions(instance->pdev, 1<<instance->bar, in megasas_init_fw()
5900 dev_printk(KERN_DEBUG, &instance->pdev->dev, "IO memory region busy!\n"); in megasas_init_fw()
5904 base_addr = pci_resource_start(instance->pdev, instance->bar); in megasas_init_fw()
5905 instance->reg_set = ioremap(base_addr, 8192); in megasas_init_fw()
5907 if (!instance->reg_set) { in megasas_init_fw()
5908 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to map IO mem\n"); in megasas_init_fw()
5913 dev_printk(KERN_DEBUG, &instance->pdev->dev, in megasas_init_fw()
5915 instance->bar, base_addr_phys, instance->reg_set); in megasas_init_fw()
5917 if (instance->adapter_type != MFI_SERIES) in megasas_init_fw()
5918 instance->instancet = &megasas_instance_template_fusion; in megasas_init_fw()
5920 switch (instance->pdev->device) { in megasas_init_fw()
5923 instance->instancet = &megasas_instance_template_ppc; in megasas_init_fw()
5927 instance->instancet = &megasas_instance_template_gen2; in megasas_init_fw()
5931 instance->instancet = &megasas_instance_template_skinny; in megasas_init_fw()
5936 instance->instancet = &megasas_instance_template_xscale; in megasas_init_fw()
5937 instance->pd_list_not_supported = 1; in megasas_init_fw()
5942 if (megasas_transition_to_ready(instance, 0)) { in megasas_init_fw()
5943 dev_info(&instance->pdev->dev, in megasas_init_fw()
5946 if (instance->adapter_type != MFI_SERIES) { in megasas_init_fw()
5947 status_reg = instance->instancet->read_fw_status_reg( in megasas_init_fw()
5948 instance); in megasas_init_fw()
5951 (instance, true, 0) == FAILED) in megasas_init_fw()
5957 atomic_set(&instance->fw_reset_no_pci_access, 1); in megasas_init_fw()
5958 instance->instancet->adp_reset in megasas_init_fw()
5959 (instance, instance->reg_set); in megasas_init_fw()
5960 atomic_set(&instance->fw_reset_no_pci_access, 0); in megasas_init_fw()
5965 if (megasas_transition_to_ready(instance, 0)) in megasas_init_fw()
5969 dev_info(&instance->pdev->dev, in megasas_init_fw()
5974 megasas_init_ctrl_params(instance); in megasas_init_fw()
5976 if (megasas_set_dma_mask(instance)) in megasas_init_fw()
5979 if (megasas_alloc_ctrl_mem(instance)) in megasas_init_fw()
5982 if (megasas_alloc_ctrl_dma_buffers(instance)) in megasas_init_fw()
5985 fusion = instance->ctrl_context; in megasas_init_fw()
5987 if (instance->adapter_type >= VENTURA_SERIES) { in megasas_init_fw()
5989 megasas_readl(instance, in megasas_init_fw()
5990 &instance->reg_set->outbound_scratch_pad_2); in megasas_init_fw()
5991 instance->max_raid_mapsize = ((scratch_pad_2 >> in megasas_init_fw()
5996 instance->enable_sdev_max_qd = enable_sdev_max_qd; in megasas_init_fw()
5998 switch (instance->adapter_type) { in megasas_init_fw()
6010 msix_enable = (instance->instancet->read_fw_status_reg(instance) & in megasas_init_fw()
6015 (instance, &instance->reg_set->outbound_scratch_pad_1); in megasas_init_fw()
6018 if (instance->adapter_type == THUNDERBOLT_SERIES) { in megasas_init_fw()
6020 instance->msix_vectors = (scratch_pad_1 in megasas_init_fw()
6023 instance->msix_vectors = ((scratch_pad_1 in megasas_init_fw()
6035 switch (instance->adapter_type) { in megasas_init_fw()
6037 if (instance->msix_vectors > 8) in megasas_init_fw()
6038 instance->msix_combined = true; in megasas_init_fw()
6042 if (instance->msix_vectors > 16) in megasas_init_fw()
6043 instance->msix_combined = true; in megasas_init_fw()
6048 instance->is_rdpq = (scratch_pad_1 & MR_RDPQ_MODE_OFFSET) ? in megasas_init_fw()
6051 if (instance->adapter_type >= INVADER_SERIES && in megasas_init_fw()
6052 !instance->msix_combined) { in megasas_init_fw()
6053 instance->msix_load_balance = true; in megasas_init_fw()
6054 instance->smp_affinity_enable = false; in megasas_init_fw()
6062 instance->reply_post_host_index_addr[loop] = in megasas_init_fw()
6064 ((u8 __iomem *)instance->reg_set + in megasas_init_fw()
6070 dev_info(&instance->pdev->dev, in megasas_init_fw()
6072 instance->msix_vectors); in megasas_init_fw()
6074 instance->msix_vectors = min(msix_vectors, in megasas_init_fw()
6075 instance->msix_vectors); in megasas_init_fw()
6077 instance->msix_vectors = 1; in megasas_init_fw()
6103 (instance->msix_vectors == MEGASAS_MAX_MSIX_QUEUES)) in megasas_init_fw()
6104 instance->perf_mode = MR_BALANCED_PERF_MODE; in megasas_init_fw()
6106 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_init_fw()
6109 if (instance->adapter_type == AERO_SERIES) { in megasas_init_fw()
6110 pcie_capability_read_word(instance->pdev, PCI_EXP_LNKSTA, &lnksta); in megasas_init_fw()
6118 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_init_fw()
6130 instance->perf_mode = perf_mode; in megasas_init_fw()
6136 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_init_fw()
6140 if (instance->perf_mode == MR_BALANCED_PERF_MODE) in megasas_init_fw()
6141 instance->low_latency_index_start = in megasas_init_fw()
6144 instance->low_latency_index_start = 1; in megasas_init_fw()
6146 num_msix_req = num_online_cpus() + instance->low_latency_index_start; in megasas_init_fw()
6148 instance->msix_vectors = min(num_msix_req, in megasas_init_fw()
6149 instance->msix_vectors); in megasas_init_fw()
6151 megasas_alloc_irq_vectors(instance); in megasas_init_fw()
6152 if (!instance->msix_vectors) in megasas_init_fw()
6153 instance->msix_load_balance = false; in megasas_init_fw()
6159 if (instance->msix_combined) { in megasas_init_fw()
6160 instance->reply_post_host_index_addr[0] = in megasas_init_fw()
6161 (u32 *)((u8 *)instance->reg_set + in megasas_init_fw()
6164 instance->reply_post_host_index_addr[0] = in megasas_init_fw()
6165 (u32 *)((u8 *)instance->reg_set + in megasas_init_fw()
6169 if (!instance->msix_vectors) { in megasas_init_fw()
6170 i = pci_alloc_irq_vectors(instance->pdev, 1, 1, PCI_IRQ_LEGACY); in megasas_init_fw()
6175 megasas_setup_reply_map(instance); in megasas_init_fw()
6177 dev_info(&instance->pdev->dev, in megasas_init_fw()
6179 instance->msix_vectors, (unsigned int)num_online_cpus()); in megasas_init_fw()
6180 dev_info(&instance->pdev->dev, in megasas_init_fw()
6181 "RDPQ mode\t: (%s)\n", instance->is_rdpq ? "enabled" : "disabled"); in megasas_init_fw()
6183 tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet, in megasas_init_fw()
6184 (unsigned long)instance); in megasas_init_fw()
6190 instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES; in megasas_init_fw()
6191 instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES; in megasas_init_fw()
6193 if (instance->instancet->init_adapter(instance)) in megasas_init_fw()
6196 if (instance->adapter_type >= VENTURA_SERIES) { in megasas_init_fw()
6198 megasas_readl(instance, in megasas_init_fw()
6199 &instance->reg_set->outbound_scratch_pad_3); in megasas_init_fw()
6202 instance->nvme_page_size = in megasas_init_fw()
6205 dev_info(&instance->pdev->dev, in megasas_init_fw()
6206 "NVME page size\t: (%d)\n", instance->nvme_page_size); in megasas_init_fw()
6209 if (instance->msix_vectors ? in megasas_init_fw()
6210 megasas_setup_irqs_msix(instance, 1) : in megasas_init_fw()
6211 megasas_setup_irqs_ioapic(instance)) in megasas_init_fw()
6214 if (instance->adapter_type != MFI_SERIES) in megasas_init_fw()
6215 megasas_setup_irq_poll(instance); in megasas_init_fw()
6217 instance->instancet->enable_intr(instance); in megasas_init_fw()
6219 dev_info(&instance->pdev->dev, "INIT adapter done\n"); in megasas_init_fw()
6221 megasas_setup_jbod_map(instance); in megasas_init_fw()
6223 if (megasas_get_device_list(instance) != SUCCESS) { in megasas_init_fw()
6224 dev_err(&instance->pdev->dev, in megasas_init_fw()
6231 if (instance->adapter_type >= VENTURA_SERIES) { in megasas_init_fw()
6237 dev_err(&instance->pdev->dev, in megasas_init_fw()
6246 dev_err(&instance->pdev->dev, in megasas_init_fw()
6269 ctrl_info = instance->ctrl_info_buf; in megasas_init_fw()
6277 instance->peerIsPresent = ctrl_info->cluster.peerIsPresent; in megasas_init_fw()
6278 instance->passive = ctrl_info->cluster.passive; in megasas_init_fw()
6279 memcpy(instance->clusterId, ctrl_info->clusterId, sizeof(instance->clusterId)); in megasas_init_fw()
6280 instance->UnevenSpanSupport = in megasas_init_fw()
6282 if (instance->UnevenSpanSupport) { in megasas_init_fw()
6283 struct fusion_context *fusion = instance->ctrl_context; in megasas_init_fw()
6284 if (MR_ValidateMapInfo(instance, instance->map_id)) in megasas_init_fw()
6291 instance->requestorId = ctrl_info->iov.requestorId; in megasas_init_fw()
6292 if (instance->pdev->device == PCI_DEVICE_ID_LSI_PLASMA) { in megasas_init_fw()
6294 instance->PlasmaFW111 = 1; in megasas_init_fw()
6296 dev_info(&instance->pdev->dev, "SR-IOV: firmware type: %s\n", in megasas_init_fw()
6297 instance->PlasmaFW111 ? "1.11" : "new"); in megasas_init_fw()
6299 if (instance->PlasmaFW111) { in megasas_init_fw()
6302 instance->requestorId = iovPtr->requestorId; in megasas_init_fw()
6305 dev_info(&instance->pdev->dev, "SRIOV: VF requestorId %d\n", in megasas_init_fw()
6306 instance->requestorId); in megasas_init_fw()
6309 instance->crash_dump_fw_support = in megasas_init_fw()
6311 instance->crash_dump_drv_support = in megasas_init_fw()
6312 (instance->crash_dump_fw_support && in megasas_init_fw()
6313 instance->crash_dump_buf); in megasas_init_fw()
6314 if (instance->crash_dump_drv_support) in megasas_init_fw()
6315 megasas_set_crash_dump_params(instance, in megasas_init_fw()
6319 if (instance->crash_dump_buf) in megasas_init_fw()
6320 dma_free_coherent(&instance->pdev->dev, in megasas_init_fw()
6322 instance->crash_dump_buf, in megasas_init_fw()
6323 instance->crash_dump_h); in megasas_init_fw()
6324 instance->crash_dump_buf = NULL; in megasas_init_fw()
6327 if (instance->snapdump_wait_time) { in megasas_init_fw()
6328 megasas_get_snapdump_properties(instance); in megasas_init_fw()
6329 dev_info(&instance->pdev->dev, "Snap dump wait time\t: %d\n", in megasas_init_fw()
6330 instance->snapdump_wait_time); in megasas_init_fw()
6333 dev_info(&instance->pdev->dev, in megasas_init_fw()
6339 dev_info(&instance->pdev->dev, "unevenspan support : %s\n", in megasas_init_fw()
6340 instance->UnevenSpanSupport ? "yes" : "no"); in megasas_init_fw()
6341 dev_info(&instance->pdev->dev, "firmware crash dump : %s\n", in megasas_init_fw()
6342 instance->crash_dump_drv_support ? "yes" : "no"); in megasas_init_fw()
6343 dev_info(&instance->pdev->dev, "JBOD sequence map : %s\n", in megasas_init_fw()
6344 instance->use_seqnum_jbod_fp ? "enabled" : "disabled"); in megasas_init_fw()
6346 instance->max_sectors_per_req = instance->max_num_sge * in megasas_init_fw()
6348 if (tmp_sectors && (instance->max_sectors_per_req > tmp_sectors)) in megasas_init_fw()
6349 instance->max_sectors_per_req = tmp_sectors; in megasas_init_fw()
6353 throttlequeuedepth <= instance->max_scsi_cmds) in megasas_init_fw()
6354 instance->throttlequeuedepth = throttlequeuedepth; in megasas_init_fw()
6356 instance->throttlequeuedepth = in megasas_init_fw()
6367 if (instance->requestorId) { in megasas_init_fw()
6368 if (!megasas_sriov_start_heartbeat(instance, 1)) { in megasas_init_fw()
6369 megasas_start_timer(instance); in megasas_init_fw()
6371 instance->skip_heartbeat_timer_del = 1; in megasas_init_fw()
6381 if (instance->adapter_type != MFI_SERIES) in megasas_init_fw()
6382 if (megasas_fusion_start_watchdog(instance) != SUCCESS) in megasas_init_fw()
6388 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_init_fw()
6389 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_init_fw()
6391 instance->instancet->disable_intr(instance); in megasas_init_fw()
6392 megasas_destroy_irqs(instance); in megasas_init_fw()
6394 if (instance->msix_vectors) in megasas_init_fw()
6395 pci_free_irq_vectors(instance->pdev); in megasas_init_fw()
6396 instance->msix_vectors = 0; in megasas_init_fw()
6398 megasas_free_ctrl_dma_buffers(instance); in megasas_init_fw()
6399 megasas_free_ctrl_mem(instance); in megasas_init_fw()
6401 iounmap(instance->reg_set); in megasas_init_fw()
6404 pci_release_selected_regions(instance->pdev, 1<<instance->bar); in megasas_init_fw()
6406 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_init_fw()
6413 * @instance: Adapter soft state
6415 static void megasas_release_mfi(struct megasas_instance *instance) in megasas_release_mfi() argument
6417 u32 reply_q_sz = sizeof(u32) *(instance->max_mfi_cmds + 1); in megasas_release_mfi()
6419 if (instance->reply_queue) in megasas_release_mfi()
6420 dma_free_coherent(&instance->pdev->dev, reply_q_sz, in megasas_release_mfi()
6421 instance->reply_queue, instance->reply_queue_h); in megasas_release_mfi()
6423 megasas_free_cmds(instance); in megasas_release_mfi()
6425 iounmap(instance->reg_set); in megasas_release_mfi()
6427 pci_release_selected_regions(instance->pdev, 1<<instance->bar); in megasas_release_mfi()
6432 * @instance: Adapter soft state
6443 megasas_get_seq_num(struct megasas_instance *instance, in megasas_get_seq_num() argument
6452 cmd = megasas_get_cmd(instance); in megasas_get_seq_num()
6459 el_info = dma_alloc_coherent(&instance->pdev->dev, in megasas_get_seq_num()
6463 megasas_return_cmd(instance, cmd); in megasas_get_seq_num()
6478 megasas_set_dma_settings(instance, dcmd, el_info_h, in megasas_get_seq_num()
6481 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_get_seq_num()
6483 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_get_seq_num()
6498 dma_free_coherent(&instance->pdev->dev, in megasas_get_seq_num()
6502 megasas_return_cmd(instance, cmd); in megasas_get_seq_num()
6509 * @instance: Adapter soft state
6517 megasas_register_aen(struct megasas_instance *instance, u32 seq_num, in megasas_register_aen() argument
6541 if (instance->aen_cmd) { in megasas_register_aen()
6544 le32_to_cpu(instance->aen_cmd->frame->dcmd.mbox.w[1]); in megasas_register_aen()
6548 dev_info(&instance->pdev->dev, in megasas_register_aen()
6578 instance->aen_cmd->abort_aen = 1; in megasas_register_aen()
6579 ret_val = megasas_issue_blocked_abort_cmd(instance, in megasas_register_aen()
6580 instance-> in megasas_register_aen()
6584 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to abort " in megasas_register_aen()
6591 cmd = megasas_get_cmd(instance); in megasas_register_aen()
6598 memset(instance->evt_detail, 0, sizeof(struct megasas_evt_detail)); in megasas_register_aen()
6614 instance->last_seq_num = seq_num; in megasas_register_aen()
6617 megasas_set_dma_settings(instance, dcmd, instance->evt_detail_h, in megasas_register_aen()
6620 if (instance->aen_cmd != NULL) { in megasas_register_aen()
6621 megasas_return_cmd(instance, cmd); in megasas_register_aen()
6630 instance->aen_cmd = cmd; in megasas_register_aen()
6635 instance->instancet->issue_dcmd(instance, cmd); in megasas_register_aen()
6653 * @instance: Adapter soft state
6659 megasas_get_target_prop(struct megasas_instance *instance, in megasas_get_target_prop() argument
6668 cmd = megasas_get_cmd(instance); in megasas_get_target_prop()
6671 dev_err(&instance->pdev->dev, in megasas_get_target_prop()
6678 memset(instance->tgt_prop, 0, sizeof(*instance->tgt_prop)); in megasas_get_target_prop()
6693 megasas_set_dma_settings(instance, dcmd, instance->tgt_prop_h, in megasas_get_target_prop()
6696 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_target_prop()
6697 !instance->mask_interrupts) in megasas_get_target_prop()
6698 ret = megasas_issue_blocked_cmd(instance, in megasas_get_target_prop()
6701 ret = megasas_issue_polled(instance, cmd); in megasas_get_target_prop()
6705 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_target_prop()
6708 mutex_unlock(&instance->reset_mutex); in megasas_get_target_prop()
6709 megasas_reset_fusion(instance->host, in megasas_get_target_prop()
6711 mutex_lock(&instance->reset_mutex); in megasas_get_target_prop()
6714 megaraid_sas_kill_hba(instance); in megasas_get_target_prop()
6717 dev_info(&instance->pdev->dev, in megasas_get_target_prop()
6725 megasas_return_cmd(instance, cmd); in megasas_get_target_prop()
6728 dev_err(&instance->pdev->dev, in megasas_get_target_prop()
6737 * @instance: Adapter soft state
6739 static int megasas_start_aen(struct megasas_instance *instance) in megasas_start_aen() argument
6749 if (megasas_get_seq_num(instance, &eli)) in megasas_start_aen()
6759 return megasas_register_aen(instance, in megasas_start_aen()
6766 * @instance: Adapter soft state
6768 static int megasas_io_attach(struct megasas_instance *instance) in megasas_io_attach() argument
6770 struct Scsi_Host *host = instance->host; in megasas_io_attach()
6775 host->unique_id = instance->unique_id; in megasas_io_attach()
6776 host->can_queue = instance->max_scsi_cmds; in megasas_io_attach()
6777 host->this_id = instance->init_id; in megasas_io_attach()
6778 host->sg_tablesize = instance->max_num_sge; in megasas_io_attach()
6780 if (instance->fw_support_ieee) in megasas_io_attach()
6781 instance->max_sectors_per_req = MEGASAS_MAX_SECTORS_IEEE; in megasas_io_attach()
6786 if (max_sectors && max_sectors < instance->max_sectors_per_req) in megasas_io_attach()
6787 instance->max_sectors_per_req = max_sectors; in megasas_io_attach()
6790 if (((instance->pdev->device == in megasas_io_attach()
6792 (instance->pdev->device == in megasas_io_attach()
6795 instance->max_sectors_per_req = max_sectors; in megasas_io_attach()
6797 dev_info(&instance->pdev->dev, "max_sectors should be > 0" in megasas_io_attach()
6799 instance->max_sectors_per_req); in megasas_io_attach()
6804 host->max_sectors = instance->max_sectors_per_req; in megasas_io_attach()
6814 if (scsi_add_host(host, &instance->pdev->dev)) { in megasas_io_attach()
6815 dev_err(&instance->pdev->dev, in megasas_io_attach()
6827 * @instance: Adapter soft state
6842 megasas_set_dma_mask(struct megasas_instance *instance) in megasas_set_dma_mask() argument
6848 pdev = instance->pdev; in megasas_set_dma_mask()
6849 consistent_mask = (instance->adapter_type >= VENTURA_SERIES) ? in megasas_set_dma_mask()
6865 (instance, &instance->reg_set->outbound_scratch_pad_1); in megasas_set_dma_mask()
6877 instance->consistent_mask_64bit = false; in megasas_set_dma_mask()
6879 instance->consistent_mask_64bit = true; in megasas_set_dma_mask()
6883 (instance->consistent_mask_64bit ? "63" : "32")); in megasas_set_dma_mask()
6904 * @instance: Adapter soft state
6907 static inline void megasas_set_adapter_type(struct megasas_instance *instance) in megasas_set_adapter_type() argument
6909 if ((instance->pdev->vendor == PCI_VENDOR_ID_DELL) && in megasas_set_adapter_type()
6910 (instance->pdev->device == PCI_DEVICE_ID_DELL_PERC5)) { in megasas_set_adapter_type()
6911 instance->adapter_type = MFI_SERIES; in megasas_set_adapter_type()
6913 switch (instance->pdev->device) { in megasas_set_adapter_type()
6918 instance->adapter_type = AERO_SERIES; in megasas_set_adapter_type()
6926 instance->adapter_type = VENTURA_SERIES; in megasas_set_adapter_type()
6930 instance->adapter_type = THUNDERBOLT_SERIES; in megasas_set_adapter_type()
6938 instance->adapter_type = INVADER_SERIES; in megasas_set_adapter_type()
6941 instance->adapter_type = MFI_SERIES; in megasas_set_adapter_type()
6947 static inline int megasas_alloc_mfi_ctrl_mem(struct megasas_instance *instance) in megasas_alloc_mfi_ctrl_mem() argument
6949 instance->producer = dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_mfi_ctrl_mem()
6950 sizeof(u32), &instance->producer_h, GFP_KERNEL); in megasas_alloc_mfi_ctrl_mem()
6951 instance->consumer = dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_mfi_ctrl_mem()
6952 sizeof(u32), &instance->consumer_h, GFP_KERNEL); in megasas_alloc_mfi_ctrl_mem()
6954 if (!instance->producer || !instance->consumer) { in megasas_alloc_mfi_ctrl_mem()
6955 dev_err(&instance->pdev->dev, in megasas_alloc_mfi_ctrl_mem()
6960 *instance->producer = 0; in megasas_alloc_mfi_ctrl_mem()
6961 *instance->consumer = 0; in megasas_alloc_mfi_ctrl_mem()
6972 * @instance: Adapter soft state
6975 static int megasas_alloc_ctrl_mem(struct megasas_instance *instance) in megasas_alloc_ctrl_mem() argument
6977 instance->reply_map = kcalloc(nr_cpu_ids, sizeof(unsigned int), in megasas_alloc_ctrl_mem()
6979 if (!instance->reply_map) in megasas_alloc_ctrl_mem()
6982 switch (instance->adapter_type) { in megasas_alloc_ctrl_mem()
6984 if (megasas_alloc_mfi_ctrl_mem(instance)) in megasas_alloc_ctrl_mem()
6991 if (megasas_alloc_fusion_context(instance)) in megasas_alloc_ctrl_mem()
6998 kfree(instance->reply_map); in megasas_alloc_ctrl_mem()
6999 instance->reply_map = NULL; in megasas_alloc_ctrl_mem()
7007 * @instance - Adapter soft instance
7010 static inline void megasas_free_ctrl_mem(struct megasas_instance *instance) in megasas_free_ctrl_mem() argument
7012 kfree(instance->reply_map); in megasas_free_ctrl_mem()
7013 if (instance->adapter_type == MFI_SERIES) { in megasas_free_ctrl_mem()
7014 if (instance->producer) in megasas_free_ctrl_mem()
7015 dma_free_coherent(&instance->pdev->dev, sizeof(u32), in megasas_free_ctrl_mem()
7016 instance->producer, in megasas_free_ctrl_mem()
7017 instance->producer_h); in megasas_free_ctrl_mem()
7018 if (instance->consumer) in megasas_free_ctrl_mem()
7019 dma_free_coherent(&instance->pdev->dev, sizeof(u32), in megasas_free_ctrl_mem()
7020 instance->consumer, in megasas_free_ctrl_mem()
7021 instance->consumer_h); in megasas_free_ctrl_mem()
7023 megasas_free_fusion_context(instance); in megasas_free_ctrl_mem()
7031 * @instance: Adapter soft instance
7036 int megasas_alloc_ctrl_dma_buffers(struct megasas_instance *instance) in megasas_alloc_ctrl_dma_buffers() argument
7038 struct pci_dev *pdev = instance->pdev; in megasas_alloc_ctrl_dma_buffers()
7039 struct fusion_context *fusion = instance->ctrl_context; in megasas_alloc_ctrl_dma_buffers()
7041 instance->evt_detail = dma_alloc_coherent(&pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7043 &instance->evt_detail_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7045 if (!instance->evt_detail) { in megasas_alloc_ctrl_dma_buffers()
7046 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7064 instance->snapdump_prop = dma_alloc_coherent(&pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7066 &instance->snapdump_prop_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7068 if (!instance->snapdump_prop) in megasas_alloc_ctrl_dma_buffers()
7072 instance->host_device_list_buf = dma_alloc_coherent(&pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7074 &instance->host_device_list_buf_h, in megasas_alloc_ctrl_dma_buffers()
7077 if (!instance->host_device_list_buf) { in megasas_alloc_ctrl_dma_buffers()
7085 instance->pd_list_buf = in megasas_alloc_ctrl_dma_buffers()
7088 &instance->pd_list_buf_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7090 if (!instance->pd_list_buf) { in megasas_alloc_ctrl_dma_buffers()
7095 instance->ctrl_info_buf = in megasas_alloc_ctrl_dma_buffers()
7098 &instance->ctrl_info_buf_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7100 if (!instance->ctrl_info_buf) { in megasas_alloc_ctrl_dma_buffers()
7106 instance->ld_list_buf = in megasas_alloc_ctrl_dma_buffers()
7109 &instance->ld_list_buf_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7111 if (!instance->ld_list_buf) { in megasas_alloc_ctrl_dma_buffers()
7116 instance->ld_targetid_list_buf = in megasas_alloc_ctrl_dma_buffers()
7119 &instance->ld_targetid_list_buf_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7121 if (!instance->ld_targetid_list_buf) { in megasas_alloc_ctrl_dma_buffers()
7128 instance->system_info_buf = in megasas_alloc_ctrl_dma_buffers()
7131 &instance->system_info_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7132 instance->pd_info = in megasas_alloc_ctrl_dma_buffers()
7135 &instance->pd_info_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7136 instance->tgt_prop = in megasas_alloc_ctrl_dma_buffers()
7139 &instance->tgt_prop_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7140 instance->crash_dump_buf = in megasas_alloc_ctrl_dma_buffers()
7142 &instance->crash_dump_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7144 if (!instance->system_info_buf) in megasas_alloc_ctrl_dma_buffers()
7145 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7148 if (!instance->pd_info) in megasas_alloc_ctrl_dma_buffers()
7149 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7152 if (!instance->tgt_prop) in megasas_alloc_ctrl_dma_buffers()
7153 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7156 if (!instance->crash_dump_buf) in megasas_alloc_ctrl_dma_buffers()
7157 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7168 * @instance- Adapter soft instance
7172 void megasas_free_ctrl_dma_buffers(struct megasas_instance *instance) in megasas_free_ctrl_dma_buffers() argument
7174 struct pci_dev *pdev = instance->pdev; in megasas_free_ctrl_dma_buffers()
7175 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_ctrl_dma_buffers()
7177 if (instance->evt_detail) in megasas_free_ctrl_dma_buffers()
7179 instance->evt_detail, in megasas_free_ctrl_dma_buffers()
7180 instance->evt_detail_h); in megasas_free_ctrl_dma_buffers()
7188 if (instance->pd_list_buf) in megasas_free_ctrl_dma_buffers()
7191 instance->pd_list_buf, in megasas_free_ctrl_dma_buffers()
7192 instance->pd_list_buf_h); in megasas_free_ctrl_dma_buffers()
7194 if (instance->ld_list_buf) in megasas_free_ctrl_dma_buffers()
7196 instance->ld_list_buf, in megasas_free_ctrl_dma_buffers()
7197 instance->ld_list_buf_h); in megasas_free_ctrl_dma_buffers()
7199 if (instance->ld_targetid_list_buf) in megasas_free_ctrl_dma_buffers()
7201 instance->ld_targetid_list_buf, in megasas_free_ctrl_dma_buffers()
7202 instance->ld_targetid_list_buf_h); in megasas_free_ctrl_dma_buffers()
7204 if (instance->ctrl_info_buf) in megasas_free_ctrl_dma_buffers()
7206 instance->ctrl_info_buf, in megasas_free_ctrl_dma_buffers()
7207 instance->ctrl_info_buf_h); in megasas_free_ctrl_dma_buffers()
7209 if (instance->system_info_buf) in megasas_free_ctrl_dma_buffers()
7211 instance->system_info_buf, in megasas_free_ctrl_dma_buffers()
7212 instance->system_info_h); in megasas_free_ctrl_dma_buffers()
7214 if (instance->pd_info) in megasas_free_ctrl_dma_buffers()
7216 instance->pd_info, instance->pd_info_h); in megasas_free_ctrl_dma_buffers()
7218 if (instance->tgt_prop) in megasas_free_ctrl_dma_buffers()
7220 instance->tgt_prop, instance->tgt_prop_h); in megasas_free_ctrl_dma_buffers()
7222 if (instance->crash_dump_buf) in megasas_free_ctrl_dma_buffers()
7224 instance->crash_dump_buf, in megasas_free_ctrl_dma_buffers()
7225 instance->crash_dump_h); in megasas_free_ctrl_dma_buffers()
7227 if (instance->snapdump_prop) in megasas_free_ctrl_dma_buffers()
7230 instance->snapdump_prop, in megasas_free_ctrl_dma_buffers()
7231 instance->snapdump_prop_h); in megasas_free_ctrl_dma_buffers()
7233 if (instance->host_device_list_buf) in megasas_free_ctrl_dma_buffers()
7236 instance->host_device_list_buf, in megasas_free_ctrl_dma_buffers()
7237 instance->host_device_list_buf_h); in megasas_free_ctrl_dma_buffers()
7242 * megasas_init_ctrl_params - Initialize controller's instance
7244 * @instance - Adapter soft instance
7247 static inline void megasas_init_ctrl_params(struct megasas_instance *instance) in megasas_init_ctrl_params() argument
7249 instance->fw_crash_state = UNAVAILABLE; in megasas_init_ctrl_params()
7252 instance->issuepend_done = 1; in megasas_init_ctrl_params()
7253 atomic_set(&instance->adprecovery, MEGASAS_HBA_OPERATIONAL); in megasas_init_ctrl_params()
7258 INIT_LIST_HEAD(&instance->cmd_pool); in megasas_init_ctrl_params()
7259 INIT_LIST_HEAD(&instance->internal_reset_pending_q); in megasas_init_ctrl_params()
7261 atomic_set(&instance->fw_outstanding, 0); in megasas_init_ctrl_params()
7262 atomic64_set(&instance->total_io_count, 0); in megasas_init_ctrl_params()
7264 init_waitqueue_head(&instance->int_cmd_wait_q); in megasas_init_ctrl_params()
7265 init_waitqueue_head(&instance->abort_cmd_wait_q); in megasas_init_ctrl_params()
7267 spin_lock_init(&instance->crashdump_lock); in megasas_init_ctrl_params()
7268 spin_lock_init(&instance->mfi_pool_lock); in megasas_init_ctrl_params()
7269 spin_lock_init(&instance->hba_lock); in megasas_init_ctrl_params()
7270 spin_lock_init(&instance->stream_lock); in megasas_init_ctrl_params()
7271 spin_lock_init(&instance->completion_lock); in megasas_init_ctrl_params()
7273 mutex_init(&instance->reset_mutex); in megasas_init_ctrl_params()
7275 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) || in megasas_init_ctrl_params()
7276 (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY)) in megasas_init_ctrl_params()
7277 instance->flag_ieee = 1; in megasas_init_ctrl_params()
7280 instance->flag = 0; in megasas_init_ctrl_params()
7281 instance->unload = 1; in megasas_init_ctrl_params()
7282 instance->last_time = 0; in megasas_init_ctrl_params()
7283 instance->disableOnlineCtrlReset = 1; in megasas_init_ctrl_params()
7284 instance->UnevenSpanSupport = 0; in megasas_init_ctrl_params()
7285 instance->smp_affinity_enable = smp_affinity_enable ? true : false; in megasas_init_ctrl_params()
7286 instance->msix_load_balance = false; in megasas_init_ctrl_params()
7288 if (instance->adapter_type != MFI_SERIES) in megasas_init_ctrl_params()
7289 INIT_WORK(&instance->work_init, megasas_fusion_ocr_wq); in megasas_init_ctrl_params()
7291 INIT_WORK(&instance->work_init, process_fw_state_change_wq); in megasas_init_ctrl_params()
7304 struct megasas_instance *instance; in megasas_probe_one() local
7355 instance = (struct megasas_instance *)host->hostdata; in megasas_probe_one()
7356 memset(instance, 0, sizeof(*instance)); in megasas_probe_one()
7357 atomic_set(&instance->fw_reset_no_pci_access, 0); in megasas_probe_one()
7362 instance->pdev = pdev; in megasas_probe_one()
7363 instance->host = host; in megasas_probe_one()
7364 instance->unique_id = pdev->bus->number << 8 | pdev->devfn; in megasas_probe_one()
7365 instance->init_id = MEGASAS_DEFAULT_INIT_ID; in megasas_probe_one()
7367 megasas_set_adapter_type(instance); in megasas_probe_one()
7372 if (megasas_init_fw(instance)) in megasas_probe_one()
7375 if (instance->requestorId) { in megasas_probe_one()
7376 if (instance->PlasmaFW111) { in megasas_probe_one()
7377 instance->vf_affiliation_111 = in megasas_probe_one()
7380 &instance->vf_affiliation_111_h, in megasas_probe_one()
7382 if (!instance->vf_affiliation_111) in megasas_probe_one()
7386 instance->vf_affiliation = in megasas_probe_one()
7390 &instance->vf_affiliation_h, in megasas_probe_one()
7392 if (!instance->vf_affiliation) in megasas_probe_one()
7399 * Store instance in PCI softstate in megasas_probe_one()
7401 pci_set_drvdata(pdev, instance); in megasas_probe_one()
7408 megasas_mgmt_info.instance[megasas_mgmt_info.max_index] = instance; in megasas_probe_one()
7414 if (megasas_io_attach(instance)) in megasas_probe_one()
7417 instance->unload = 0; in megasas_probe_one()
7421 if (!instance->enable_fw_dev_list || in megasas_probe_one()
7422 (instance->host_device_list_buf->count > 0)) in megasas_probe_one()
7428 if (megasas_start_aen(instance)) { in megasas_probe_one()
7433 megasas_setup_debugfs(instance); in megasas_probe_one()
7436 if (instance->requestorId) in megasas_probe_one()
7437 megasas_get_ld_vf_affiliation(instance, 1); in megasas_probe_one()
7445 megasas_mgmt_info.instance[megasas_mgmt_info.max_index] = NULL; in megasas_probe_one()
7447 instance->instancet->disable_intr(instance); in megasas_probe_one()
7448 megasas_destroy_irqs(instance); in megasas_probe_one()
7450 if (instance->adapter_type != MFI_SERIES) in megasas_probe_one()
7451 megasas_release_fusion(instance); in megasas_probe_one()
7453 megasas_release_mfi(instance); in megasas_probe_one()
7454 if (instance->msix_vectors) in megasas_probe_one()
7455 pci_free_irq_vectors(instance->pdev); in megasas_probe_one()
7466 * @instance: Adapter soft state
7468 static void megasas_flush_cache(struct megasas_instance *instance) in megasas_flush_cache() argument
7473 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) in megasas_flush_cache()
7476 cmd = megasas_get_cmd(instance); in megasas_flush_cache()
7495 if (megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS) in megasas_flush_cache()
7497 dev_err(&instance->pdev->dev, in megasas_flush_cache()
7502 megasas_return_cmd(instance, cmd); in megasas_flush_cache()
7507 * @instance: Adapter soft state
7510 static void megasas_shutdown_controller(struct megasas_instance *instance, in megasas_shutdown_controller() argument
7516 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) in megasas_shutdown_controller()
7519 cmd = megasas_get_cmd(instance); in megasas_shutdown_controller()
7524 if (instance->aen_cmd) in megasas_shutdown_controller()
7525 megasas_issue_blocked_abort_cmd(instance, in megasas_shutdown_controller()
7526 instance->aen_cmd, MFI_IO_TIMEOUT_SECS); in megasas_shutdown_controller()
7527 if (instance->map_update_cmd) in megasas_shutdown_controller()
7528 megasas_issue_blocked_abort_cmd(instance, in megasas_shutdown_controller()
7529 instance->map_update_cmd, MFI_IO_TIMEOUT_SECS); in megasas_shutdown_controller()
7530 if (instance->jbod_seq_cmd) in megasas_shutdown_controller()
7531 megasas_issue_blocked_abort_cmd(instance, in megasas_shutdown_controller()
7532 instance->jbod_seq_cmd, MFI_IO_TIMEOUT_SECS); in megasas_shutdown_controller()
7547 if (megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS) in megasas_shutdown_controller()
7549 dev_err(&instance->pdev->dev, in megasas_shutdown_controller()
7554 megasas_return_cmd(instance, cmd); in megasas_shutdown_controller()
7566 struct megasas_instance *instance; in megasas_suspend() local
7568 instance = pci_get_drvdata(pdev); in megasas_suspend()
7570 if (!instance) in megasas_suspend()
7573 instance->unload = 1; in megasas_suspend()
7578 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_suspend()
7579 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_suspend()
7582 if (instance->adapter_type != MFI_SERIES) in megasas_suspend()
7583 megasas_fusion_stop_watchdog(instance); in megasas_suspend()
7585 megasas_flush_cache(instance); in megasas_suspend()
7586 megasas_shutdown_controller(instance, MR_DCMD_HIBERNATE_SHUTDOWN); in megasas_suspend()
7589 if (instance->ev != NULL) { in megasas_suspend()
7590 struct megasas_aen_event *ev = instance->ev; in megasas_suspend()
7592 instance->ev = NULL; in megasas_suspend()
7595 tasklet_kill(&instance->isr_tasklet); in megasas_suspend()
7597 pci_set_drvdata(instance->pdev, instance); in megasas_suspend()
7598 instance->instancet->disable_intr(instance); in megasas_suspend()
7600 megasas_destroy_irqs(instance); in megasas_suspend()
7602 if (instance->msix_vectors) in megasas_suspend()
7603 pci_free_irq_vectors(instance->pdev); in megasas_suspend()
7622 struct megasas_instance *instance; in megasas_resume() local
7625 instance = pci_get_drvdata(pdev); in megasas_resume()
7627 if (!instance) in megasas_resume()
7630 host = instance->host; in megasas_resume()
7652 if (megasas_transition_to_ready(instance, 0)) { in megasas_resume()
7653 dev_info(&instance->pdev->dev, in megasas_resume()
7656 if (instance->adapter_type != MFI_SERIES) { in megasas_resume()
7658 instance->instancet->read_fw_status_reg(instance); in megasas_resume()
7661 (instance, true, 0)) == FAILED)) in megasas_resume()
7664 atomic_set(&instance->fw_reset_no_pci_access, 1); in megasas_resume()
7665 instance->instancet->adp_reset in megasas_resume()
7666 (instance, instance->reg_set); in megasas_resume()
7667 atomic_set(&instance->fw_reset_no_pci_access, 0); in megasas_resume()
7672 if (megasas_transition_to_ready(instance, 0)) in megasas_resume()
7676 dev_info(&instance->pdev->dev, in megasas_resume()
7680 if (megasas_set_dma_mask(instance)) in megasas_resume()
7687 atomic_set(&instance->fw_outstanding, 0); in megasas_resume()
7688 atomic_set(&instance->ldio_outstanding, 0); in megasas_resume()
7691 if (instance->msix_vectors) in megasas_resume()
7692 megasas_alloc_irq_vectors(instance); in megasas_resume()
7694 if (!instance->msix_vectors) { in megasas_resume()
7695 rval = pci_alloc_irq_vectors(instance->pdev, 1, 1, in megasas_resume()
7701 megasas_setup_reply_map(instance); in megasas_resume()
7703 if (instance->adapter_type != MFI_SERIES) { in megasas_resume()
7704 megasas_reset_reply_desc(instance); in megasas_resume()
7705 if (megasas_ioc_init_fusion(instance)) { in megasas_resume()
7706 megasas_free_cmds(instance); in megasas_resume()
7707 megasas_free_cmds_fusion(instance); in megasas_resume()
7710 if (!megasas_get_map_info(instance)) in megasas_resume()
7711 megasas_sync_map_info(instance); in megasas_resume()
7713 *instance->producer = 0; in megasas_resume()
7714 *instance->consumer = 0; in megasas_resume()
7715 if (megasas_issue_init_mfi(instance)) in megasas_resume()
7719 if (megasas_get_ctrl_info(instance) != DCMD_SUCCESS) in megasas_resume()
7722 tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet, in megasas_resume()
7723 (unsigned long)instance); in megasas_resume()
7725 if (instance->msix_vectors ? in megasas_resume()
7726 megasas_setup_irqs_msix(instance, 0) : in megasas_resume()
7727 megasas_setup_irqs_ioapic(instance)) in megasas_resume()
7730 if (instance->adapter_type != MFI_SERIES) in megasas_resume()
7731 megasas_setup_irq_poll(instance); in megasas_resume()
7734 if (instance->requestorId) { in megasas_resume()
7735 if (!megasas_sriov_start_heartbeat(instance, 0)) in megasas_resume()
7736 megasas_start_timer(instance); in megasas_resume()
7738 instance->skip_heartbeat_timer_del = 1; in megasas_resume()
7743 instance->instancet->enable_intr(instance); in megasas_resume()
7744 megasas_setup_jbod_map(instance); in megasas_resume()
7745 instance->unload = 0; in megasas_resume()
7750 if (megasas_start_aen(instance)) in megasas_resume()
7751 dev_err(&instance->pdev->dev, "Start AEN failed\n"); in megasas_resume()
7754 if (instance->adapter_type != MFI_SERIES) in megasas_resume()
7755 if (megasas_fusion_start_watchdog(instance) != SUCCESS) in megasas_resume()
7761 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_resume()
7762 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_resume()
7764 megasas_free_ctrl_dma_buffers(instance); in megasas_resume()
7765 megasas_free_ctrl_mem(instance); in megasas_resume()
7782 megasas_wait_for_adapter_operational(struct megasas_instance *instance) in megasas_wait_for_adapter_operational() argument
7789 adp_state = atomic_read(&instance->adprecovery); in megasas_wait_for_adapter_operational()
7795 dev_notice(&instance->pdev->dev, "waiting for controller reset to finish\n"); in megasas_wait_for_adapter_operational()
7801 dev_info(&instance->pdev->dev, in megasas_wait_for_adapter_operational()
7818 struct megasas_instance *instance; in megasas_detach_one() local
7822 instance = pci_get_drvdata(pdev); in megasas_detach_one()
7824 if (!instance) in megasas_detach_one()
7827 host = instance->host; in megasas_detach_one()
7828 fusion = instance->ctrl_context; in megasas_detach_one()
7831 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_detach_one()
7832 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_detach_one()
7835 if (instance->adapter_type != MFI_SERIES) in megasas_detach_one()
7836 megasas_fusion_stop_watchdog(instance); in megasas_detach_one()
7838 if (instance->fw_crash_state != UNAVAILABLE) in megasas_detach_one()
7839 megasas_free_host_crash_buffer(instance); in megasas_detach_one()
7840 scsi_remove_host(instance->host); in megasas_detach_one()
7841 instance->unload = 1; in megasas_detach_one()
7843 if (megasas_wait_for_adapter_operational(instance)) in megasas_detach_one()
7846 megasas_flush_cache(instance); in megasas_detach_one()
7847 megasas_shutdown_controller(instance, MR_DCMD_CTRL_SHUTDOWN); in megasas_detach_one()
7851 if (instance->ev != NULL) { in megasas_detach_one()
7852 struct megasas_aen_event *ev = instance->ev; in megasas_detach_one()
7854 instance->ev = NULL; in megasas_detach_one()
7858 wake_up_all(&instance->int_cmd_wait_q); in megasas_detach_one()
7860 tasklet_kill(&instance->isr_tasklet); in megasas_detach_one()
7863 * Take the instance off the instance array. Note that we will not in megasas_detach_one()
7867 if (megasas_mgmt_info.instance[i] == instance) { in megasas_detach_one()
7869 megasas_mgmt_info.instance[i] = NULL; in megasas_detach_one()
7875 instance->instancet->disable_intr(instance); in megasas_detach_one()
7877 megasas_destroy_irqs(instance); in megasas_detach_one()
7879 if (instance->msix_vectors) in megasas_detach_one()
7880 pci_free_irq_vectors(instance->pdev); in megasas_detach_one()
7882 if (instance->adapter_type >= VENTURA_SERIES) { in megasas_detach_one()
7890 if (instance->adapter_type != MFI_SERIES) { in megasas_detach_one()
7891 megasas_release_fusion(instance); in megasas_detach_one()
7897 dma_free_coherent(&instance->pdev->dev, in megasas_detach_one()
7910 dma_free_coherent(&instance->pdev->dev, in megasas_detach_one()
7916 megasas_release_mfi(instance); in megasas_detach_one()
7919 if (instance->vf_affiliation) in megasas_detach_one()
7922 instance->vf_affiliation, in megasas_detach_one()
7923 instance->vf_affiliation_h); in megasas_detach_one()
7925 if (instance->vf_affiliation_111) in megasas_detach_one()
7928 instance->vf_affiliation_111, in megasas_detach_one()
7929 instance->vf_affiliation_111_h); in megasas_detach_one()
7931 if (instance->hb_host_mem) in megasas_detach_one()
7933 instance->hb_host_mem, in megasas_detach_one()
7934 instance->hb_host_mem_h); in megasas_detach_one()
7936 megasas_free_ctrl_dma_buffers(instance); in megasas_detach_one()
7938 megasas_free_ctrl_mem(instance); in megasas_detach_one()
7940 megasas_destroy_debugfs(instance); in megasas_detach_one()
7953 struct megasas_instance *instance = pci_get_drvdata(pdev); in megasas_shutdown() local
7955 if (!instance) in megasas_shutdown()
7958 instance->unload = 1; in megasas_shutdown()
7960 if (megasas_wait_for_adapter_operational(instance)) in megasas_shutdown()
7963 megasas_flush_cache(instance); in megasas_shutdown()
7964 megasas_shutdown_controller(instance, MR_DCMD_CTRL_SHUTDOWN); in megasas_shutdown()
7967 instance->instancet->disable_intr(instance); in megasas_shutdown()
7968 megasas_destroy_irqs(instance); in megasas_shutdown()
7970 if (instance->msix_vectors) in megasas_shutdown()
7971 pci_free_irq_vectors(instance->pdev); in megasas_shutdown()
8056 local_instance = megasas_mgmt_info.instance[i]; in megasas_set_crash_dump_params_ioctl()
8081 * @instance: Adapter soft state
8086 megasas_mgmt_fw_ioctl(struct megasas_instance *instance, in megasas_mgmt_fw_ioctl() argument
8105 dev_printk(KERN_DEBUG, &instance->pdev->dev, "SGE count [%d] > max limit [%d]\n", in megasas_mgmt_fw_ioctl()
8112 !instance->support_nvme_passthru) || in megasas_mgmt_fw_ioctl()
8114 !instance->support_pci_lane_margining)) { in megasas_mgmt_fw_ioctl()
8115 dev_err(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8121 cmd = megasas_get_cmd(instance); in megasas_mgmt_fw_ioctl()
8123 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to get a cmd packet\n"); in megasas_mgmt_fw_ioctl()
8139 if (instance->consistent_mask_64bit) in megasas_mgmt_fw_ioctl()
8150 mutex_lock(&instance->reset_mutex); in megasas_mgmt_fw_ioctl()
8151 if (megasas_get_ctrl_info(instance) != DCMD_SUCCESS) { in megasas_mgmt_fw_ioctl()
8152 megasas_return_cmd(instance, cmd); in megasas_mgmt_fw_ioctl()
8153 mutex_unlock(&instance->reset_mutex); in megasas_mgmt_fw_ioctl()
8156 mutex_unlock(&instance->reset_mutex); in megasas_mgmt_fw_ioctl()
8161 megasas_return_cmd(instance, cmd); in megasas_mgmt_fw_ioctl()
8173 if (instance->consistent_mask_64bit) in megasas_mgmt_fw_ioctl()
8187 kbuff_arr[i] = dma_alloc_coherent(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8191 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to alloc " in megasas_mgmt_fw_ioctl()
8201 if (instance->consistent_mask_64bit) { in megasas_mgmt_fw_ioctl()
8221 sense = dma_alloc_coherent(&instance->pdev->dev, ioc->sense_len, in megasas_mgmt_fw_ioctl()
8230 if (instance->consistent_mask_64bit) in megasas_mgmt_fw_ioctl()
8242 ret = megasas_issue_blocked_cmd(instance, cmd, 0); in megasas_mgmt_fw_ioctl()
8247 dev_err(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8257 if (instance->unload == 1) { in megasas_mgmt_fw_ioctl()
8258 dev_info(&instance->pdev->dev, "Driver unload is in progress " in megasas_mgmt_fw_ioctl()
8287 dev_err(&instance->pdev->dev, "Failed to copy out to user " in megasas_mgmt_fw_ioctl()
8299 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Error copying out cmd_status\n"); in megasas_mgmt_fw_ioctl()
8305 dma_free_coherent(&instance->pdev->dev, ioc->sense_len, in megasas_mgmt_fw_ioctl()
8311 if (instance->consistent_mask_64bit) in megasas_mgmt_fw_ioctl()
8312 dma_free_coherent(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8317 dma_free_coherent(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8325 megasas_return_cmd(instance, cmd); in megasas_mgmt_fw_ioctl()
8334 struct megasas_instance *instance; in megasas_mgmt_ioctl_fw() local
8341 instance = megasas_lookup_instance(ioc->host_no); in megasas_mgmt_ioctl_fw()
8342 if (!instance) { in megasas_mgmt_ioctl_fw()
8348 if (instance->requestorId && !allow_vf_ioctls) { in megasas_mgmt_ioctl_fw()
8353 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_mgmt_ioctl_fw()
8354 dev_err(&instance->pdev->dev, "Controller in crit error\n"); in megasas_mgmt_ioctl_fw()
8359 if (instance->unload == 1) { in megasas_mgmt_ioctl_fw()
8364 if (down_interruptible(&instance->ioctl_sem)) { in megasas_mgmt_ioctl_fw()
8369 if (megasas_wait_for_adapter_operational(instance)) { in megasas_mgmt_ioctl_fw()
8374 error = megasas_mgmt_fw_ioctl(instance, user_ioc, ioc); in megasas_mgmt_ioctl_fw()
8376 up(&instance->ioctl_sem); in megasas_mgmt_ioctl_fw()
8385 struct megasas_instance *instance; in megasas_mgmt_ioctl_aen() local
8398 instance = megasas_lookup_instance(aen.host_no); in megasas_mgmt_ioctl_aen()
8400 if (!instance) in megasas_mgmt_ioctl_aen()
8403 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_mgmt_ioctl_aen()
8407 if (instance->unload == 1) { in megasas_mgmt_ioctl_aen()
8411 if (megasas_wait_for_adapter_operational(instance)) in megasas_mgmt_ioctl_aen()
8414 mutex_lock(&instance->reset_mutex); in megasas_mgmt_ioctl_aen()
8415 error = megasas_register_aen(instance, aen.seq_num, in megasas_mgmt_ioctl_aen()
8417 mutex_unlock(&instance->reset_mutex); in megasas_mgmt_ioctl_aen()
8624 * @instance: Adapter soft state
8634 int megasas_update_device_list(struct megasas_instance *instance, in megasas_update_device_list() argument
8639 if (instance->enable_fw_dev_list) { in megasas_update_device_list()
8640 dcmd_ret = megasas_host_device_list_query(instance, false); in megasas_update_device_list()
8645 dcmd_ret = megasas_get_pd_list(instance); in megasas_update_device_list()
8652 if (!instance->requestorId || in megasas_update_device_list()
8653 (instance->requestorId && in megasas_update_device_list()
8654 megasas_get_ld_vf_affiliation(instance, 0))) { in megasas_update_device_list()
8655 dcmd_ret = megasas_ld_list_query(instance, in megasas_update_device_list()
8670 * @instance: Adapter soft state
8675 void megasas_add_remove_devices(struct megasas_instance *instance, in megasas_add_remove_devices() argument
8687 host = instance->host; in megasas_add_remove_devices()
8689 if (instance->enable_fw_dev_list) { in megasas_add_remove_devices()
8690 targetid_list = instance->host_device_list_buf; in megasas_add_remove_devices()
8719 if (instance->pd_list[pd_index].driveState == in megasas_add_remove_devices()
8739 if (instance->ld_ids[ld_index] != 0xff) { in megasas_add_remove_devices()
8759 struct megasas_instance *instance = ev->instance; in megasas_aen_polling() local
8766 if (!instance) { in megasas_aen_polling()
8767 printk(KERN_ERR "invalid instance!\n"); in megasas_aen_polling()
8773 mutex_lock(&instance->reset_mutex); in megasas_aen_polling()
8775 instance->ev = NULL; in megasas_aen_polling()
8776 if (instance->evt_detail) { in megasas_aen_polling()
8777 megasas_decode_evt(instance); in megasas_aen_polling()
8779 switch (le32_to_cpu(instance->evt_detail->code)) { in megasas_aen_polling()
8797 dev_info(&instance->pdev->dev, "scanning for scsi%d...\n", in megasas_aen_polling()
8798 instance->host->host_no); in megasas_aen_polling()
8802 dcmd_ret = megasas_get_ctrl_info(instance); in megasas_aen_polling()
8804 instance->snapdump_wait_time) { in megasas_aen_polling()
8805 megasas_get_snapdump_properties(instance); in megasas_aen_polling()
8806 dev_info(&instance->pdev->dev, in megasas_aen_polling()
8808 instance->snapdump_wait_time); in megasas_aen_polling()
8816 dev_err(&instance->pdev->dev, "invalid evt_detail!\n"); in megasas_aen_polling()
8817 mutex_unlock(&instance->reset_mutex); in megasas_aen_polling()
8823 dcmd_ret = megasas_update_device_list(instance, event_type); in megasas_aen_polling()
8825 mutex_unlock(&instance->reset_mutex); in megasas_aen_polling()
8828 megasas_add_remove_devices(instance, event_type); in megasas_aen_polling()
8831 seq_num = le32_to_cpu(instance->evt_detail->seq_num) + 1; in megasas_aen_polling()
8833 seq_num = instance->last_seq_num; in megasas_aen_polling()
8840 if (instance->aen_cmd != NULL) { in megasas_aen_polling()
8845 mutex_lock(&instance->reset_mutex); in megasas_aen_polling()
8846 error = megasas_register_aen(instance, seq_num, in megasas_aen_polling()
8849 dev_err(&instance->pdev->dev, in megasas_aen_polling()
8852 mutex_unlock(&instance->reset_mutex); in megasas_aen_polling()