• Home
  • Raw
  • Download

Lines Matching full:instance

135 int megasas_transition_to_ready(struct megasas_instance *instance, int ocr);
136 static int megasas_get_pd_list(struct megasas_instance *instance);
137 static int megasas_ld_list_query(struct megasas_instance *instance,
139 static int megasas_issue_init_mfi(struct megasas_instance *instance);
140 static int megasas_register_aen(struct megasas_instance *instance,
142 static void megasas_get_pd_info(struct megasas_instance *instance,
145 megasas_set_ld_removed_by_fw(struct megasas_instance *instance);
224 megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
227 megasas_read_fw_status_reg_gen2(struct megasas_instance *instance);
229 megasas_adp_reset_gen2(struct megasas_instance *instance,
233 megasas_init_adapter_mfi(struct megasas_instance *instance);
235 megasas_build_and_issue_cmd(struct megasas_instance *instance,
239 wait_and_poll(struct megasas_instance *instance, struct megasas_cmd *cmd,
242 static int megasas_get_ld_vf_affiliation(struct megasas_instance *instance,
245 megasas_set_dma_mask(struct megasas_instance *instance);
247 megasas_alloc_ctrl_mem(struct megasas_instance *instance);
249 megasas_free_ctrl_mem(struct megasas_instance *instance);
251 megasas_alloc_ctrl_dma_buffers(struct megasas_instance *instance);
253 megasas_free_ctrl_dma_buffers(struct megasas_instance *instance);
255 megasas_init_ctrl_params(struct megasas_instance *instance);
257 u32 megasas_readl(struct megasas_instance *instance, in megasas_readl() argument
268 if (instance->adapter_type == AERO_SERIES) { in megasas_readl()
281 * @instance: Adapter soft state
287 void megasas_set_dma_settings(struct megasas_instance *instance, in megasas_set_dma_settings() argument
291 if (instance->consistent_mask_64bit) { in megasas_set_dma_settings()
305 megasas_issue_dcmd(struct megasas_instance *instance, struct megasas_cmd *cmd) in megasas_issue_dcmd() argument
307 instance->instancet->fire_cmd(instance, in megasas_issue_dcmd()
308 cmd->frame_phys_addr, 0, instance->reg_set); in megasas_issue_dcmd()
314 * @instance: Adapter soft state
319 *instance) in megasas_get_cmd()
324 spin_lock_irqsave(&instance->mfi_pool_lock, flags); in megasas_get_cmd()
326 if (!list_empty(&instance->cmd_pool)) { in megasas_get_cmd()
327 cmd = list_entry((&instance->cmd_pool)->next, in megasas_get_cmd()
331 dev_err(&instance->pdev->dev, "Command pool empty!\n"); in megasas_get_cmd()
334 spin_unlock_irqrestore(&instance->mfi_pool_lock, flags); in megasas_get_cmd()
340 * @instance: Adapter soft state
344 megasas_return_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd) in megasas_return_cmd() argument
349 struct fusion_context *fusion = instance->ctrl_context; in megasas_return_cmd()
357 spin_lock_irqsave(&instance->mfi_pool_lock, flags); in megasas_return_cmd()
360 blk_tags = instance->max_scsi_cmds + cmd->index; in megasas_return_cmd()
362 megasas_return_cmd_fusion(instance, cmd_fusion); in megasas_return_cmd()
367 memset(cmd->frame, 0, instance->mfi_frame_size); in megasas_return_cmd()
371 list_add(&cmd->list, (&instance->cmd_pool)->next); in megasas_return_cmd()
373 spin_unlock_irqrestore(&instance->mfi_pool_lock, flags); in megasas_return_cmd()
419 * @instance: Adapter soft state
422 megasas_decode_evt(struct megasas_instance *instance) in megasas_decode_evt() argument
424 struct megasas_evt_detail *evt_detail = instance->evt_detail; in megasas_decode_evt()
435 dev_info(&instance->pdev->dev, "%d (%s/0x%04x/%s) - %s\n", in megasas_decode_evt()
443 dev_info(&instance->pdev->dev, in megasas_decode_evt()
456 * @instance: Adapter soft state
459 megasas_enable_intr_xscale(struct megasas_instance *instance) in megasas_enable_intr_xscale() argument
463 regs = instance->reg_set; in megasas_enable_intr_xscale()
472 * @instance: Adapter soft state
475 megasas_disable_intr_xscale(struct megasas_instance *instance) in megasas_disable_intr_xscale() argument
480 regs = instance->reg_set; in megasas_disable_intr_xscale()
488 * @instance: Adapter soft state
491 megasas_read_fw_status_reg_xscale(struct megasas_instance *instance) in megasas_read_fw_status_reg_xscale() argument
493 return readl(&instance->reg_set->outbound_msg_0); in megasas_read_fw_status_reg_xscale()
497 * @instance: Adapter soft state
500 megasas_clear_intr_xscale(struct megasas_instance *instance) in megasas_clear_intr_xscale() argument
505 regs = instance->reg_set; in megasas_clear_intr_xscale()
531 * @instance: Adapter soft state
537 megasas_fire_cmd_xscale(struct megasas_instance *instance, in megasas_fire_cmd_xscale() argument
544 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_xscale()
547 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_xscale()
552 * @instance: Adapter soft state
556 megasas_adp_reset_xscale(struct megasas_instance *instance, in megasas_adp_reset_xscale() argument
567 pci_read_config_dword(instance->pdev, MFI_1068_PCSR_OFFSET, &pcidata); in megasas_adp_reset_xscale()
568 dev_notice(&instance->pdev->dev, "pcidata = %x\n", pcidata); in megasas_adp_reset_xscale()
570 dev_notice(&instance->pdev->dev, "mfi 1068 offset read=%x\n", pcidata); in megasas_adp_reset_xscale()
572 pci_write_config_dword(instance->pdev, in megasas_adp_reset_xscale()
579 pci_read_config_dword(instance->pdev, in megasas_adp_reset_xscale()
581 dev_notice(&instance->pdev->dev, "1068 offset handshake read=%x\n", pcidata); in megasas_adp_reset_xscale()
583 dev_notice(&instance->pdev->dev, "1068 offset pcidt=%x\n", pcidata); in megasas_adp_reset_xscale()
585 pci_write_config_dword(instance->pdev, in megasas_adp_reset_xscale()
594 * @instance: Adapter soft state
598 megasas_check_reset_xscale(struct megasas_instance *instance, in megasas_check_reset_xscale() argument
601 if ((atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) && in megasas_check_reset_xscale()
602 (le32_to_cpu(*instance->consumer) == in megasas_check_reset_xscale()
636 * @instance: Adapter soft state
639 megasas_enable_intr_ppc(struct megasas_instance *instance) in megasas_enable_intr_ppc() argument
643 regs = instance->reg_set; in megasas_enable_intr_ppc()
654 * @instance: Adapter soft state
657 megasas_disable_intr_ppc(struct megasas_instance *instance) in megasas_disable_intr_ppc() argument
662 regs = instance->reg_set; in megasas_disable_intr_ppc()
670 * @instance: Adapter soft state
673 megasas_read_fw_status_reg_ppc(struct megasas_instance *instance) in megasas_read_fw_status_reg_ppc() argument
675 return readl(&instance->reg_set->outbound_scratch_pad_0); in megasas_read_fw_status_reg_ppc()
680 * @instance: Adapter soft state
683 megasas_clear_intr_ppc(struct megasas_instance *instance) in megasas_clear_intr_ppc() argument
687 regs = instance->reg_set; in megasas_clear_intr_ppc()
713 * @instance: Adapter soft state
719 megasas_fire_cmd_ppc(struct megasas_instance *instance, in megasas_fire_cmd_ppc() argument
726 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_ppc()
729 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_ppc()
734 * @instance: Adapter soft state
738 megasas_check_reset_ppc(struct megasas_instance *instance, in megasas_check_reset_ppc() argument
741 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) in megasas_check_reset_ppc()
765 * @instance: Adapter soft state
768 megasas_enable_intr_skinny(struct megasas_instance *instance) in megasas_enable_intr_skinny() argument
772 regs = instance->reg_set; in megasas_enable_intr_skinny()
783 * @instance: Adapter soft state
786 megasas_disable_intr_skinny(struct megasas_instance *instance) in megasas_disable_intr_skinny() argument
791 regs = instance->reg_set; in megasas_disable_intr_skinny()
799 * @instance: Adapter soft state
802 megasas_read_fw_status_reg_skinny(struct megasas_instance *instance) in megasas_read_fw_status_reg_skinny() argument
804 return readl(&instance->reg_set->outbound_scratch_pad_0); in megasas_read_fw_status_reg_skinny()
809 * @instance: Adapter soft state
812 megasas_clear_intr_skinny(struct megasas_instance *instance) in megasas_clear_intr_skinny() argument
817 regs = instance->reg_set; in megasas_clear_intr_skinny()
831 if ((megasas_read_fw_status_reg_skinny(instance) & MFI_STATE_MASK) == in megasas_clear_intr_skinny()
852 * @instance: Adapter soft state
858 megasas_fire_cmd_skinny(struct megasas_instance *instance, in megasas_fire_cmd_skinny() argument
865 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_skinny()
870 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_skinny()
875 * @instance: Adapter soft state
879 megasas_check_reset_skinny(struct megasas_instance *instance, in megasas_check_reset_skinny() argument
882 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) in megasas_check_reset_skinny()
912 * @instance: Adapter soft state
915 megasas_enable_intr_gen2(struct megasas_instance *instance) in megasas_enable_intr_gen2() argument
919 regs = instance->reg_set; in megasas_enable_intr_gen2()
931 * @instance: Adapter soft state
934 megasas_disable_intr_gen2(struct megasas_instance *instance) in megasas_disable_intr_gen2() argument
939 regs = instance->reg_set; in megasas_disable_intr_gen2()
947 * @instance: Adapter soft state
950 megasas_read_fw_status_reg_gen2(struct megasas_instance *instance) in megasas_read_fw_status_reg_gen2() argument
952 return readl(&instance->reg_set->outbound_scratch_pad_0); in megasas_read_fw_status_reg_gen2()
957 * @instance: Adapter soft state
960 megasas_clear_intr_gen2(struct megasas_instance *instance) in megasas_clear_intr_gen2() argument
965 regs = instance->reg_set; in megasas_clear_intr_gen2()
993 * @instance: Adapter soft state
999 megasas_fire_cmd_gen2(struct megasas_instance *instance, in megasas_fire_cmd_gen2() argument
1006 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_gen2()
1009 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_gen2()
1014 * @instance: Adapter soft state
1018 megasas_adp_reset_gen2(struct megasas_instance *instance, in megasas_adp_reset_gen2() argument
1026 if (instance->instancet == &megasas_instance_template_skinny) { in megasas_adp_reset_gen2()
1045 dev_notice(&instance->pdev->dev, "RESETGEN2: retry=%x, hostdiag=%x\n", in megasas_adp_reset_gen2()
1053 dev_notice(&instance->pdev->dev, "ADP_RESET_GEN2: HostDiag=%x\n", HostDiag); in megasas_adp_reset_gen2()
1063 dev_notice(&instance->pdev->dev, "RESET_GEN2: retry=%x, hostdiag=%x\n", in megasas_adp_reset_gen2()
1075 * @instance: Adapter soft state
1079 megasas_check_reset_gen2(struct megasas_instance *instance, in megasas_check_reset_gen2() argument
1082 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) in megasas_check_reset_gen2()
1116 * @instance: Adapter soft state
1122 megasas_issue_polled(struct megasas_instance *instance, struct megasas_cmd *cmd) in megasas_issue_polled() argument
1129 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_issue_polled()
1130 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_issue_polled()
1135 instance->instancet->issue_dcmd(instance, cmd); in megasas_issue_polled()
1137 return wait_and_poll(instance, cmd, instance->requestorId ? in megasas_issue_polled()
1143 * @instance: Adapter soft state
1152 megasas_issue_blocked_cmd(struct megasas_instance *instance, in megasas_issue_blocked_cmd() argument
1158 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_issue_blocked_cmd()
1159 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_issue_blocked_cmd()
1164 instance->instancet->issue_dcmd(instance, cmd); in megasas_issue_blocked_cmd()
1167 ret = wait_event_timeout(instance->int_cmd_wait_q, in megasas_issue_blocked_cmd()
1170 dev_err(&instance->pdev->dev, in megasas_issue_blocked_cmd()
1176 wait_event(instance->int_cmd_wait_q, in megasas_issue_blocked_cmd()
1184 * @instance: Adapter soft state
1194 megasas_issue_blocked_abort_cmd(struct megasas_instance *instance, in megasas_issue_blocked_abort_cmd() argument
1202 cmd = megasas_get_cmd(instance); in megasas_issue_blocked_abort_cmd()
1224 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_issue_blocked_abort_cmd()
1225 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_issue_blocked_abort_cmd()
1230 instance->instancet->issue_dcmd(instance, cmd); in megasas_issue_blocked_abort_cmd()
1233 ret = wait_event_timeout(instance->abort_cmd_wait_q, in megasas_issue_blocked_abort_cmd()
1237 dev_err(&instance->pdev->dev, in megasas_issue_blocked_abort_cmd()
1243 wait_event(instance->abort_cmd_wait_q, in megasas_issue_blocked_abort_cmd()
1248 megasas_return_cmd(instance, cmd); in megasas_issue_blocked_abort_cmd()
1254 * @instance: Adapter soft state
1262 megasas_make_sgl32(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_make_sgl32() argument
1283 * @instance: Adapter soft state
1291 megasas_make_sgl64(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_make_sgl64() argument
1312 * @instance: Adapter soft state
1320 megasas_make_sgl_skinny(struct megasas_instance *instance, in megasas_make_sgl_skinny() argument
1349 static u32 megasas_get_frame_count(struct megasas_instance *instance, in megasas_get_frame_count() argument
1360 if (instance->flag_ieee) { in megasas_get_frame_count()
1371 if (instance->flag_ieee == 1) { in megasas_get_frame_count()
1378 if (instance->flag_ieee == 1) { in megasas_get_frame_count()
1402 * @instance: Adapter soft state
1410 megasas_build_dcdb(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_build_dcdb() argument
1429 if (instance->flag_ieee == 1) { in megasas_build_dcdb()
1463 if (instance->flag_ieee == 1) { in megasas_build_dcdb()
1465 pthru->sge_count = megasas_make_sgl_skinny(instance, scp, in megasas_build_dcdb()
1469 pthru->sge_count = megasas_make_sgl64(instance, scp, in megasas_build_dcdb()
1472 pthru->sge_count = megasas_make_sgl32(instance, scp, in megasas_build_dcdb()
1475 if (pthru->sge_count > instance->max_num_sge) { in megasas_build_dcdb()
1476 dev_err(&instance->pdev->dev, "DCDB too many SGE NUM=%x\n", in megasas_build_dcdb()
1494 cmd->frame_count = megasas_get_frame_count(instance, pthru->sge_count, in megasas_build_dcdb()
1502 * @instance: Adapter soft state
1509 megasas_build_ldio(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_build_ldio() argument
1525 if (instance->flag_ieee == 1) { in megasas_build_ldio()
1606 if (instance->flag_ieee) { in megasas_build_ldio()
1608 ldio->sge_count = megasas_make_sgl_skinny(instance, scp, in megasas_build_ldio()
1612 ldio->sge_count = megasas_make_sgl64(instance, scp, &ldio->sgl); in megasas_build_ldio()
1614 ldio->sge_count = megasas_make_sgl32(instance, scp, &ldio->sgl); in megasas_build_ldio()
1616 if (ldio->sge_count > instance->max_num_sge) { in megasas_build_ldio()
1617 dev_err(&instance->pdev->dev, "build_ld_io: sge_count = %x\n", in megasas_build_ldio()
1633 cmd->frame_count = megasas_get_frame_count(instance, in megasas_build_ldio()
1671 * @instance: Adapter soft state
1674 megasas_dump_pending_frames(struct megasas_instance *instance) in megasas_dump_pending_frames() argument
1682 u16 max_cmd = instance->max_fw_cmds; in megasas_dump_pending_frames()
1684 …dev_err(&instance->pdev->dev, "[%d]: Dumping Frame Phys Address of all pending cmds in FW\n",insta… in megasas_dump_pending_frames()
1685 …dev_err(&instance->pdev->dev, "[%d]: Total OS Pending cmds : %d\n",instance->host->host_no,atomic_… in megasas_dump_pending_frames()
1687 dev_err(&instance->pdev->dev, "[%d]: 64 bit SGLs were sent to FW\n",instance->host->host_no); in megasas_dump_pending_frames()
1689 dev_err(&instance->pdev->dev, "[%d]: 32 bit SGLs were sent to FW\n",instance->host->host_no); in megasas_dump_pending_frames()
1691 dev_err(&instance->pdev->dev, "[%d]: Pending OS cmds in FW : \n",instance->host->host_no); in megasas_dump_pending_frames()
1693 cmd = instance->cmd_list[i]; in megasas_dump_pending_frames()
1696 …dev_err(&instance->pdev->dev, "[%d]: Frame addr :0x%08lx : ",instance->host->host_no,(unsigned lon… in megasas_dump_pending_frames()
1701 dev_err(&instance->pdev->dev, "[%d]: frame count : 0x%x, Cmd : 0x%x, Tgt id : 0x%x," in megasas_dump_pending_frames()
1703 instance->host->host_no, cmd->frame_count, ldio->cmd, ldio->target_id, in megasas_dump_pending_frames()
1710 dev_err(&instance->pdev->dev, "[%d]: frame count : 0x%x, Cmd : 0x%x, Tgt id : 0x%x, " in megasas_dump_pending_frames()
1712 instance->host->host_no, cmd->frame_count, pthru->cmd, pthru->target_id, in megasas_dump_pending_frames()
1719 dev_err(&instance->pdev->dev, "sgl len : 0x%x, sgl addr : 0x%llx\n", in megasas_dump_pending_frames()
1723 dev_err(&instance->pdev->dev, "sgl len : 0x%x, sgl addr : 0x%x\n", in megasas_dump_pending_frames()
1729 dev_err(&instance->pdev->dev, "[%d]: Pending Internal cmds in FW : \n",instance->host->host_no); in megasas_dump_pending_frames()
1732 cmd = instance->cmd_list[i]; in megasas_dump_pending_frames()
1735 dev_err(&instance->pdev->dev, "0x%08lx : ", (unsigned long)cmd->frame_phys_addr); in megasas_dump_pending_frames()
1737 dev_err(&instance->pdev->dev, "[%d]: Dumping Done\n\n",instance->host->host_no); in megasas_dump_pending_frames()
1741 megasas_build_and_issue_cmd(struct megasas_instance *instance, in megasas_build_and_issue_cmd() argument
1747 cmd = megasas_get_cmd(instance); in megasas_build_and_issue_cmd()
1755 frame_count = megasas_build_ldio(instance, scmd, cmd); in megasas_build_and_issue_cmd()
1757 frame_count = megasas_build_dcdb(instance, scmd, cmd); in megasas_build_and_issue_cmd()
1768 atomic_inc(&instance->fw_outstanding); in megasas_build_and_issue_cmd()
1770 instance->instancet->fire_cmd(instance, cmd->frame_phys_addr, in megasas_build_and_issue_cmd()
1771 cmd->frame_count-1, instance->reg_set); in megasas_build_and_issue_cmd()
1775 megasas_return_cmd(instance, cmd); in megasas_build_and_issue_cmd()
1788 struct megasas_instance *instance; in megasas_queue_command() local
1792 instance = (struct megasas_instance *) in megasas_queue_command()
1795 if (instance->unload == 1) { in megasas_queue_command()
1801 if (instance->issuepend_done == 0) in megasas_queue_command()
1806 if (atomic_read(&instance->adprecovery) == MEGASAS_ADPRESET_SM_INFAULT) { in megasas_queue_command()
1807 if (megasas_check_mpio_paths(instance, scmd) == in megasas_queue_command()
1819 (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR)) { in megasas_queue_command()
1827 if (instance->ld_tgtid_status[ld_tgt_id] == LD_TARGET_ID_DELETED) { in megasas_queue_command()
1834 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) in megasas_queue_command()
1844 (scmd->device->id >= instance->fw_supported_vd_count || in megasas_queue_command()
1852 (!instance->fw_sync_cache_support)) { in megasas_queue_command()
1857 return instance->instancet->build_and_issue_cmd(instance, scmd); in megasas_queue_command()
1870 if ((megasas_mgmt_info.instance[i]) && in megasas_lookup_instance()
1871 (megasas_mgmt_info.instance[i]->host->host_no == host_no)) in megasas_lookup_instance()
1872 return megasas_mgmt_info.instance[i]; in megasas_lookup_instance()
1895 struct megasas_instance *instance; in megasas_set_dynamic_target_properties() local
1902 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_set_dynamic_target_properties()
1903 fusion = instance->ctrl_context; in megasas_set_dynamic_target_properties()
1912 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_set_dynamic_target_properties()
1914 if (ld >= instance->fw_supported_vd_count) in megasas_set_dynamic_target_properties()
1927 } else if (instance->use_seqnum_jbod_fp) { in megasas_set_dynamic_target_properties()
1931 [(instance->pd_seq_map_id - 1) & 1]; in megasas_set_dynamic_target_properties()
1936 if (is_target_prop && instance->tgt_prop->reset_tmo) { in megasas_set_dynamic_target_properties()
1942 min_t(u8, instance->max_reset_tmo, in megasas_set_dynamic_target_properties()
1943 instance->tgt_prop->reset_tmo); in megasas_set_dynamic_target_properties()
1944 mr_device_priv_data->task_abort_tmo = instance->task_abort_tmo; in megasas_set_dynamic_target_properties()
1972 struct megasas_instance *instance; in megasas_set_nvme_device_properties() local
1975 instance = (struct megasas_instance *)sdev->host->hostdata; in megasas_set_nvme_device_properties()
1976 mr_nvme_pg_size = max_t(u32, instance->nvme_page_size, in megasas_set_nvme_device_properties()
1999 struct megasas_instance *instance; in megasas_set_fw_assisted_qd() local
2002 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_set_fw_assisted_qd()
2019 tgt_device_qd = le32_to_cpu(instance->tgt_prop->device_qdepth); in megasas_set_fw_assisted_qd()
2021 device_qd = min(instance->host->can_queue, in megasas_set_fw_assisted_qd()
2025 if (instance->enable_sdev_max_qd && interface_type != UNKNOWN_DRIVE) in megasas_set_fw_assisted_qd()
2026 device_qd = instance->host->can_queue; in megasas_set_fw_assisted_qd()
2047 struct megasas_instance *instance; in megasas_set_static_target_properties() local
2049 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_set_static_target_properties()
2060 max_io_size_kb = le32_to_cpu(instance->tgt_prop->max_io_size_kb); in megasas_set_static_target_properties()
2062 if (instance->nvme_page_size && max_io_size_kb) in megasas_set_static_target_properties()
2072 struct megasas_instance *instance; in megasas_slave_configure() local
2076 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_slave_configure()
2077 if (instance->pd_list_not_supported) { in megasas_slave_configure()
2081 if (instance->pd_list[pd_index].driveState != in megasas_slave_configure()
2087 mutex_lock(&instance->reset_mutex); in megasas_slave_configure()
2089 if ((instance->pd_info) && !MEGASAS_IS_LOGICAL(sdev)) in megasas_slave_configure()
2090 megasas_get_pd_info(instance, sdev); in megasas_slave_configure()
2092 /* Some ventura firmware may not have instance->nvme_page_size set. in megasas_slave_configure()
2095 if ((instance->tgt_prop) && (instance->nvme_page_size)) in megasas_slave_configure()
2096 ret_target_prop = megasas_get_target_prop(instance, sdev); in megasas_slave_configure()
2107 mutex_unlock(&instance->reset_mutex); in megasas_slave_configure()
2115 struct megasas_instance *instance ; in megasas_slave_alloc() local
2118 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_slave_alloc()
2126 if ((instance->pd_list_not_supported || in megasas_slave_alloc()
2127 instance->pd_list[pd_index].driveState == in megasas_slave_alloc()
2145 instance->ld_tgtid_status[ld_tgt_id] = LD_TARGET_ID_ACTIVE; in megasas_slave_alloc()
2153 instance->r1_ldio_hint_default); in megasas_slave_alloc()
2160 struct megasas_instance *instance; in megasas_slave_destroy() local
2162 instance = megasas_lookup_instance(sdev->host->host_no); in megasas_slave_destroy()
2170 instance->ld_tgtid_status[ld_tgt_id] = LD_TARGET_ID_DELETED; in megasas_slave_destroy()
2183 * @instance: Adapter soft state
2186 static void megasas_complete_outstanding_ioctls(struct megasas_instance *instance) in megasas_complete_outstanding_ioctls() argument
2191 struct fusion_context *fusion = instance->ctrl_context; in megasas_complete_outstanding_ioctls()
2195 for (i = 0; i < instance->max_fw_cmds; i++) { in megasas_complete_outstanding_ioctls()
2198 cmd_mfi = instance->cmd_list[cmd_fusion->sync_cmd_idx]; in megasas_complete_outstanding_ioctls()
2203 megasas_complete_cmd(instance, in megasas_complete_outstanding_ioctls()
2209 for (i = 0; i < instance->max_fw_cmds; i++) { in megasas_complete_outstanding_ioctls()
2210 cmd_mfi = instance->cmd_list[i]; in megasas_complete_outstanding_ioctls()
2213 megasas_complete_cmd(instance, cmd_mfi, DID_OK); in megasas_complete_outstanding_ioctls()
2219 void megaraid_sas_kill_hba(struct megasas_instance *instance) in megaraid_sas_kill_hba() argument
2221 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megaraid_sas_kill_hba()
2222 dev_warn(&instance->pdev->dev, in megaraid_sas_kill_hba()
2228 atomic_set(&instance->adprecovery, MEGASAS_HW_CRITICAL_ERROR); in megaraid_sas_kill_hba()
2231 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) || in megaraid_sas_kill_hba()
2232 (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY) || in megaraid_sas_kill_hba()
2233 (instance->adapter_type != MFI_SERIES)) { in megaraid_sas_kill_hba()
2234 if (!instance->requestorId) { in megaraid_sas_kill_hba()
2235 writel(MFI_STOP_ADP, &instance->reg_set->doorbell); in megaraid_sas_kill_hba()
2237 readl(&instance->reg_set->doorbell); in megaraid_sas_kill_hba()
2239 if (instance->requestorId && instance->peerIsPresent) in megaraid_sas_kill_hba()
2240 memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS); in megaraid_sas_kill_hba()
2243 &instance->reg_set->inbound_doorbell); in megaraid_sas_kill_hba()
2246 megasas_complete_outstanding_ioctls(instance); in megaraid_sas_kill_hba()
2252 * @instance: Adapter soft state
2256 megasas_check_and_restore_queue_depth(struct megasas_instance *instance) in megasas_check_and_restore_queue_depth() argument
2260 if (instance->flag & MEGASAS_FW_BUSY in megasas_check_and_restore_queue_depth()
2261 && time_after(jiffies, instance->last_time + 5 * HZ) in megasas_check_and_restore_queue_depth()
2262 && atomic_read(&instance->fw_outstanding) < in megasas_check_and_restore_queue_depth()
2263 instance->throttlequeuedepth + 1) { in megasas_check_and_restore_queue_depth()
2265 spin_lock_irqsave(instance->host->host_lock, flags); in megasas_check_and_restore_queue_depth()
2266 instance->flag &= ~MEGASAS_FW_BUSY; in megasas_check_and_restore_queue_depth()
2268 instance->host->can_queue = instance->cur_can_queue; in megasas_check_and_restore_queue_depth()
2269 spin_unlock_irqrestore(instance->host->host_lock, flags); in megasas_check_and_restore_queue_depth()
2285 struct megasas_instance *instance = in megasas_complete_cmd_dpc() local
2290 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) in megasas_complete_cmd_dpc()
2293 spin_lock_irqsave(&instance->completion_lock, flags); in megasas_complete_cmd_dpc()
2295 producer = le32_to_cpu(*instance->producer); in megasas_complete_cmd_dpc()
2296 consumer = le32_to_cpu(*instance->consumer); in megasas_complete_cmd_dpc()
2299 context = le32_to_cpu(instance->reply_queue[consumer]); in megasas_complete_cmd_dpc()
2300 if (context >= instance->max_fw_cmds) { in megasas_complete_cmd_dpc()
2301 dev_err(&instance->pdev->dev, "Unexpected context value %x\n", in megasas_complete_cmd_dpc()
2306 cmd = instance->cmd_list[context]; in megasas_complete_cmd_dpc()
2308 megasas_complete_cmd(instance, cmd, DID_OK); in megasas_complete_cmd_dpc()
2311 if (consumer == (instance->max_fw_cmds + 1)) { in megasas_complete_cmd_dpc()
2316 *instance->consumer = cpu_to_le32(producer); in megasas_complete_cmd_dpc()
2318 spin_unlock_irqrestore(&instance->completion_lock, flags); in megasas_complete_cmd_dpc()
2323 megasas_check_and_restore_queue_depth(instance); in megasas_complete_cmd_dpc()
2330 * @instance: Adapter soft state
2333 void megasas_start_timer(struct megasas_instance *instance) in megasas_start_timer() argument
2335 struct timer_list *timer = &instance->sriov_heartbeat_timer; in megasas_start_timer()
2343 megasas_internal_reset_defer_cmds(struct megasas_instance *instance);
2348 static void megasas_do_ocr(struct megasas_instance *instance) in megasas_do_ocr() argument
2350 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS1064R) || in megasas_do_ocr()
2351 (instance->pdev->device == PCI_DEVICE_ID_DELL_PERC5) || in megasas_do_ocr()
2352 (instance->pdev->device == PCI_DEVICE_ID_LSI_VERDE_ZCR)) { in megasas_do_ocr()
2353 *instance->consumer = cpu_to_le32(MEGASAS_ADPRESET_INPROG_SIGN); in megasas_do_ocr()
2355 instance->instancet->disable_intr(instance); in megasas_do_ocr()
2356 atomic_set(&instance->adprecovery, MEGASAS_ADPRESET_SM_INFAULT); in megasas_do_ocr()
2357 instance->issuepend_done = 0; in megasas_do_ocr()
2359 atomic_set(&instance->fw_outstanding, 0); in megasas_do_ocr()
2360 megasas_internal_reset_defer_cmds(instance); in megasas_do_ocr()
2361 process_fw_state_change_wq(&instance->work_init); in megasas_do_ocr()
2364 static int megasas_get_ld_vf_affiliation_111(struct megasas_instance *instance, in megasas_get_ld_vf_affiliation_111() argument
2374 cmd = megasas_get_cmd(instance); in megasas_get_ld_vf_affiliation_111()
2377 dev_printk(KERN_DEBUG, &instance->pdev->dev, "megasas_get_ld_vf_affiliation_111:" in megasas_get_ld_vf_affiliation_111()
2379 instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2385 if (!instance->vf_affiliation_111) { in megasas_get_ld_vf_affiliation_111()
2386 dev_warn(&instance->pdev->dev, "SR-IOV: Couldn't get LD/VF " in megasas_get_ld_vf_affiliation_111()
2387 "affiliation for scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2388 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_111()
2393 memset(instance->vf_affiliation_111, 0, in megasas_get_ld_vf_affiliation_111()
2397 dma_alloc_coherent(&instance->pdev->dev, in megasas_get_ld_vf_affiliation_111()
2401 dev_printk(KERN_DEBUG, &instance->pdev->dev, "SR-IOV: Couldn't allocate " in megasas_get_ld_vf_affiliation_111()
2403 instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2404 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_111()
2423 cpu_to_le32(instance->vf_affiliation_111_h); in megasas_get_ld_vf_affiliation_111()
2431 dev_warn(&instance->pdev->dev, "SR-IOV: Getting LD/VF affiliation for " in megasas_get_ld_vf_affiliation_111()
2432 "scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2434 if (megasas_issue_blocked_cmd(instance, cmd, 0) != DCMD_SUCCESS) { in megasas_get_ld_vf_affiliation_111()
2435 dev_warn(&instance->pdev->dev, "SR-IOV: LD/VF affiliation DCMD" in megasas_get_ld_vf_affiliation_111()
2437 dcmd->cmd_status, instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2445 if (instance->vf_affiliation_111->map[ld].policy[thisVf] != in megasas_get_ld_vf_affiliation_111()
2447 dev_warn(&instance->pdev->dev, "SR-IOV: " in megasas_get_ld_vf_affiliation_111()
2449 instance->host->host_no); in megasas_get_ld_vf_affiliation_111()
2450 memcpy(instance->vf_affiliation_111, in megasas_get_ld_vf_affiliation_111()
2459 dma_free_coherent(&instance->pdev->dev, in megasas_get_ld_vf_affiliation_111()
2465 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_111()
2470 static int megasas_get_ld_vf_affiliation_12(struct megasas_instance *instance, in megasas_get_ld_vf_affiliation_12() argument
2481 cmd = megasas_get_cmd(instance); in megasas_get_ld_vf_affiliation_12()
2484 dev_printk(KERN_DEBUG, &instance->pdev->dev, "megasas_get_ld_vf_affiliation12: " in megasas_get_ld_vf_affiliation_12()
2486 instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2492 if (!instance->vf_affiliation) { in megasas_get_ld_vf_affiliation_12()
2493 dev_warn(&instance->pdev->dev, "SR-IOV: Couldn't get LD/VF " in megasas_get_ld_vf_affiliation_12()
2494 "affiliation for scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2495 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_12()
2500 memset(instance->vf_affiliation, 0, (MAX_LOGICAL_DRIVES + 1) * in megasas_get_ld_vf_affiliation_12()
2504 dma_alloc_coherent(&instance->pdev->dev, in megasas_get_ld_vf_affiliation_12()
2508 dev_printk(KERN_DEBUG, &instance->pdev->dev, "SR-IOV: Couldn't allocate " in megasas_get_ld_vf_affiliation_12()
2510 instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2511 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_12()
2530 cpu_to_le32(instance->vf_affiliation_h); in megasas_get_ld_vf_affiliation_12()
2538 dev_warn(&instance->pdev->dev, "SR-IOV: Getting LD/VF affiliation for " in megasas_get_ld_vf_affiliation_12()
2539 "scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2542 if (megasas_issue_blocked_cmd(instance, cmd, 0) != DCMD_SUCCESS) { in megasas_get_ld_vf_affiliation_12()
2543 dev_warn(&instance->pdev->dev, "SR-IOV: LD/VF affiliation DCMD" in megasas_get_ld_vf_affiliation_12()
2545 dcmd->cmd_status, instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2552 dev_warn(&instance->pdev->dev, "SR-IOV: Got new LD/VF " in megasas_get_ld_vf_affiliation_12()
2554 instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2559 savedmap = instance->vf_affiliation->map; in megasas_get_ld_vf_affiliation_12()
2563 for (j = 0; j < instance->vf_affiliation->ldCount; in megasas_get_ld_vf_affiliation_12()
2588 savedmap = instance->vf_affiliation->map; in megasas_get_ld_vf_affiliation_12()
2590 for (i = 0 ; i < instance->vf_affiliation->ldCount; i++) { in megasas_get_ld_vf_affiliation_12()
2618 dev_warn(&instance->pdev->dev, "SR-IOV: Got new LD/VF " in megasas_get_ld_vf_affiliation_12()
2619 "affiliation for scsi%d\n", instance->host->host_no); in megasas_get_ld_vf_affiliation_12()
2620 memcpy(instance->vf_affiliation, new_affiliation, in megasas_get_ld_vf_affiliation_12()
2626 dma_free_coherent(&instance->pdev->dev, in megasas_get_ld_vf_affiliation_12()
2630 megasas_return_cmd(instance, cmd); in megasas_get_ld_vf_affiliation_12()
2636 static int megasas_get_ld_vf_affiliation(struct megasas_instance *instance, in megasas_get_ld_vf_affiliation() argument
2641 if (instance->PlasmaFW111) in megasas_get_ld_vf_affiliation()
2642 retval = megasas_get_ld_vf_affiliation_111(instance, initial); in megasas_get_ld_vf_affiliation()
2644 retval = megasas_get_ld_vf_affiliation_12(instance, initial); in megasas_get_ld_vf_affiliation()
2649 int megasas_sriov_start_heartbeat(struct megasas_instance *instance, in megasas_sriov_start_heartbeat() argument
2656 cmd = megasas_get_cmd(instance); in megasas_sriov_start_heartbeat()
2659 dev_printk(KERN_DEBUG, &instance->pdev->dev, "megasas_sriov_start_heartbeat: " in megasas_sriov_start_heartbeat()
2661 instance->host->host_no); in megasas_sriov_start_heartbeat()
2668 instance->hb_host_mem = in megasas_sriov_start_heartbeat()
2669 dma_alloc_coherent(&instance->pdev->dev, in megasas_sriov_start_heartbeat()
2671 &instance->hb_host_mem_h, in megasas_sriov_start_heartbeat()
2673 if (!instance->hb_host_mem) { in megasas_sriov_start_heartbeat()
2674 dev_printk(KERN_DEBUG, &instance->pdev->dev, "SR-IOV: Couldn't allocate" in megasas_sriov_start_heartbeat()
2676 instance->host->host_no); in megasas_sriov_start_heartbeat()
2694 megasas_set_dma_settings(instance, dcmd, instance->hb_host_mem_h, in megasas_sriov_start_heartbeat()
2697 dev_warn(&instance->pdev->dev, "SR-IOV: Starting heartbeat for scsi%d\n", in megasas_sriov_start_heartbeat()
2698 instance->host->host_no); in megasas_sriov_start_heartbeat()
2700 if ((instance->adapter_type != MFI_SERIES) && in megasas_sriov_start_heartbeat()
2701 !instance->mask_interrupts) in megasas_sriov_start_heartbeat()
2702 retval = megasas_issue_blocked_cmd(instance, cmd, in megasas_sriov_start_heartbeat()
2705 retval = megasas_issue_polled(instance, cmd); in megasas_sriov_start_heartbeat()
2708 dev_warn(&instance->pdev->dev, "SR-IOV: MR_DCMD_CTRL_SHARED_HOST" in megasas_sriov_start_heartbeat()
2711 "timed out" : "failed", instance->host->host_no); in megasas_sriov_start_heartbeat()
2716 megasas_return_cmd(instance, cmd); in megasas_sriov_start_heartbeat()
2724 struct megasas_instance *instance = in megasas_sriov_heartbeat_handler() local
2725 from_timer(instance, t, sriov_heartbeat_timer); in megasas_sriov_heartbeat_handler()
2727 if (instance->hb_host_mem->HB.fwCounter != in megasas_sriov_heartbeat_handler()
2728 instance->hb_host_mem->HB.driverCounter) { in megasas_sriov_heartbeat_handler()
2729 instance->hb_host_mem->HB.driverCounter = in megasas_sriov_heartbeat_handler()
2730 instance->hb_host_mem->HB.fwCounter; in megasas_sriov_heartbeat_handler()
2731 mod_timer(&instance->sriov_heartbeat_timer, in megasas_sriov_heartbeat_handler()
2734 dev_warn(&instance->pdev->dev, "SR-IOV: Heartbeat never " in megasas_sriov_heartbeat_handler()
2735 "completed for scsi%d\n", instance->host->host_no); in megasas_sriov_heartbeat_handler()
2736 schedule_work(&instance->work_init); in megasas_sriov_heartbeat_handler()
2742 * @instance: Adapter soft state
2748 static int megasas_wait_for_outstanding(struct megasas_instance *instance) in megasas_wait_for_outstanding() argument
2758 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_wait_for_outstanding()
2759 dev_info(&instance->pdev->dev, "%s:%d HBA is killed.\n", in megasas_wait_for_outstanding()
2764 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) { in megasas_wait_for_outstanding()
2767 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_wait_for_outstanding()
2768 list_splice_init(&instance->internal_reset_pending_q, in megasas_wait_for_outstanding()
2770 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_wait_for_outstanding()
2772 dev_notice(&instance->pdev->dev, "HBA reset wait ...\n"); in megasas_wait_for_outstanding()
2775 if (atomic_read(&instance->adprecovery) == MEGASAS_HBA_OPERATIONAL) in megasas_wait_for_outstanding()
2779 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) { in megasas_wait_for_outstanding()
2780 dev_notice(&instance->pdev->dev, "reset: Stopping HBA.\n"); in megasas_wait_for_outstanding()
2781 atomic_set(&instance->adprecovery, MEGASAS_HW_CRITICAL_ERROR); in megasas_wait_for_outstanding()
2792 dev_notice(&instance->pdev->dev, "%d:%p reset [%02x]\n", in megasas_wait_for_outstanding()
2797 megasas_return_cmd(instance, reset_cmd); in megasas_wait_for_outstanding()
2799 dev_notice(&instance->pdev->dev, "%p synch cmds" in megasas_wait_for_outstanding()
2804 instance->instancet->fire_cmd(instance, in megasas_wait_for_outstanding()
2806 0, instance->reg_set); in megasas_wait_for_outstanding()
2808 dev_notice(&instance->pdev->dev, "%p unexpected" in megasas_wait_for_outstanding()
2819 outstanding = atomic_read(&instance->fw_outstanding); in megasas_wait_for_outstanding()
2825 dev_notice(&instance->pdev->dev, "[%2d]waiting for %d " in megasas_wait_for_outstanding()
2831 megasas_complete_cmd_dpc((unsigned long)instance); in megasas_wait_for_outstanding()
2838 outstanding = atomic_read(&instance->fw_outstanding); in megasas_wait_for_outstanding()
2839 fw_state = instance->instancet->read_fw_status_reg(instance) & MFI_STATE_MASK; in megasas_wait_for_outstanding()
2844 if (instance->disableOnlineCtrlReset) in megasas_wait_for_outstanding()
2847 if ((fw_state == MFI_STATE_FAULT) || atomic_read(&instance->fw_outstanding)) { in megasas_wait_for_outstanding()
2848 dev_info(&instance->pdev->dev, in megasas_wait_for_outstanding()
2850 __func__, __LINE__, fw_state, atomic_read(&instance->fw_outstanding)); in megasas_wait_for_outstanding()
2853 megasas_do_ocr(instance); in megasas_wait_for_outstanding()
2855 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_wait_for_outstanding()
2856 dev_info(&instance->pdev->dev, "%s:%d OCR failed and HBA is killed.\n", in megasas_wait_for_outstanding()
2860 dev_info(&instance->pdev->dev, "%s:%d waiting_for_outstanding: after issue OCR.\n", in megasas_wait_for_outstanding()
2866 outstanding = atomic_read(&instance->fw_outstanding); in megasas_wait_for_outstanding()
2868 fw_state = instance->instancet->read_fw_status_reg(instance) & MFI_STATE_MASK; in megasas_wait_for_outstanding()
2877 dev_info(&instance->pdev->dev, "%s:%d no more pending commands remain after reset handling.\n", in megasas_wait_for_outstanding()
2884 dev_info(&instance->pdev->dev, "%s:%d killing adapter scsi%d" in megasas_wait_for_outstanding()
2886 __func__, __LINE__, instance->host->host_no, instance->disableOnlineCtrlReset, in megasas_wait_for_outstanding()
2887 atomic_read(&instance->fw_outstanding)); in megasas_wait_for_outstanding()
2888 megasas_dump_pending_frames(instance); in megasas_wait_for_outstanding()
2889 megaraid_sas_kill_hba(instance); in megasas_wait_for_outstanding()
2905 struct megasas_instance *instance; in megasas_generic_reset() local
2907 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_generic_reset()
2912 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_generic_reset()
2913 dev_err(&instance->pdev->dev, "cannot recover from previous reset failures\n"); in megasas_generic_reset()
2917 ret_val = megasas_wait_for_outstanding(instance); in megasas_generic_reset()
2919 dev_notice(&instance->pdev->dev, "reset successful\n"); in megasas_generic_reset()
2921 dev_err(&instance->pdev->dev, "failed to do reset\n"); in megasas_generic_reset()
2935 struct megasas_instance *instance; in megasas_reset_timer() local
2943 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_reset_timer()
2944 if (!(instance->flag & MEGASAS_FW_BUSY)) { in megasas_reset_timer()
2946 spin_lock_irqsave(instance->host->host_lock, flags); in megasas_reset_timer()
2948 instance->host->can_queue = instance->throttlequeuedepth; in megasas_reset_timer()
2949 instance->last_time = jiffies; in megasas_reset_timer()
2950 instance->flag |= MEGASAS_FW_BUSY; in megasas_reset_timer()
2952 spin_unlock_irqrestore(instance->host->host_lock, flags); in megasas_reset_timer()
3006 struct megasas_instance *instance; in megasas_dump_fusion_io() local
3008 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_dump_fusion_io()
3029 instance->max_chain_frame_sz, 8); in megasas_dump_fusion_io()
3065 struct megasas_instance *instance; in megasas_reset_bus_host() local
3067 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_reset_bus_host()
3076 atomic_read(&instance->fw_outstanding)); in megasas_reset_bus_host()
3080 if (instance->adapter_type == MFI_SERIES) { in megasas_reset_bus_host()
3099 struct megasas_instance *instance; in megasas_task_abort() local
3101 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_task_abort()
3103 if (instance->adapter_type != MFI_SERIES) in megasas_task_abort()
3121 struct megasas_instance *instance; in megasas_reset_target() local
3123 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_reset_target()
3125 if (instance->adapter_type != MFI_SERIES) in megasas_reset_target()
3181 struct megasas_instance *instance; in megasas_map_queues() local
3185 instance = (struct megasas_instance *)shost->hostdata; in megasas_map_queues()
3190 offset = instance->low_latency_index_start; in megasas_map_queues()
3194 map->nr_queues = instance->msix_vectors - offset; in megasas_map_queues()
3196 blk_mq_pci_map_queues(map, instance->pdev, offset); in megasas_map_queues()
3205 map->nr_queues = instance->iopoll_q_count; in megasas_map_queues()
3220 * @instance: Adapter soft state
3231 megasas_service_aen(struct megasas_instance *instance, struct megasas_cmd *cmd) in megasas_service_aen() argument
3238 if ((!cmd->abort_aen) && (instance->unload == 0)) { in megasas_service_aen()
3248 instance->aen_cmd = NULL; in megasas_service_aen()
3250 megasas_return_cmd(instance, cmd); in megasas_service_aen()
3252 if ((instance->unload == 0) && in megasas_service_aen()
3253 ((instance->issuepend_done == 1))) { in megasas_service_aen()
3258 dev_err(&instance->pdev->dev, "megasas_service_aen: out of memory\n"); in megasas_service_aen()
3260 ev->instance = instance; in megasas_service_aen()
3261 instance->ev = ev; in megasas_service_aen()
3274 struct megasas_instance *instance = in fw_crash_buffer_store() local
3281 mutex_lock(&instance->crashdump_lock); in fw_crash_buffer_store()
3282 instance->fw_crash_buffer_offset = val; in fw_crash_buffer_store()
3283 mutex_unlock(&instance->crashdump_lock); in fw_crash_buffer_store()
3292 struct megasas_instance *instance = in fw_crash_buffer_show() local
3300 mutex_lock(&instance->crashdump_lock); in fw_crash_buffer_show()
3301 buff_offset = instance->fw_crash_buffer_offset; in fw_crash_buffer_show()
3302 if (!instance->crash_dump_buf || in fw_crash_buffer_show()
3303 !((instance->fw_crash_state == AVAILABLE) || in fw_crash_buffer_show()
3304 (instance->fw_crash_state == COPYING))) { in fw_crash_buffer_show()
3305 dev_err(&instance->pdev->dev, in fw_crash_buffer_show()
3307 mutex_unlock(&instance->crashdump_lock); in fw_crash_buffer_show()
3311 if (buff_offset > (instance->fw_crash_buffer_size * dmachunk)) { in fw_crash_buffer_show()
3312 dev_err(&instance->pdev->dev, in fw_crash_buffer_show()
3314 mutex_unlock(&instance->crashdump_lock); in fw_crash_buffer_show()
3318 size = (instance->fw_crash_buffer_size * dmachunk) - buff_offset; in fw_crash_buffer_show()
3323 src_addr = (unsigned long)instance->crash_buf[buff_offset / dmachunk] + in fw_crash_buffer_show()
3326 mutex_unlock(&instance->crashdump_lock); in fw_crash_buffer_show()
3336 struct megasas_instance *instance = in fw_crash_buffer_size_show() local
3340 ((instance->fw_crash_buffer_size) * 1024 * 1024)/PAGE_SIZE); in fw_crash_buffer_size_show()
3348 struct megasas_instance *instance = in fw_crash_state_store() local
3356 dev_err(&instance->pdev->dev, "application updates invalid " in fw_crash_state_store()
3361 instance->fw_crash_state = val; in fw_crash_state_store()
3364 mutex_lock(&instance->crashdump_lock); in fw_crash_state_store()
3365 megasas_free_host_crash_buffer(instance); in fw_crash_state_store()
3366 mutex_unlock(&instance->crashdump_lock); in fw_crash_state_store()
3368 dev_info(&instance->pdev->dev, "application failed to " in fw_crash_state_store()
3371 dev_info(&instance->pdev->dev, "Firmware crash dump " in fw_crash_state_store()
3382 struct megasas_instance *instance = in fw_crash_state_show() local
3385 return snprintf(buf, PAGE_SIZE, "%d\n", instance->fw_crash_state); in fw_crash_state_show()
3400 struct megasas_instance *instance = (struct megasas_instance *)shost->hostdata; in ldio_outstanding_show() local
3402 return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&instance->ldio_outstanding)); in ldio_outstanding_show()
3410 struct megasas_instance *instance = (struct megasas_instance *)shost->hostdata; in fw_cmds_outstanding_show() local
3412 return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&instance->fw_outstanding)); in fw_cmds_outstanding_show()
3420 struct megasas_instance *instance = (struct megasas_instance *)shost->hostdata; in enable_sdev_max_qd_show() local
3422 return snprintf(buf, PAGE_SIZE, "%d\n", instance->enable_sdev_max_qd); in enable_sdev_max_qd_show()
3430 struct megasas_instance *instance = (struct megasas_instance *)shost->hostdata; in enable_sdev_max_qd_store() local
3441 mutex_lock(&instance->reset_mutex); in enable_sdev_max_qd_store()
3443 instance->enable_sdev_max_qd = true; in enable_sdev_max_qd_store()
3445 instance->enable_sdev_max_qd = false; in enable_sdev_max_qd_store()
3448 ret_target_prop = megasas_get_target_prop(instance, sdev); in enable_sdev_max_qd_store()
3452 mutex_unlock(&instance->reset_mutex); in enable_sdev_max_qd_store()
3462 struct megasas_instance *instance = in dump_system_regs_show() local
3465 return megasas_dump_sys_regs(instance->reg_set, buf); in dump_system_regs_show()
3473 struct megasas_instance *instance = in raid_map_id_show() local
3477 (unsigned long)instance->map_id); in raid_map_id_show()
3532 * @instance: Adapter soft state
3540 megasas_complete_int_cmd(struct megasas_instance *instance, in megasas_complete_int_cmd() argument
3548 wake_up(&instance->int_cmd_wait_q); in megasas_complete_int_cmd()
3553 * @instance: Adapter soft state
3561 megasas_complete_abort(struct megasas_instance *instance, in megasas_complete_abort() argument
3567 wake_up(&instance->abort_cmd_wait_q); in megasas_complete_abort()
3572 megasas_set_ld_removed_by_fw(struct megasas_instance *instance) in megasas_set_ld_removed_by_fw() argument
3577 if (instance->ld_ids_prev[i] != 0xff && in megasas_set_ld_removed_by_fw()
3578 instance->ld_ids_from_raidmap[i] == 0xff) { in megasas_set_ld_removed_by_fw()
3580 dev_info(&instance->pdev->dev, in megasas_set_ld_removed_by_fw()
3582 instance->ld_tgtid_status[i] = LD_TARGET_ID_DELETED; in megasas_set_ld_removed_by_fw()
3589 * @instance: Adapter soft state
3598 megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd, in megasas_complete_cmd() argument
3604 struct fusion_context *fusion = instance->ctrl_context; in megasas_complete_cmd()
3619 dev_warn(&instance->pdev->dev, "MFI_CMD_INVALID command " in megasas_complete_cmd()
3621 dev_warn(&instance->pdev->dev, "If you have a controller " in megasas_complete_cmd()
3634 megasas_complete_int_cmd(instance, cmd); in megasas_complete_cmd()
3649 atomic_dec(&instance->fw_outstanding); in megasas_complete_cmd()
3653 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3691 dev_printk(KERN_DEBUG, &instance->pdev->dev, "MFI FW status %#x\n", in megasas_complete_cmd()
3697 atomic_dec(&instance->fw_outstanding); in megasas_complete_cmd()
3701 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3709 megasas_complete_int_cmd(instance, cmd); in megasas_complete_cmd()
3718 spin_lock_irqsave(instance->host->host_lock, flags); in megasas_complete_cmd()
3720 instance->map_update_cmd = NULL; in megasas_complete_cmd()
3723 dev_warn(&instance->pdev->dev, "map syncfailed, status = 0x%x\n", in megasas_complete_cmd()
3726 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3728 instance->host->host_lock, in megasas_complete_cmd()
3734 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3742 (MR_ValidateMapInfo(instance, (instance->map_id + 1)))) { in megasas_complete_cmd()
3743 instance->map_id++; in megasas_complete_cmd()
3749 if (instance->adapter_type >= INVADER_SERIES) in megasas_complete_cmd()
3750 megasas_set_ld_removed_by_fw(instance); in megasas_complete_cmd()
3752 megasas_sync_map_info(instance); in megasas_complete_cmd()
3753 spin_unlock_irqrestore(instance->host->host_lock, in megasas_complete_cmd()
3769 spin_lock_irqsave(instance->host->host_lock, flags); in megasas_complete_cmd()
3771 instance->jbod_seq_cmd = NULL; in megasas_complete_cmd()
3772 megasas_return_cmd(instance, cmd); in megasas_complete_cmd()
3775 instance->pd_seq_map_id++; in megasas_complete_cmd()
3777 if (megasas_sync_pd_seq_num(instance, true)) in megasas_complete_cmd()
3778 instance->use_seqnum_jbod_fp = false; in megasas_complete_cmd()
3780 instance->use_seqnum_jbod_fp = false; in megasas_complete_cmd()
3782 spin_unlock_irqrestore(instance->host->host_lock, flags); in megasas_complete_cmd()
3790 megasas_service_aen(instance, cmd); in megasas_complete_cmd()
3792 megasas_complete_int_cmd(instance, cmd); in megasas_complete_cmd()
3800 megasas_complete_abort(instance, cmd); in megasas_complete_cmd()
3804 dev_info(&instance->pdev->dev, "Unknown command completed! [0x%X]\n", in megasas_complete_cmd()
3806 megasas_complete_int_cmd(instance, cmd); in megasas_complete_cmd()
3814 * @instance: Adapter soft state
3817 megasas_issue_pending_cmds_again(struct megasas_instance *instance) in megasas_issue_pending_cmds_again() argument
3826 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_issue_pending_cmds_again()
3827 list_splice_init(&instance->internal_reset_pending_q, &clist_local); in megasas_issue_pending_cmds_again()
3828 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_issue_pending_cmds_again()
3836 dev_notice(&instance->pdev->dev, "command %p, %p:%d" in megasas_issue_pending_cmds_again()
3843 dev_notice(&instance->pdev->dev, "cmd %p, %p:%d" in megasas_issue_pending_cmds_again()
3847 instance->instancet->disable_intr(instance); in megasas_issue_pending_cmds_again()
3848 atomic_set(&instance->fw_reset_no_pci_access, 1); in megasas_issue_pending_cmds_again()
3849 megaraid_sas_kill_hba(instance); in megasas_issue_pending_cmds_again()
3856 dev_notice(&instance->pdev->dev, "unexpected" in megasas_issue_pending_cmds_again()
3859 dev_notice(&instance->pdev->dev, "%p synchronous cmd" in megasas_issue_pending_cmds_again()
3863 instance->instancet->fire_cmd(instance, in megasas_issue_pending_cmds_again()
3865 0, instance->reg_set); in megasas_issue_pending_cmds_again()
3867 dev_notice(&instance->pdev->dev, "%p scsi cmd [%02x]" in megasas_issue_pending_cmds_again()
3871 atomic_inc(&instance->fw_outstanding); in megasas_issue_pending_cmds_again()
3872 instance->instancet->fire_cmd(instance, in megasas_issue_pending_cmds_again()
3874 cmd->frame_count-1, instance->reg_set); in megasas_issue_pending_cmds_again()
3876 dev_notice(&instance->pdev->dev, "%p unexpected cmd on the" in megasas_issue_pending_cmds_again()
3882 if (instance->aen_cmd) { in megasas_issue_pending_cmds_again()
3883 dev_notice(&instance->pdev->dev, "aen_cmd in def process\n"); in megasas_issue_pending_cmds_again()
3884 megasas_return_cmd(instance, instance->aen_cmd); in megasas_issue_pending_cmds_again()
3886 instance->aen_cmd = NULL; in megasas_issue_pending_cmds_again()
3892 seq_num = instance->last_seq_num; in megasas_issue_pending_cmds_again()
3897 megasas_register_aen(instance, seq_num, class_locale.word); in megasas_issue_pending_cmds_again()
3910 megasas_internal_reset_defer_cmds(struct megasas_instance *instance) in megasas_internal_reset_defer_cmds() argument
3914 u16 max_cmd = instance->max_fw_cmds; in megasas_internal_reset_defer_cmds()
3919 spin_lock_irqsave(&instance->mfi_pool_lock, flags); in megasas_internal_reset_defer_cmds()
3921 cmd = instance->cmd_list[i]; in megasas_internal_reset_defer_cmds()
3923 dev_notice(&instance->pdev->dev, "moving cmd[%d]:%p:%d:%p" in megasas_internal_reset_defer_cmds()
3928 dev_notice(&instance->pdev->dev, "ERROR while" in megasas_internal_reset_defer_cmds()
3937 &instance->internal_reset_pending_q); in megasas_internal_reset_defer_cmds()
3940 spin_unlock_irqrestore(&instance->mfi_pool_lock, flags); in megasas_internal_reset_defer_cmds()
3947 struct megasas_instance *instance = in process_fw_state_change_wq() local
3952 if (atomic_read(&instance->adprecovery) != MEGASAS_ADPRESET_SM_INFAULT) { in process_fw_state_change_wq()
3953 dev_notice(&instance->pdev->dev, "error, recovery st %x\n", in process_fw_state_change_wq()
3954 atomic_read(&instance->adprecovery)); in process_fw_state_change_wq()
3958 if (atomic_read(&instance->adprecovery) == MEGASAS_ADPRESET_SM_INFAULT) { in process_fw_state_change_wq()
3959 dev_notice(&instance->pdev->dev, "FW detected to be in fault" in process_fw_state_change_wq()
3962 instance->instancet->disable_intr(instance); in process_fw_state_change_wq()
3963 atomic_set(&instance->fw_outstanding, 0); in process_fw_state_change_wq()
3965 atomic_set(&instance->fw_reset_no_pci_access, 1); in process_fw_state_change_wq()
3966 instance->instancet->adp_reset(instance, instance->reg_set); in process_fw_state_change_wq()
3967 atomic_set(&instance->fw_reset_no_pci_access, 0); in process_fw_state_change_wq()
3969 dev_notice(&instance->pdev->dev, "FW restarted successfully," in process_fw_state_change_wq()
3972 dev_notice(&instance->pdev->dev, "HBA recovery state machine," in process_fw_state_change_wq()
3980 if (megasas_transition_to_ready(instance, 1)) { in process_fw_state_change_wq()
3981 dev_notice(&instance->pdev->dev, "adapter not ready\n"); in process_fw_state_change_wq()
3983 atomic_set(&instance->fw_reset_no_pci_access, 1); in process_fw_state_change_wq()
3984 megaraid_sas_kill_hba(instance); in process_fw_state_change_wq()
3988 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS1064R) || in process_fw_state_change_wq()
3989 (instance->pdev->device == PCI_DEVICE_ID_DELL_PERC5) || in process_fw_state_change_wq()
3990 (instance->pdev->device == PCI_DEVICE_ID_LSI_VERDE_ZCR) in process_fw_state_change_wq()
3992 *instance->consumer = *instance->producer; in process_fw_state_change_wq()
3994 *instance->consumer = 0; in process_fw_state_change_wq()
3995 *instance->producer = 0; in process_fw_state_change_wq()
3998 megasas_issue_init_mfi(instance); in process_fw_state_change_wq()
4000 spin_lock_irqsave(&instance->hba_lock, flags); in process_fw_state_change_wq()
4001 atomic_set(&instance->adprecovery, MEGASAS_HBA_OPERATIONAL); in process_fw_state_change_wq()
4002 spin_unlock_irqrestore(&instance->hba_lock, flags); in process_fw_state_change_wq()
4003 instance->instancet->enable_intr(instance); in process_fw_state_change_wq()
4005 megasas_issue_pending_cmds_again(instance); in process_fw_state_change_wq()
4006 instance->issuepend_done = 1; in process_fw_state_change_wq()
4012 * @instance: Adapter soft state
4019 megasas_deplete_reply_queue(struct megasas_instance *instance, in megasas_deplete_reply_queue() argument
4025 if (instance->instancet->check_reset(instance, instance->reg_set) == 1) in megasas_deplete_reply_queue()
4028 mfiStatus = instance->instancet->clear_intr(instance); in megasas_deplete_reply_queue()
4031 if (!instance->msix_vectors) in megasas_deplete_reply_queue()
4035 instance->mfiStatus = mfiStatus; in megasas_deplete_reply_queue()
4038 fw_state = instance->instancet->read_fw_status_reg( in megasas_deplete_reply_queue()
4039 instance) & MFI_STATE_MASK; in megasas_deplete_reply_queue()
4042 dev_notice(&instance->pdev->dev, "fw state:%x\n", in megasas_deplete_reply_queue()
4047 (instance->disableOnlineCtrlReset == 0)) { in megasas_deplete_reply_queue()
4048 dev_notice(&instance->pdev->dev, "wait adp restart\n"); in megasas_deplete_reply_queue()
4050 if ((instance->pdev->device == in megasas_deplete_reply_queue()
4052 (instance->pdev->device == in megasas_deplete_reply_queue()
4054 (instance->pdev->device == in megasas_deplete_reply_queue()
4057 *instance->consumer = in megasas_deplete_reply_queue()
4062 instance->instancet->disable_intr(instance); in megasas_deplete_reply_queue()
4063 atomic_set(&instance->adprecovery, MEGASAS_ADPRESET_SM_INFAULT); in megasas_deplete_reply_queue()
4064 instance->issuepend_done = 0; in megasas_deplete_reply_queue()
4066 atomic_set(&instance->fw_outstanding, 0); in megasas_deplete_reply_queue()
4067 megasas_internal_reset_defer_cmds(instance); in megasas_deplete_reply_queue()
4069 dev_notice(&instance->pdev->dev, "fwState=%x, stage:%d\n", in megasas_deplete_reply_queue()
4070 fw_state, atomic_read(&instance->adprecovery)); in megasas_deplete_reply_queue()
4072 schedule_work(&instance->work_init); in megasas_deplete_reply_queue()
4076 dev_notice(&instance->pdev->dev, "fwstate:%x, dis_OCR=%x\n", in megasas_deplete_reply_queue()
4077 fw_state, instance->disableOnlineCtrlReset); in megasas_deplete_reply_queue()
4081 tasklet_schedule(&instance->isr_tasklet); in megasas_deplete_reply_queue()
4093 struct megasas_instance *instance = irq_context->instance; in megasas_isr() local
4097 if (atomic_read(&instance->fw_reset_no_pci_access)) in megasas_isr()
4100 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_isr()
4101 rc = megasas_deplete_reply_queue(instance, DID_OK); in megasas_isr()
4102 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_isr()
4109 * @instance: Adapter soft state
4118 megasas_transition_to_ready(struct megasas_instance *instance, int ocr) in megasas_transition_to_ready() argument
4125 abs_state = instance->instancet->read_fw_status_reg(instance); in megasas_transition_to_ready()
4129 dev_info(&instance->pdev->dev, "Waiting for FW to come to ready" in megasas_transition_to_ready()
4137 dev_printk(KERN_ERR, &instance->pdev->dev, in megasas_transition_to_ready()
4145 dev_printk(KERN_DEBUG, &instance->pdev->dev, "System Register set:\n"); in megasas_transition_to_ready()
4146 megasas_dump_reg_set(instance->reg_set); in megasas_transition_to_ready()
4154 if ((instance->pdev->device == in megasas_transition_to_ready()
4156 (instance->pdev->device == in megasas_transition_to_ready()
4158 (instance->adapter_type != MFI_SERIES)) in megasas_transition_to_ready()
4161 &instance->reg_set->doorbell); in megasas_transition_to_ready()
4165 &instance->reg_set->inbound_doorbell); in megasas_transition_to_ready()
4171 if ((instance->pdev->device == in megasas_transition_to_ready()
4173 (instance->pdev->device == in megasas_transition_to_ready()
4175 (instance->adapter_type != MFI_SERIES)) in megasas_transition_to_ready()
4177 &instance->reg_set->doorbell); in megasas_transition_to_ready()
4180 &instance->reg_set->inbound_doorbell); in megasas_transition_to_ready()
4189 instance->instancet->disable_intr(instance); in megasas_transition_to_ready()
4190 if ((instance->pdev->device == in megasas_transition_to_ready()
4192 (instance->pdev->device == in megasas_transition_to_ready()
4194 (instance->adapter_type != MFI_SERIES)) { in megasas_transition_to_ready()
4196 &instance->reg_set->doorbell); in megasas_transition_to_ready()
4198 if (instance->adapter_type != MFI_SERIES) { in megasas_transition_to_ready()
4201 instance, in megasas_transition_to_ready()
4202 &instance-> in megasas_transition_to_ready()
4212 &instance->reg_set->inbound_doorbell); in megasas_transition_to_ready()
4245 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Unknown state 0x%x\n", in megasas_transition_to_ready()
4247 dev_printk(KERN_DEBUG, &instance->pdev->dev, "System Register set:\n"); in megasas_transition_to_ready()
4248 megasas_dump_reg_set(instance->reg_set); in megasas_transition_to_ready()
4256 curr_abs_state = instance->instancet-> in megasas_transition_to_ready()
4257 read_fw_status_reg(instance); in megasas_transition_to_ready()
4269 dev_printk(KERN_DEBUG, &instance->pdev->dev, "FW state [%d] hasn't changed " in megasas_transition_to_ready()
4271 dev_printk(KERN_DEBUG, &instance->pdev->dev, "System Register set:\n"); in megasas_transition_to_ready()
4272 megasas_dump_reg_set(instance->reg_set); in megasas_transition_to_ready()
4279 dev_info(&instance->pdev->dev, "FW now in Ready state\n"); in megasas_transition_to_ready()
4286 * @instance: Adapter soft state
4288 static void megasas_teardown_frame_pool(struct megasas_instance *instance) in megasas_teardown_frame_pool() argument
4291 u16 max_cmd = instance->max_mfi_cmds; in megasas_teardown_frame_pool()
4294 if (!instance->frame_dma_pool) in megasas_teardown_frame_pool()
4302 cmd = instance->cmd_list[i]; in megasas_teardown_frame_pool()
4305 dma_pool_free(instance->frame_dma_pool, cmd->frame, in megasas_teardown_frame_pool()
4309 dma_pool_free(instance->sense_dma_pool, cmd->sense, in megasas_teardown_frame_pool()
4316 dma_pool_destroy(instance->frame_dma_pool); in megasas_teardown_frame_pool()
4317 dma_pool_destroy(instance->sense_dma_pool); in megasas_teardown_frame_pool()
4319 instance->frame_dma_pool = NULL; in megasas_teardown_frame_pool()
4320 instance->sense_dma_pool = NULL; in megasas_teardown_frame_pool()
4325 * @instance: Adapter soft state
4332 static int megasas_create_frame_pool(struct megasas_instance *instance) in megasas_create_frame_pool() argument
4339 max_cmd = instance->max_mfi_cmds; in megasas_create_frame_pool()
4352 frame_count = (instance->adapter_type == MFI_SERIES) ? in megasas_create_frame_pool()
4354 instance->mfi_frame_size = MEGAMFI_FRAME_SIZE * frame_count; in megasas_create_frame_pool()
4358 instance->frame_dma_pool = dma_pool_create("megasas frame pool", in megasas_create_frame_pool()
4359 &instance->pdev->dev, in megasas_create_frame_pool()
4360 instance->mfi_frame_size, 256, 0); in megasas_create_frame_pool()
4362 if (!instance->frame_dma_pool) { in megasas_create_frame_pool()
4363 dev_printk(KERN_DEBUG, &instance->pdev->dev, "failed to setup frame pool\n"); in megasas_create_frame_pool()
4367 instance->sense_dma_pool = dma_pool_create("megasas sense pool", in megasas_create_frame_pool()
4368 &instance->pdev->dev, 128, in megasas_create_frame_pool()
4371 if (!instance->sense_dma_pool) { in megasas_create_frame_pool()
4372 dev_printk(KERN_DEBUG, &instance->pdev->dev, "failed to setup sense pool\n"); in megasas_create_frame_pool()
4374 dma_pool_destroy(instance->frame_dma_pool); in megasas_create_frame_pool()
4375 instance->frame_dma_pool = NULL; in megasas_create_frame_pool()
4387 cmd = instance->cmd_list[i]; in megasas_create_frame_pool()
4389 cmd->frame = dma_pool_zalloc(instance->frame_dma_pool, in megasas_create_frame_pool()
4392 cmd->sense = dma_pool_alloc(instance->sense_dma_pool, in megasas_create_frame_pool()
4400 dev_printk(KERN_DEBUG, &instance->pdev->dev, "dma_pool_alloc failed\n"); in megasas_create_frame_pool()
4401 megasas_teardown_frame_pool(instance); in megasas_create_frame_pool()
4407 if ((instance->adapter_type == MFI_SERIES) && reset_devices) in megasas_create_frame_pool()
4416 * @instance: Adapter soft state
4418 void megasas_free_cmds(struct megasas_instance *instance) in megasas_free_cmds() argument
4423 megasas_teardown_frame_pool(instance); in megasas_free_cmds()
4426 for (i = 0; i < instance->max_mfi_cmds; i++) in megasas_free_cmds()
4428 kfree(instance->cmd_list[i]); in megasas_free_cmds()
4431 kfree(instance->cmd_list); in megasas_free_cmds()
4432 instance->cmd_list = NULL; in megasas_free_cmds()
4434 INIT_LIST_HEAD(&instance->cmd_pool); in megasas_free_cmds()
4439 * @instance: Adapter soft state
4455 int megasas_alloc_cmds(struct megasas_instance *instance) in megasas_alloc_cmds() argument
4462 max_cmd = instance->max_mfi_cmds; in megasas_alloc_cmds()
4465 * instance->cmd_list is an array of struct megasas_cmd pointers. in megasas_alloc_cmds()
4469 instance->cmd_list = kcalloc(max_cmd, sizeof(struct megasas_cmd*), GFP_KERNEL); in megasas_alloc_cmds()
4471 if (!instance->cmd_list) { in megasas_alloc_cmds()
4472 dev_printk(KERN_DEBUG, &instance->pdev->dev, "out of memory\n"); in megasas_alloc_cmds()
4477 instance->cmd_list[i] = kmalloc(sizeof(struct megasas_cmd), in megasas_alloc_cmds()
4480 if (!instance->cmd_list[i]) { in megasas_alloc_cmds()
4483 kfree(instance->cmd_list[j]); in megasas_alloc_cmds()
4485 kfree(instance->cmd_list); in megasas_alloc_cmds()
4486 instance->cmd_list = NULL; in megasas_alloc_cmds()
4493 cmd = instance->cmd_list[i]; in megasas_alloc_cmds()
4497 cmd->instance = instance; in megasas_alloc_cmds()
4499 list_add_tail(&cmd->list, &instance->cmd_pool); in megasas_alloc_cmds()
4505 if (megasas_create_frame_pool(instance)) { in megasas_alloc_cmds()
4506 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Error creating frame DMA pool\n"); in megasas_alloc_cmds()
4507 megasas_free_cmds(instance); in megasas_alloc_cmds()
4516 * @instance: Adapter soft state
4522 dcmd_timeout_ocr_possible(struct megasas_instance *instance) { in dcmd_timeout_ocr_possible() argument
4524 if (instance->adapter_type == MFI_SERIES) in dcmd_timeout_ocr_possible()
4526 else if (instance->unload || in dcmd_timeout_ocr_possible()
4528 &instance->reset_flags)) in dcmd_timeout_ocr_possible()
4535 megasas_get_pd_info(struct megasas_instance *instance, struct scsi_device *sdev) in megasas_get_pd_info() argument
4545 cmd = megasas_get_cmd(instance); in megasas_get_pd_info()
4548 dev_err(&instance->pdev->dev, "Failed to get cmd %s\n", __func__); in megasas_get_pd_info()
4554 memset(instance->pd_info, 0, sizeof(*instance->pd_info)); in megasas_get_pd_info()
4567 megasas_set_dma_settings(instance, dcmd, instance->pd_info_h, in megasas_get_pd_info()
4570 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_pd_info()
4571 !instance->mask_interrupts) in megasas_get_pd_info()
4572 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_get_pd_info()
4574 ret = megasas_issue_polled(instance, cmd); in megasas_get_pd_info()
4579 le16_to_cpus((u16 *)&instance->pd_info->state.ddf.pdType); in megasas_get_pd_info()
4581 instance->pd_info->state.ddf.pdType.intf; in megasas_get_pd_info()
4586 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_pd_info()
4589 mutex_unlock(&instance->reset_mutex); in megasas_get_pd_info()
4590 megasas_reset_fusion(instance->host, in megasas_get_pd_info()
4592 mutex_lock(&instance->reset_mutex); in megasas_get_pd_info()
4595 megaraid_sas_kill_hba(instance); in megasas_get_pd_info()
4598 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_get_pd_info()
4607 megasas_return_cmd(instance, cmd); in megasas_get_pd_info()
4613 * @instance: Adapter soft state
4621 megasas_get_pd_list(struct megasas_instance *instance) in megasas_get_pd_list() argument
4629 if (instance->pd_list_not_supported) { in megasas_get_pd_list()
4630 dev_info(&instance->pdev->dev, "MR_DCMD_PD_LIST_QUERY " in megasas_get_pd_list()
4635 ci = instance->pd_list_buf; in megasas_get_pd_list()
4637 cmd = megasas_get_cmd(instance); in megasas_get_pd_list()
4640 dev_printk(KERN_DEBUG, &instance->pdev->dev, "(get_pd_list): Failed to get cmd\n"); in megasas_get_pd_list()
4660 megasas_set_dma_settings(instance, dcmd, instance->pd_list_buf_h, in megasas_get_pd_list()
4663 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_pd_list()
4664 !instance->mask_interrupts) in megasas_get_pd_list()
4665 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_get_pd_list()
4668 ret = megasas_issue_polled(instance, cmd); in megasas_get_pd_list()
4672 dev_info(&instance->pdev->dev, "MR_DCMD_PD_LIST_QUERY " in megasas_get_pd_list()
4675 if (instance->adapter_type != MFI_SERIES) in megasas_get_pd_list()
4676 megaraid_sas_kill_hba(instance); in megasas_get_pd_list()
4678 instance->pd_list_not_supported = 1; in megasas_get_pd_list()
4682 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_pd_list()
4690 mutex_unlock(&instance->reset_mutex); in megasas_get_pd_list()
4691 megasas_reset_fusion(instance->host, in megasas_get_pd_list()
4693 mutex_lock(&instance->reset_mutex); in megasas_get_pd_list()
4696 megaraid_sas_kill_hba(instance); in megasas_get_pd_list()
4699 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d \n", in megasas_get_pd_list()
4709 dev_info(&instance->pdev->dev, "%s, sysPD count: 0x%x\n", in megasas_get_pd_list()
4716 memset(instance->local_pd_list, 0, in megasas_get_pd_list()
4720 instance->local_pd_list[le16_to_cpu(pd_addr->deviceId)].tid = in megasas_get_pd_list()
4722 instance->local_pd_list[le16_to_cpu(pd_addr->deviceId)].driveType = in megasas_get_pd_list()
4724 instance->local_pd_list[le16_to_cpu(pd_addr->deviceId)].driveState = in megasas_get_pd_list()
4727 dev_info(&instance->pdev->dev, in megasas_get_pd_list()
4734 memcpy(instance->pd_list, instance->local_pd_list, in megasas_get_pd_list()
4735 sizeof(instance->pd_list)); in megasas_get_pd_list()
4741 megasas_return_cmd(instance, cmd); in megasas_get_pd_list()
4748 * @instance: Adapter soft state
4756 megasas_get_ld_list(struct megasas_instance *instance) in megasas_get_ld_list() argument
4765 ci = instance->ld_list_buf; in megasas_get_ld_list()
4766 ci_h = instance->ld_list_buf_h; in megasas_get_ld_list()
4768 cmd = megasas_get_cmd(instance); in megasas_get_ld_list()
4771 dev_printk(KERN_DEBUG, &instance->pdev->dev, "megasas_get_ld_list: Failed to get cmd\n"); in megasas_get_ld_list()
4780 if (instance->supportmax256vd) in megasas_get_ld_list()
4791 megasas_set_dma_settings(instance, dcmd, ci_h, in megasas_get_ld_list()
4794 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_ld_list()
4795 !instance->mask_interrupts) in megasas_get_ld_list()
4796 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_get_ld_list()
4799 ret = megasas_issue_polled(instance, cmd); in megasas_get_ld_list()
4805 megaraid_sas_kill_hba(instance); in megasas_get_ld_list()
4809 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_ld_list()
4817 mutex_unlock(&instance->reset_mutex); in megasas_get_ld_list()
4818 megasas_reset_fusion(instance->host, in megasas_get_ld_list()
4820 mutex_lock(&instance->reset_mutex); in megasas_get_ld_list()
4823 megaraid_sas_kill_hba(instance); in megasas_get_ld_list()
4826 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_get_ld_list()
4835 dev_info(&instance->pdev->dev, "%s, LD count: 0x%x\n", in megasas_get_ld_list()
4838 if (ld_count > instance->fw_supported_vd_count) in megasas_get_ld_list()
4841 memset(instance->ld_ids, 0xff, MAX_LOGICAL_DRIVES_EXT); in megasas_get_ld_list()
4846 instance->ld_ids[ids] = ci->ldList[ld_index].ref.targetId; in megasas_get_ld_list()
4848 dev_info(&instance->pdev->dev, in megasas_get_ld_list()
4858 megasas_return_cmd(instance, cmd); in megasas_get_ld_list()
4865 * @instance: Adapter soft state
4873 megasas_ld_list_query(struct megasas_instance *instance, u8 query_type) in megasas_ld_list_query() argument
4882 ci = instance->ld_targetid_list_buf; in megasas_ld_list_query()
4883 ci_h = instance->ld_targetid_list_buf_h; in megasas_ld_list_query()
4885 cmd = megasas_get_cmd(instance); in megasas_ld_list_query()
4888 dev_warn(&instance->pdev->dev, in megasas_ld_list_query()
4899 if (instance->supportmax256vd) in megasas_ld_list_query()
4911 megasas_set_dma_settings(instance, dcmd, ci_h, in megasas_ld_list_query()
4914 if ((instance->adapter_type != MFI_SERIES) && in megasas_ld_list_query()
4915 !instance->mask_interrupts) in megasas_ld_list_query()
4916 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_ld_list_query()
4918 ret = megasas_issue_polled(instance, cmd); in megasas_ld_list_query()
4922 dev_info(&instance->pdev->dev, in megasas_ld_list_query()
4925 ret = megasas_get_ld_list(instance); in megasas_ld_list_query()
4928 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_ld_list_query()
4936 mutex_unlock(&instance->reset_mutex); in megasas_ld_list_query()
4937 megasas_reset_fusion(instance->host, in megasas_ld_list_query()
4939 mutex_lock(&instance->reset_mutex); in megasas_ld_list_query()
4942 megaraid_sas_kill_hba(instance); in megasas_ld_list_query()
4945 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_ld_list_query()
4955 dev_info(&instance->pdev->dev, "%s, LD count: 0x%x\n", in megasas_ld_list_query()
4958 if ((tgtid_count > (instance->fw_supported_vd_count))) in megasas_ld_list_query()
4961 memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS); in megasas_ld_list_query()
4964 instance->ld_ids[ids] = ci->targetId[ld_index]; in megasas_ld_list_query()
4966 dev_info(&instance->pdev->dev, "LD%d: targetID: 0x%03x\n", in megasas_ld_list_query()
4974 megasas_return_cmd(instance, cmd); in megasas_ld_list_query()
4988 * @instance: Adapter soft state
4994 megasas_host_device_list_query(struct megasas_instance *instance, in megasas_host_device_list_query() argument
5004 ci = instance->host_device_list_buf; in megasas_host_device_list_query()
5005 ci_h = instance->host_device_list_buf_h; in megasas_host_device_list_query()
5007 cmd = megasas_get_cmd(instance); in megasas_host_device_list_query()
5010 dev_warn(&instance->pdev->dev, in megasas_host_device_list_query()
5031 megasas_set_dma_settings(instance, dcmd, ci_h, HOST_DEVICE_LIST_SZ); in megasas_host_device_list_query()
5033 if (!instance->mask_interrupts) { in megasas_host_device_list_query()
5034 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_host_device_list_query()
5037 ret = megasas_issue_polled(instance, cmd); in megasas_host_device_list_query()
5052 dev_info(&instance->pdev->dev, "%s, Device count: 0x%x\n", in megasas_host_device_list_query()
5055 memset(instance->local_pd_list, 0, in megasas_host_device_list_query()
5057 memset(instance->ld_ids, 0xff, MAX_LOGICAL_DRIVES_EXT); in megasas_host_device_list_query()
5061 instance->local_pd_list[target_id].tid = target_id; in megasas_host_device_list_query()
5062 instance->local_pd_list[target_id].driveType = in megasas_host_device_list_query()
5064 instance->local_pd_list[target_id].driveState = in megasas_host_device_list_query()
5067 dev_info(&instance->pdev->dev, in megasas_host_device_list_query()
5071 instance->ld_ids[target_id] = target_id; in megasas_host_device_list_query()
5073 dev_info(&instance->pdev->dev, in megasas_host_device_list_query()
5079 memcpy(instance->pd_list, instance->local_pd_list, in megasas_host_device_list_query()
5080 sizeof(instance->pd_list)); in megasas_host_device_list_query()
5084 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_host_device_list_query()
5087 mutex_unlock(&instance->reset_mutex); in megasas_host_device_list_query()
5088 megasas_reset_fusion(instance->host, in megasas_host_device_list_query()
5090 mutex_lock(&instance->reset_mutex); in megasas_host_device_list_query()
5093 megaraid_sas_kill_hba(instance); in megasas_host_device_list_query()
5096 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_host_device_list_query()
5102 dev_err(&instance->pdev->dev, in megasas_host_device_list_query()
5109 megasas_return_cmd(instance, cmd); in megasas_host_device_list_query()
5116 * instance : Controller's instance
5118 static void megasas_update_ext_vd_details(struct megasas_instance *instance) in megasas_update_ext_vd_details() argument
5123 fusion = instance->ctrl_context; in megasas_update_ext_vd_details()
5128 instance->supportmax256vd = in megasas_update_ext_vd_details()
5129 instance->ctrl_info_buf->adapterOperations3.supportMaxExtLDs; in megasas_update_ext_vd_details()
5131 if (instance->ctrl_info_buf->max_lds > 64) in megasas_update_ext_vd_details()
5132 instance->supportmax256vd = 1; in megasas_update_ext_vd_details()
5134 instance->drv_supported_vd_count = MEGASAS_MAX_LD_CHANNELS in megasas_update_ext_vd_details()
5136 instance->drv_supported_pd_count = MEGASAS_MAX_PD_CHANNELS in megasas_update_ext_vd_details()
5138 if (instance->supportmax256vd) { in megasas_update_ext_vd_details()
5139 instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES_EXT; in megasas_update_ext_vd_details()
5140 instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES; in megasas_update_ext_vd_details()
5142 instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES; in megasas_update_ext_vd_details()
5143 instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES; in megasas_update_ext_vd_details()
5146 dev_info(&instance->pdev->dev, in megasas_update_ext_vd_details()
5148 instance->ctrl_info_buf->adapterOperations3.supportMaxExtLDs ? 1 : 0, in megasas_update_ext_vd_details()
5149 instance->ctrl_info_buf->max_lds); in megasas_update_ext_vd_details()
5151 if (instance->max_raid_mapsize) { in megasas_update_ext_vd_details()
5152 ventura_map_sz = instance->max_raid_mapsize * in megasas_update_ext_vd_details()
5159 instance->fw_supported_vd_count); in megasas_update_ext_vd_details()
5165 if (instance->supportmax256vd) in megasas_update_ext_vd_details()
5181 void megasas_get_snapdump_properties(struct megasas_instance *instance) in megasas_get_snapdump_properties() argument
5189 ci = instance->snapdump_prop; in megasas_get_snapdump_properties()
5190 ci_h = instance->snapdump_prop_h; in megasas_get_snapdump_properties()
5195 cmd = megasas_get_cmd(instance); in megasas_get_snapdump_properties()
5198 dev_dbg(&instance->pdev->dev, "Failed to get a free cmd\n"); in megasas_get_snapdump_properties()
5216 megasas_set_dma_settings(instance, dcmd, ci_h, in megasas_get_snapdump_properties()
5219 if (!instance->mask_interrupts) { in megasas_get_snapdump_properties()
5220 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_get_snapdump_properties()
5223 ret = megasas_issue_polled(instance, cmd); in megasas_get_snapdump_properties()
5229 instance->snapdump_wait_time = in megasas_get_snapdump_properties()
5235 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_snapdump_properties()
5238 mutex_unlock(&instance->reset_mutex); in megasas_get_snapdump_properties()
5239 megasas_reset_fusion(instance->host, in megasas_get_snapdump_properties()
5241 mutex_lock(&instance->reset_mutex); in megasas_get_snapdump_properties()
5244 megaraid_sas_kill_hba(instance); in megasas_get_snapdump_properties()
5247 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_get_snapdump_properties()
5254 megasas_return_cmd(instance, cmd); in megasas_get_snapdump_properties()
5259 * @instance: Adapter soft state
5266 megasas_get_ctrl_info(struct megasas_instance *instance) in megasas_get_ctrl_info() argument
5274 ci = instance->ctrl_info_buf; in megasas_get_ctrl_info()
5275 ci_h = instance->ctrl_info_buf_h; in megasas_get_ctrl_info()
5277 cmd = megasas_get_cmd(instance); in megasas_get_ctrl_info()
5280 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to get a free cmd\n"); in megasas_get_ctrl_info()
5299 megasas_set_dma_settings(instance, dcmd, ci_h, in megasas_get_ctrl_info()
5302 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_ctrl_info()
5303 !instance->mask_interrupts) { in megasas_get_ctrl_info()
5304 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_get_ctrl_info()
5306 ret = megasas_issue_polled(instance, cmd); in megasas_get_ctrl_info()
5327 megasas_update_ext_vd_details(instance); in megasas_get_ctrl_info()
5328 instance->support_seqnum_jbod_fp = in megasas_get_ctrl_info()
5330 instance->support_morethan256jbod = in megasas_get_ctrl_info()
5332 instance->support_nvme_passthru = in megasas_get_ctrl_info()
5334 instance->support_pci_lane_margining = in megasas_get_ctrl_info()
5336 instance->task_abort_tmo = ci->TaskAbortTO; in megasas_get_ctrl_info()
5337 instance->max_reset_tmo = ci->MaxResetTO; in megasas_get_ctrl_info()
5340 instance->is_imr = (ci->memory_size ? 0 : 1); in megasas_get_ctrl_info()
5342 instance->snapdump_wait_time = in megasas_get_ctrl_info()
5346 instance->enable_fw_dev_list = in megasas_get_ctrl_info()
5349 dev_info(&instance->pdev->dev, in megasas_get_ctrl_info()
5351 instance->is_imr ? "iMR" : "MR", in megasas_get_ctrl_info()
5354 instance->disableOnlineCtrlReset = in megasas_get_ctrl_info()
5356 instance->secure_jbod_support = in megasas_get_ctrl_info()
5358 dev_info(&instance->pdev->dev, "Online Controller Reset(OCR)\t: %s\n", in megasas_get_ctrl_info()
5359 instance->disableOnlineCtrlReset ? "Disabled" : "Enabled"); in megasas_get_ctrl_info()
5360 dev_info(&instance->pdev->dev, "Secure JBOD support\t: %s\n", in megasas_get_ctrl_info()
5361 instance->secure_jbod_support ? "Yes" : "No"); in megasas_get_ctrl_info()
5362 dev_info(&instance->pdev->dev, "NVMe passthru support\t: %s\n", in megasas_get_ctrl_info()
5363 instance->support_nvme_passthru ? "Yes" : "No"); in megasas_get_ctrl_info()
5364 dev_info(&instance->pdev->dev, in megasas_get_ctrl_info()
5366 instance->task_abort_tmo, instance->max_reset_tmo); in megasas_get_ctrl_info()
5367 dev_info(&instance->pdev->dev, "JBOD sequence map support\t: %s\n", in megasas_get_ctrl_info()
5368 instance->support_seqnum_jbod_fp ? "Yes" : "No"); in megasas_get_ctrl_info()
5369 dev_info(&instance->pdev->dev, "PCI Lane Margining support\t: %s\n", in megasas_get_ctrl_info()
5370 instance->support_pci_lane_margining ? "Yes" : "No"); in megasas_get_ctrl_info()
5375 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_ctrl_info()
5378 mutex_unlock(&instance->reset_mutex); in megasas_get_ctrl_info()
5379 megasas_reset_fusion(instance->host, in megasas_get_ctrl_info()
5381 mutex_lock(&instance->reset_mutex); in megasas_get_ctrl_info()
5384 megaraid_sas_kill_hba(instance); in megasas_get_ctrl_info()
5387 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_get_ctrl_info()
5393 megaraid_sas_kill_hba(instance); in megasas_get_ctrl_info()
5399 megasas_return_cmd(instance, cmd); in megasas_get_ctrl_info()
5408 * @instance: Adapter soft state
5419 int megasas_set_crash_dump_params(struct megasas_instance *instance, in megasas_set_crash_dump_params() argument
5426 cmd = megasas_get_cmd(instance); in megasas_set_crash_dump_params()
5429 dev_err(&instance->pdev->dev, "Failed to get a free cmd\n"); in megasas_set_crash_dump_params()
5447 megasas_set_dma_settings(instance, dcmd, instance->crash_dump_h, in megasas_set_crash_dump_params()
5450 if ((instance->adapter_type != MFI_SERIES) && in megasas_set_crash_dump_params()
5451 !instance->mask_interrupts) in megasas_set_crash_dump_params()
5452 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_set_crash_dump_params()
5454 ret = megasas_issue_polled(instance, cmd); in megasas_set_crash_dump_params()
5457 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_set_crash_dump_params()
5460 megasas_reset_fusion(instance->host, in megasas_set_crash_dump_params()
5464 megaraid_sas_kill_hba(instance); in megasas_set_crash_dump_params()
5467 dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n", in megasas_set_crash_dump_params()
5472 megasas_return_cmd(instance, cmd); in megasas_set_crash_dump_params()
5479 * @instance: Adapter soft state
5484 megasas_issue_init_mfi(struct megasas_instance *instance) in megasas_issue_init_mfi() argument
5501 cmd = megasas_get_cmd(instance); in megasas_issue_init_mfi()
5515 initq_info->reply_queue_entries = cpu_to_le32(instance->max_fw_cmds + 1); in megasas_issue_init_mfi()
5516 initq_info->reply_queue_start_phys_addr_lo = cpu_to_le32(instance->reply_queue_h); in megasas_issue_init_mfi()
5518 initq_info->producer_index_phys_addr_lo = cpu_to_le32(instance->producer_h); in megasas_issue_init_mfi()
5519 initq_info->consumer_index_phys_addr_lo = cpu_to_le32(instance->consumer_h); in megasas_issue_init_mfi()
5533 instance->instancet->disable_intr(instance); in megasas_issue_init_mfi()
5539 if (megasas_issue_polled(instance, cmd)) { in megasas_issue_init_mfi()
5540 dev_err(&instance->pdev->dev, "Failed to init firmware\n"); in megasas_issue_init_mfi()
5541 megasas_return_cmd(instance, cmd); in megasas_issue_init_mfi()
5545 megasas_return_cmd(instance, cmd); in megasas_issue_init_mfi()
5554 megasas_init_adapter_mfi(struct megasas_instance *instance) in megasas_init_adapter_mfi() argument
5562 instance->max_fw_cmds = instance->instancet->read_fw_status_reg(instance) & 0x00FFFF; in megasas_init_adapter_mfi()
5568 instance->max_fw_cmds = instance->max_fw_cmds-1; in megasas_init_adapter_mfi()
5569 instance->max_mfi_cmds = instance->max_fw_cmds; in megasas_init_adapter_mfi()
5570 instance->max_num_sge = (instance->instancet->read_fw_status_reg(instance) & 0xFF0000) >> in megasas_init_adapter_mfi()
5576 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) || in megasas_init_adapter_mfi()
5577 (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY)) { in megasas_init_adapter_mfi()
5578 instance->max_scsi_cmds = (instance->max_fw_cmds - in megasas_init_adapter_mfi()
5580 sema_init(&instance->ioctl_sem, MEGASAS_SKINNY_INT_CMDS); in megasas_init_adapter_mfi()
5582 instance->max_scsi_cmds = (instance->max_fw_cmds - in megasas_init_adapter_mfi()
5584 sema_init(&instance->ioctl_sem, (MEGASAS_MFI_IOCTL_CMDS)); in megasas_init_adapter_mfi()
5587 instance->cur_can_queue = instance->max_scsi_cmds; in megasas_init_adapter_mfi()
5591 if (megasas_alloc_cmds(instance)) in megasas_init_adapter_mfi()
5604 reply_q_sz = context_sz * (instance->max_fw_cmds + 1); in megasas_init_adapter_mfi()
5606 instance->reply_queue = dma_alloc_coherent(&instance->pdev->dev, in megasas_init_adapter_mfi()
5607 reply_q_sz, &instance->reply_queue_h, GFP_KERNEL); in megasas_init_adapter_mfi()
5609 if (!instance->reply_queue) { in megasas_init_adapter_mfi()
5610 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Out of DMA mem for reply queue\n"); in megasas_init_adapter_mfi()
5614 if (megasas_issue_init_mfi(instance)) in megasas_init_adapter_mfi()
5617 if (megasas_get_ctrl_info(instance)) { in megasas_init_adapter_mfi()
5618 dev_err(&instance->pdev->dev, "(%d): Could get controller info " in megasas_init_adapter_mfi()
5619 "Fail from %s %d\n", instance->unique_id, in megasas_init_adapter_mfi()
5624 instance->fw_support_ieee = 0; in megasas_init_adapter_mfi()
5625 instance->fw_support_ieee = in megasas_init_adapter_mfi()
5626 (instance->instancet->read_fw_status_reg(instance) & in megasas_init_adapter_mfi()
5629 dev_notice(&instance->pdev->dev, "megasas_init_mfi: fw_support_ieee=%d", in megasas_init_adapter_mfi()
5630 instance->fw_support_ieee); in megasas_init_adapter_mfi()
5632 if (instance->fw_support_ieee) in megasas_init_adapter_mfi()
5633 instance->flag_ieee = 1; in megasas_init_adapter_mfi()
5639 dma_free_coherent(&instance->pdev->dev, reply_q_sz, in megasas_init_adapter_mfi()
5640 instance->reply_queue, instance->reply_queue_h); in megasas_init_adapter_mfi()
5642 megasas_free_cmds(instance); in megasas_init_adapter_mfi()
5649 void megasas_setup_irq_poll(struct megasas_instance *instance) in megasas_setup_irq_poll() argument
5654 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_setup_irq_poll()
5658 irq_ctx = &instance->irq_context[i]; in megasas_setup_irq_poll()
5659 irq_ctx->os_irq = pci_irq_vector(instance->pdev, i); in megasas_setup_irq_poll()
5662 instance->threshold_reply_count, in megasas_setup_irq_poll()
5669 * @instance: Adapter soft state
5676 megasas_setup_irqs_ioapic(struct megasas_instance *instance) in megasas_setup_irqs_ioapic() argument
5680 pdev = instance->pdev; in megasas_setup_irqs_ioapic()
5681 instance->irq_context[0].instance = instance; in megasas_setup_irqs_ioapic()
5682 instance->irq_context[0].MSIxIndex = 0; in megasas_setup_irqs_ioapic()
5683 snprintf(instance->irq_context->name, MEGASAS_MSIX_NAME_LEN, "%s%u", in megasas_setup_irqs_ioapic()
5684 "megasas", instance->host->host_no); in megasas_setup_irqs_ioapic()
5686 instance->instancet->service_isr, IRQF_SHARED, in megasas_setup_irqs_ioapic()
5687 instance->irq_context->name, &instance->irq_context[0])) { in megasas_setup_irqs_ioapic()
5688 dev_err(&instance->pdev->dev, in megasas_setup_irqs_ioapic()
5693 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_setup_irqs_ioapic()
5694 instance->low_latency_index_start = 0; in megasas_setup_irqs_ioapic()
5700 * @instance: Adapter soft state
5708 megasas_setup_irqs_msix(struct megasas_instance *instance, u8 is_probe) in megasas_setup_irqs_msix() argument
5713 pdev = instance->pdev; in megasas_setup_irqs_msix()
5716 for (i = 0; i < instance->msix_vectors; i++) { in megasas_setup_irqs_msix()
5717 instance->irq_context[i].instance = instance; in megasas_setup_irqs_msix()
5718 instance->irq_context[i].MSIxIndex = i; in megasas_setup_irqs_msix()
5719 snprintf(instance->irq_context[i].name, MEGASAS_MSIX_NAME_LEN, "%s%u-msix%u", in megasas_setup_irqs_msix()
5720 "megasas", instance->host->host_no, i); in megasas_setup_irqs_msix()
5722 instance->instancet->service_isr, 0, instance->irq_context[i].name, in megasas_setup_irqs_msix()
5723 &instance->irq_context[i])) { in megasas_setup_irqs_msix()
5724 dev_err(&instance->pdev->dev, in megasas_setup_irqs_msix()
5727 if (j < instance->low_latency_index_start) in megasas_setup_irqs_msix()
5731 &instance->irq_context[j]); in megasas_setup_irqs_msix()
5734 instance->msix_vectors = 0; in megasas_setup_irqs_msix()
5735 instance->msix_load_balance = false; in megasas_setup_irqs_msix()
5737 pci_free_irq_vectors(instance->pdev); in megasas_setup_irqs_msix()
5738 return megasas_setup_irqs_ioapic(instance); in megasas_setup_irqs_msix()
5750 * @instance: Adapter soft state
5754 megasas_destroy_irqs(struct megasas_instance *instance) { in megasas_destroy_irqs() argument
5760 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_destroy_irqs()
5761 if (instance->adapter_type != MFI_SERIES) { in megasas_destroy_irqs()
5763 irq_ctx = &instance->irq_context[i]; in megasas_destroy_irqs()
5768 if (instance->msix_vectors) in megasas_destroy_irqs()
5769 for (i = 0; i < instance->msix_vectors; i++) { in megasas_destroy_irqs()
5770 if (i < instance->low_latency_index_start) in megasas_destroy_irqs()
5772 pci_irq_vector(instance->pdev, i), NULL); in megasas_destroy_irqs()
5773 free_irq(pci_irq_vector(instance->pdev, i), in megasas_destroy_irqs()
5774 &instance->irq_context[i]); in megasas_destroy_irqs()
5777 free_irq(pci_irq_vector(instance->pdev, 0), in megasas_destroy_irqs()
5778 &instance->irq_context[0]); in megasas_destroy_irqs()
5783 * @instance: Adapter soft state
5788 megasas_setup_jbod_map(struct megasas_instance *instance) in megasas_setup_jbod_map() argument
5791 struct fusion_context *fusion = instance->ctrl_context; in megasas_setup_jbod_map()
5797 instance->use_seqnum_jbod_fp = in megasas_setup_jbod_map()
5798 instance->support_seqnum_jbod_fp; in megasas_setup_jbod_map()
5800 !instance->support_seqnum_jbod_fp) { in megasas_setup_jbod_map()
5801 dev_info(&instance->pdev->dev, in megasas_setup_jbod_map()
5804 instance->use_seqnum_jbod_fp = false; in megasas_setup_jbod_map()
5813 (&instance->pdev->dev, pd_seq_map_sz, in megasas_setup_jbod_map()
5816 dev_err(&instance->pdev->dev, in megasas_setup_jbod_map()
5820 dma_free_coherent(&instance->pdev->dev, in megasas_setup_jbod_map()
5825 instance->use_seqnum_jbod_fp = false; in megasas_setup_jbod_map()
5831 if (!megasas_sync_pd_seq_num(instance, false) && in megasas_setup_jbod_map()
5832 !megasas_sync_pd_seq_num(instance, true)) in megasas_setup_jbod_map()
5833 instance->use_seqnum_jbod_fp = true; in megasas_setup_jbod_map()
5835 instance->use_seqnum_jbod_fp = false; in megasas_setup_jbod_map()
5838 static void megasas_setup_reply_map(struct megasas_instance *instance) in megasas_setup_reply_map() argument
5843 low_latency_index_start = instance->low_latency_index_start; in megasas_setup_reply_map()
5845 for (queue = low_latency_index_start; queue < instance->msix_vectors; queue++) { in megasas_setup_reply_map()
5846 mask = pci_irq_get_affinity(instance->pdev, queue); in megasas_setup_reply_map()
5851 instance->reply_map[cpu] = queue; in megasas_setup_reply_map()
5858 instance->reply_map[cpu] = queue; in megasas_setup_reply_map()
5859 if (queue == (instance->msix_vectors - 1)) in megasas_setup_reply_map()
5868 * @instance: Adapter soft state
5876 int megasas_get_device_list(struct megasas_instance *instance) in megasas_get_device_list() argument
5878 if (instance->enable_fw_dev_list) { in megasas_get_device_list()
5879 if (megasas_host_device_list_query(instance, true)) in megasas_get_device_list()
5882 if (megasas_get_pd_list(instance) < 0) { in megasas_get_device_list()
5883 dev_err(&instance->pdev->dev, "failed to get PD list\n"); in megasas_get_device_list()
5887 if (megasas_ld_list_query(instance, in megasas_get_device_list()
5889 dev_err(&instance->pdev->dev, "failed to get LD list\n"); in megasas_get_device_list()
5900 * @instance: Adapter soft state
5904 megasas_set_high_iops_queue_affinity_and_hint(struct megasas_instance *instance) in megasas_set_high_iops_queue_affinity_and_hint() argument
5910 if (instance->perf_mode == MR_BALANCED_PERF_MODE) { in megasas_set_high_iops_queue_affinity_and_hint()
5911 int nid = dev_to_node(&instance->pdev->dev); in megasas_set_high_iops_queue_affinity_and_hint()
5917 for (i = 0; i < instance->low_latency_index_start; i++) { in megasas_set_high_iops_queue_affinity_and_hint()
5918 irq = pci_irq_vector(instance->pdev, i); in megasas_set_high_iops_queue_affinity_and_hint()
5925 __megasas_alloc_irq_vectors(struct megasas_instance *instance) in __megasas_alloc_irq_vectors() argument
5928 struct irq_affinity desc = { .pre_vectors = instance->low_latency_index_start }; in __megasas_alloc_irq_vectors()
5933 if (instance->smp_affinity_enable) in __megasas_alloc_irq_vectors()
5941 i = pci_alloc_irq_vectors_affinity(instance->pdev, in __megasas_alloc_irq_vectors()
5942 instance->low_latency_index_start, in __megasas_alloc_irq_vectors()
5943 instance->msix_vectors - instance->iopoll_q_count, irq_flags, descp); in __megasas_alloc_irq_vectors()
5950 * @instance: Adapter soft state
5954 megasas_alloc_irq_vectors(struct megasas_instance *instance) in megasas_alloc_irq_vectors() argument
5959 instance->iopoll_q_count = 0; in megasas_alloc_irq_vectors()
5960 if ((instance->adapter_type != MFI_SERIES) && in megasas_alloc_irq_vectors()
5963 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_alloc_irq_vectors()
5964 instance->low_latency_index_start = 1; in megasas_alloc_irq_vectors()
5967 if (instance->msix_vectors > (poll_queues + 2)) in megasas_alloc_irq_vectors()
5968 instance->iopoll_q_count = poll_queues; in megasas_alloc_irq_vectors()
5970 instance->iopoll_q_count = 0; in megasas_alloc_irq_vectors()
5972 num_msix_req = num_online_cpus() + instance->low_latency_index_start; in megasas_alloc_irq_vectors()
5973 instance->msix_vectors = min(num_msix_req, in megasas_alloc_irq_vectors()
5974 instance->msix_vectors); in megasas_alloc_irq_vectors()
5978 i = __megasas_alloc_irq_vectors(instance); in megasas_alloc_irq_vectors()
5980 if (((instance->perf_mode == MR_BALANCED_PERF_MODE) in megasas_alloc_irq_vectors()
5981 || instance->iopoll_q_count) && in megasas_alloc_irq_vectors()
5982 (i != (instance->msix_vectors - instance->iopoll_q_count))) { in megasas_alloc_irq_vectors()
5983 if (instance->msix_vectors) in megasas_alloc_irq_vectors()
5984 pci_free_irq_vectors(instance->pdev); in megasas_alloc_irq_vectors()
5986 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_alloc_irq_vectors()
5987 instance->low_latency_index_start = 1; in megasas_alloc_irq_vectors()
5988 num_msix_req = num_online_cpus() + instance->low_latency_index_start; in megasas_alloc_irq_vectors()
5990 instance->msix_vectors = min(num_msix_req, in megasas_alloc_irq_vectors()
5991 instance->msix_vectors); in megasas_alloc_irq_vectors()
5993 instance->iopoll_q_count = 0; in megasas_alloc_irq_vectors()
5994 i = __megasas_alloc_irq_vectors(instance); in megasas_alloc_irq_vectors()
5998 dev_info(&instance->pdev->dev, in megasas_alloc_irq_vectors()
6000 instance->msix_vectors - instance->iopoll_q_count, in megasas_alloc_irq_vectors()
6001 i, instance->iopoll_q_count); in megasas_alloc_irq_vectors()
6004 instance->msix_vectors = i; in megasas_alloc_irq_vectors()
6006 instance->msix_vectors = 0; in megasas_alloc_irq_vectors()
6008 if (instance->smp_affinity_enable) in megasas_alloc_irq_vectors()
6009 megasas_set_high_iops_queue_affinity_and_hint(instance); in megasas_alloc_irq_vectors()
6014 * @instance: Adapter soft state
6019 static int megasas_init_fw(struct megasas_instance *instance) in megasas_init_fw() argument
6035 fusion = instance->ctrl_context; in megasas_init_fw()
6038 bar_list = pci_select_bars(instance->pdev, IORESOURCE_MEM); in megasas_init_fw()
6039 instance->bar = find_first_bit(&bar_list, BITS_PER_LONG); in megasas_init_fw()
6040 if (pci_request_selected_regions(instance->pdev, 1<<instance->bar, in megasas_init_fw()
6042 dev_printk(KERN_DEBUG, &instance->pdev->dev, "IO memory region busy!\n"); in megasas_init_fw()
6046 base_addr = pci_resource_start(instance->pdev, instance->bar); in megasas_init_fw()
6047 instance->reg_set = ioremap(base_addr, 8192); in megasas_init_fw()
6049 if (!instance->reg_set) { in megasas_init_fw()
6050 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to map IO mem\n"); in megasas_init_fw()
6055 dev_printk(KERN_DEBUG, &instance->pdev->dev, in megasas_init_fw()
6057 instance->bar, base_addr_phys, instance->reg_set); in megasas_init_fw()
6059 if (instance->adapter_type != MFI_SERIES) in megasas_init_fw()
6060 instance->instancet = &megasas_instance_template_fusion; in megasas_init_fw()
6062 switch (instance->pdev->device) { in megasas_init_fw()
6065 instance->instancet = &megasas_instance_template_ppc; in megasas_init_fw()
6069 instance->instancet = &megasas_instance_template_gen2; in megasas_init_fw()
6073 instance->instancet = &megasas_instance_template_skinny; in megasas_init_fw()
6078 instance->instancet = &megasas_instance_template_xscale; in megasas_init_fw()
6079 instance->pd_list_not_supported = 1; in megasas_init_fw()
6084 if (megasas_transition_to_ready(instance, 0)) { in megasas_init_fw()
6085 dev_info(&instance->pdev->dev, in megasas_init_fw()
6088 if (instance->adapter_type != MFI_SERIES) { in megasas_init_fw()
6089 status_reg = instance->instancet->read_fw_status_reg( in megasas_init_fw()
6090 instance); in megasas_init_fw()
6093 (instance, true, 0) == FAILED) in megasas_init_fw()
6099 atomic_set(&instance->fw_reset_no_pci_access, 1); in megasas_init_fw()
6100 instance->instancet->adp_reset in megasas_init_fw()
6101 (instance, instance->reg_set); in megasas_init_fw()
6102 atomic_set(&instance->fw_reset_no_pci_access, 0); in megasas_init_fw()
6107 if (megasas_transition_to_ready(instance, 0)) in megasas_init_fw()
6111 dev_info(&instance->pdev->dev, in megasas_init_fw()
6116 megasas_init_ctrl_params(instance); in megasas_init_fw()
6118 if (megasas_set_dma_mask(instance)) in megasas_init_fw()
6121 if (megasas_alloc_ctrl_mem(instance)) in megasas_init_fw()
6124 if (megasas_alloc_ctrl_dma_buffers(instance)) in megasas_init_fw()
6127 fusion = instance->ctrl_context; in megasas_init_fw()
6129 if (instance->adapter_type >= VENTURA_SERIES) { in megasas_init_fw()
6131 megasas_readl(instance, in megasas_init_fw()
6132 &instance->reg_set->outbound_scratch_pad_2); in megasas_init_fw()
6133 instance->max_raid_mapsize = ((scratch_pad_2 >> in megasas_init_fw()
6138 instance->enable_sdev_max_qd = enable_sdev_max_qd; in megasas_init_fw()
6140 switch (instance->adapter_type) { in megasas_init_fw()
6152 msix_enable = (instance->instancet->read_fw_status_reg(instance) & in megasas_init_fw()
6157 (instance, &instance->reg_set->outbound_scratch_pad_1); in megasas_init_fw()
6160 if (instance->adapter_type == THUNDERBOLT_SERIES) { in megasas_init_fw()
6162 instance->msix_vectors = (scratch_pad_1 in megasas_init_fw()
6165 instance->msix_vectors = ((scratch_pad_1 in megasas_init_fw()
6177 switch (instance->adapter_type) { in megasas_init_fw()
6179 if (instance->msix_vectors > 8) in megasas_init_fw()
6180 instance->msix_combined = true; in megasas_init_fw()
6184 if (instance->msix_vectors > 16) in megasas_init_fw()
6185 instance->msix_combined = true; in megasas_init_fw()
6190 instance->is_rdpq = (scratch_pad_1 & MR_RDPQ_MODE_OFFSET) ? in megasas_init_fw()
6193 if (instance->adapter_type >= INVADER_SERIES && in megasas_init_fw()
6194 !instance->msix_combined) { in megasas_init_fw()
6195 instance->msix_load_balance = true; in megasas_init_fw()
6196 instance->smp_affinity_enable = false; in megasas_init_fw()
6204 instance->reply_post_host_index_addr[loop] = in megasas_init_fw()
6206 ((u8 __iomem *)instance->reg_set + in megasas_init_fw()
6212 dev_info(&instance->pdev->dev, in megasas_init_fw()
6214 instance->msix_vectors); in megasas_init_fw()
6216 instance->msix_vectors = min(msix_vectors, in megasas_init_fw()
6217 instance->msix_vectors); in megasas_init_fw()
6219 instance->msix_vectors = 1; in megasas_init_fw()
6245 (instance->msix_vectors == MEGASAS_MAX_MSIX_QUEUES)) in megasas_init_fw()
6246 instance->perf_mode = MR_BALANCED_PERF_MODE; in megasas_init_fw()
6248 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_init_fw()
6251 if (instance->adapter_type == AERO_SERIES) { in megasas_init_fw()
6252 pcie_capability_read_word(instance->pdev, PCI_EXP_LNKSTA, &lnksta); in megasas_init_fw()
6260 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_init_fw()
6272 instance->perf_mode = perf_mode; in megasas_init_fw()
6278 instance->perf_mode = MR_LATENCY_PERF_MODE; in megasas_init_fw()
6282 if (instance->perf_mode == MR_BALANCED_PERF_MODE) in megasas_init_fw()
6283 instance->low_latency_index_start = in megasas_init_fw()
6286 instance->low_latency_index_start = 1; in megasas_init_fw()
6288 num_msix_req = num_online_cpus() + instance->low_latency_index_start; in megasas_init_fw()
6290 instance->msix_vectors = min(num_msix_req, in megasas_init_fw()
6291 instance->msix_vectors); in megasas_init_fw()
6293 megasas_alloc_irq_vectors(instance); in megasas_init_fw()
6294 if (!instance->msix_vectors) in megasas_init_fw()
6295 instance->msix_load_balance = false; in megasas_init_fw()
6301 if (instance->msix_combined) { in megasas_init_fw()
6302 instance->reply_post_host_index_addr[0] = in megasas_init_fw()
6303 (u32 *)((u8 *)instance->reg_set + in megasas_init_fw()
6306 instance->reply_post_host_index_addr[0] = in megasas_init_fw()
6307 (u32 *)((u8 *)instance->reg_set + in megasas_init_fw()
6311 if (!instance->msix_vectors) { in megasas_init_fw()
6312 i = pci_alloc_irq_vectors(instance->pdev, 1, 1, PCI_IRQ_LEGACY); in megasas_init_fw()
6317 megasas_setup_reply_map(instance); in megasas_init_fw()
6319 dev_info(&instance->pdev->dev, in megasas_init_fw()
6321 instance->msix_vectors, (unsigned int)num_online_cpus()); in megasas_init_fw()
6322 dev_info(&instance->pdev->dev, in megasas_init_fw()
6323 "RDPQ mode\t: (%s)\n", instance->is_rdpq ? "enabled" : "disabled"); in megasas_init_fw()
6325 tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet, in megasas_init_fw()
6326 (unsigned long)instance); in megasas_init_fw()
6332 instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES; in megasas_init_fw()
6333 instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES; in megasas_init_fw()
6335 if (instance->instancet->init_adapter(instance)) in megasas_init_fw()
6338 if (instance->adapter_type >= VENTURA_SERIES) { in megasas_init_fw()
6340 megasas_readl(instance, in megasas_init_fw()
6341 &instance->reg_set->outbound_scratch_pad_3); in megasas_init_fw()
6344 instance->nvme_page_size = in megasas_init_fw()
6347 dev_info(&instance->pdev->dev, in megasas_init_fw()
6348 "NVME page size\t: (%d)\n", instance->nvme_page_size); in megasas_init_fw()
6351 if (instance->msix_vectors ? in megasas_init_fw()
6352 megasas_setup_irqs_msix(instance, 1) : in megasas_init_fw()
6353 megasas_setup_irqs_ioapic(instance)) in megasas_init_fw()
6356 if (instance->adapter_type != MFI_SERIES) in megasas_init_fw()
6357 megasas_setup_irq_poll(instance); in megasas_init_fw()
6359 instance->instancet->enable_intr(instance); in megasas_init_fw()
6361 dev_info(&instance->pdev->dev, "INIT adapter done\n"); in megasas_init_fw()
6363 megasas_setup_jbod_map(instance); in megasas_init_fw()
6365 if (megasas_get_device_list(instance) != SUCCESS) { in megasas_init_fw()
6366 dev_err(&instance->pdev->dev, in megasas_init_fw()
6373 if (instance->adapter_type >= VENTURA_SERIES) { in megasas_init_fw()
6379 dev_err(&instance->pdev->dev, in megasas_init_fw()
6388 dev_err(&instance->pdev->dev, in megasas_init_fw()
6411 ctrl_info = instance->ctrl_info_buf; in megasas_init_fw()
6419 instance->peerIsPresent = ctrl_info->cluster.peerIsPresent; in megasas_init_fw()
6420 instance->passive = ctrl_info->cluster.passive; in megasas_init_fw()
6421 memcpy(instance->clusterId, ctrl_info->clusterId, sizeof(instance->clusterId)); in megasas_init_fw()
6422 instance->UnevenSpanSupport = in megasas_init_fw()
6424 if (instance->UnevenSpanSupport) { in megasas_init_fw()
6425 struct fusion_context *fusion = instance->ctrl_context; in megasas_init_fw()
6426 if (MR_ValidateMapInfo(instance, instance->map_id)) in megasas_init_fw()
6433 instance->requestorId = ctrl_info->iov.requestorId; in megasas_init_fw()
6434 if (instance->pdev->device == PCI_DEVICE_ID_LSI_PLASMA) { in megasas_init_fw()
6436 instance->PlasmaFW111 = 1; in megasas_init_fw()
6438 dev_info(&instance->pdev->dev, "SR-IOV: firmware type: %s\n", in megasas_init_fw()
6439 instance->PlasmaFW111 ? "1.11" : "new"); in megasas_init_fw()
6441 if (instance->PlasmaFW111) { in megasas_init_fw()
6444 instance->requestorId = iovPtr->requestorId; in megasas_init_fw()
6447 dev_info(&instance->pdev->dev, "SRIOV: VF requestorId %d\n", in megasas_init_fw()
6448 instance->requestorId); in megasas_init_fw()
6451 instance->crash_dump_fw_support = in megasas_init_fw()
6453 instance->crash_dump_drv_support = in megasas_init_fw()
6454 (instance->crash_dump_fw_support && in megasas_init_fw()
6455 instance->crash_dump_buf); in megasas_init_fw()
6456 if (instance->crash_dump_drv_support) in megasas_init_fw()
6457 megasas_set_crash_dump_params(instance, in megasas_init_fw()
6461 if (instance->crash_dump_buf) in megasas_init_fw()
6462 dma_free_coherent(&instance->pdev->dev, in megasas_init_fw()
6464 instance->crash_dump_buf, in megasas_init_fw()
6465 instance->crash_dump_h); in megasas_init_fw()
6466 instance->crash_dump_buf = NULL; in megasas_init_fw()
6469 if (instance->snapdump_wait_time) { in megasas_init_fw()
6470 megasas_get_snapdump_properties(instance); in megasas_init_fw()
6471 dev_info(&instance->pdev->dev, "Snap dump wait time\t: %d\n", in megasas_init_fw()
6472 instance->snapdump_wait_time); in megasas_init_fw()
6475 dev_info(&instance->pdev->dev, in megasas_init_fw()
6481 dev_info(&instance->pdev->dev, "unevenspan support : %s\n", in megasas_init_fw()
6482 instance->UnevenSpanSupport ? "yes" : "no"); in megasas_init_fw()
6483 dev_info(&instance->pdev->dev, "firmware crash dump : %s\n", in megasas_init_fw()
6484 instance->crash_dump_drv_support ? "yes" : "no"); in megasas_init_fw()
6485 dev_info(&instance->pdev->dev, "JBOD sequence map : %s\n", in megasas_init_fw()
6486 instance->use_seqnum_jbod_fp ? "enabled" : "disabled"); in megasas_init_fw()
6488 instance->max_sectors_per_req = instance->max_num_sge * in megasas_init_fw()
6490 if (tmp_sectors && (instance->max_sectors_per_req > tmp_sectors)) in megasas_init_fw()
6491 instance->max_sectors_per_req = tmp_sectors; in megasas_init_fw()
6495 throttlequeuedepth <= instance->max_scsi_cmds) in megasas_init_fw()
6496 instance->throttlequeuedepth = throttlequeuedepth; in megasas_init_fw()
6498 instance->throttlequeuedepth = in megasas_init_fw()
6509 if (instance->requestorId) { in megasas_init_fw()
6510 if (!megasas_sriov_start_heartbeat(instance, 1)) { in megasas_init_fw()
6511 megasas_start_timer(instance); in megasas_init_fw()
6513 instance->skip_heartbeat_timer_del = 1; in megasas_init_fw()
6523 if (instance->adapter_type != MFI_SERIES) in megasas_init_fw()
6524 if (megasas_fusion_start_watchdog(instance) != SUCCESS) in megasas_init_fw()
6530 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_init_fw()
6531 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_init_fw()
6533 instance->instancet->disable_intr(instance); in megasas_init_fw()
6534 megasas_destroy_irqs(instance); in megasas_init_fw()
6536 if (instance->msix_vectors) in megasas_init_fw()
6537 pci_free_irq_vectors(instance->pdev); in megasas_init_fw()
6538 instance->msix_vectors = 0; in megasas_init_fw()
6540 megasas_free_ctrl_dma_buffers(instance); in megasas_init_fw()
6541 megasas_free_ctrl_mem(instance); in megasas_init_fw()
6543 iounmap(instance->reg_set); in megasas_init_fw()
6546 pci_release_selected_regions(instance->pdev, 1<<instance->bar); in megasas_init_fw()
6548 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_init_fw()
6555 * @instance: Adapter soft state
6557 static void megasas_release_mfi(struct megasas_instance *instance) in megasas_release_mfi() argument
6559 u32 reply_q_sz = sizeof(u32) *(instance->max_mfi_cmds + 1); in megasas_release_mfi()
6561 if (instance->reply_queue) in megasas_release_mfi()
6562 dma_free_coherent(&instance->pdev->dev, reply_q_sz, in megasas_release_mfi()
6563 instance->reply_queue, instance->reply_queue_h); in megasas_release_mfi()
6565 megasas_free_cmds(instance); in megasas_release_mfi()
6567 iounmap(instance->reg_set); in megasas_release_mfi()
6569 pci_release_selected_regions(instance->pdev, 1<<instance->bar); in megasas_release_mfi()
6574 * @instance: Adapter soft state
6585 megasas_get_seq_num(struct megasas_instance *instance, in megasas_get_seq_num() argument
6594 cmd = megasas_get_cmd(instance); in megasas_get_seq_num()
6601 el_info = dma_alloc_coherent(&instance->pdev->dev, in megasas_get_seq_num()
6605 megasas_return_cmd(instance, cmd); in megasas_get_seq_num()
6620 megasas_set_dma_settings(instance, dcmd, el_info_h, in megasas_get_seq_num()
6623 ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS); in megasas_get_seq_num()
6625 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_get_seq_num()
6640 dma_free_coherent(&instance->pdev->dev, in megasas_get_seq_num()
6644 megasas_return_cmd(instance, cmd); in megasas_get_seq_num()
6651 * @instance: Adapter soft state
6659 megasas_register_aen(struct megasas_instance *instance, u32 seq_num, in megasas_register_aen() argument
6683 if (instance->aen_cmd) { in megasas_register_aen()
6686 le32_to_cpu(instance->aen_cmd->frame->dcmd.mbox.w[1]); in megasas_register_aen()
6690 dev_info(&instance->pdev->dev, in megasas_register_aen()
6720 instance->aen_cmd->abort_aen = 1; in megasas_register_aen()
6721 ret_val = megasas_issue_blocked_abort_cmd(instance, in megasas_register_aen()
6722 instance-> in megasas_register_aen()
6726 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to abort " in megasas_register_aen()
6733 cmd = megasas_get_cmd(instance); in megasas_register_aen()
6740 memset(instance->evt_detail, 0, sizeof(struct megasas_evt_detail)); in megasas_register_aen()
6756 instance->last_seq_num = seq_num; in megasas_register_aen()
6759 megasas_set_dma_settings(instance, dcmd, instance->evt_detail_h, in megasas_register_aen()
6762 if (instance->aen_cmd != NULL) { in megasas_register_aen()
6763 megasas_return_cmd(instance, cmd); in megasas_register_aen()
6772 instance->aen_cmd = cmd; in megasas_register_aen()
6777 instance->instancet->issue_dcmd(instance, cmd); in megasas_register_aen()
6795 * @instance: Adapter soft state
6801 megasas_get_target_prop(struct megasas_instance *instance, in megasas_get_target_prop() argument
6810 cmd = megasas_get_cmd(instance); in megasas_get_target_prop()
6813 dev_err(&instance->pdev->dev, in megasas_get_target_prop()
6820 memset(instance->tgt_prop, 0, sizeof(*instance->tgt_prop)); in megasas_get_target_prop()
6835 megasas_set_dma_settings(instance, dcmd, instance->tgt_prop_h, in megasas_get_target_prop()
6838 if ((instance->adapter_type != MFI_SERIES) && in megasas_get_target_prop()
6839 !instance->mask_interrupts) in megasas_get_target_prop()
6840 ret = megasas_issue_blocked_cmd(instance, in megasas_get_target_prop()
6843 ret = megasas_issue_polled(instance, cmd); in megasas_get_target_prop()
6847 switch (dcmd_timeout_ocr_possible(instance)) { in megasas_get_target_prop()
6850 mutex_unlock(&instance->reset_mutex); in megasas_get_target_prop()
6851 megasas_reset_fusion(instance->host, in megasas_get_target_prop()
6853 mutex_lock(&instance->reset_mutex); in megasas_get_target_prop()
6856 megaraid_sas_kill_hba(instance); in megasas_get_target_prop()
6859 dev_info(&instance->pdev->dev, in megasas_get_target_prop()
6867 megasas_return_cmd(instance, cmd); in megasas_get_target_prop()
6870 dev_err(&instance->pdev->dev, in megasas_get_target_prop()
6879 * @instance: Adapter soft state
6881 static int megasas_start_aen(struct megasas_instance *instance) in megasas_start_aen() argument
6891 if (megasas_get_seq_num(instance, &eli)) in megasas_start_aen()
6901 return megasas_register_aen(instance, in megasas_start_aen()
6908 * @instance: Adapter soft state
6910 static int megasas_io_attach(struct megasas_instance *instance) in megasas_io_attach() argument
6912 struct Scsi_Host *host = instance->host; in megasas_io_attach()
6917 host->unique_id = instance->unique_id; in megasas_io_attach()
6918 host->can_queue = instance->max_scsi_cmds; in megasas_io_attach()
6919 host->this_id = instance->init_id; in megasas_io_attach()
6920 host->sg_tablesize = instance->max_num_sge; in megasas_io_attach()
6922 if (instance->fw_support_ieee) in megasas_io_attach()
6923 instance->max_sectors_per_req = MEGASAS_MAX_SECTORS_IEEE; in megasas_io_attach()
6928 if (max_sectors && max_sectors < instance->max_sectors_per_req) in megasas_io_attach()
6929 instance->max_sectors_per_req = max_sectors; in megasas_io_attach()
6932 if (((instance->pdev->device == in megasas_io_attach()
6934 (instance->pdev->device == in megasas_io_attach()
6937 instance->max_sectors_per_req = max_sectors; in megasas_io_attach()
6939 dev_info(&instance->pdev->dev, "max_sectors should be > 0" in megasas_io_attach()
6941 instance->max_sectors_per_req); in megasas_io_attach()
6946 host->max_sectors = instance->max_sectors_per_req; in megasas_io_attach()
6961 if ((instance->adapter_type != MFI_SERIES) && in megasas_io_attach()
6962 (instance->msix_vectors > instance->low_latency_index_start) && in megasas_io_attach()
6964 instance->smp_affinity_enable) { in megasas_io_attach()
6966 host->nr_hw_queues = instance->msix_vectors - in megasas_io_attach()
6967 instance->low_latency_index_start + instance->iopoll_q_count; in megasas_io_attach()
6968 if (instance->iopoll_q_count) in megasas_io_attach()
6971 instance->iopoll_q_count = 0; in megasas_io_attach()
6974 dev_info(&instance->pdev->dev, in megasas_io_attach()
6976 "hw_queues = %d poll_queues %d\n", instance->max_fw_cmds, in megasas_io_attach()
6977 host->nr_hw_queues - instance->iopoll_q_count, in megasas_io_attach()
6978 instance->iopoll_q_count); in megasas_io_attach()
6982 if (scsi_add_host(host, &instance->pdev->dev)) { in megasas_io_attach()
6983 dev_err(&instance->pdev->dev, in megasas_io_attach()
6995 * @instance: Adapter soft state
7010 megasas_set_dma_mask(struct megasas_instance *instance) in megasas_set_dma_mask() argument
7016 pdev = instance->pdev; in megasas_set_dma_mask()
7017 consistent_mask = (instance->adapter_type >= VENTURA_SERIES) ? in megasas_set_dma_mask()
7033 (instance, &instance->reg_set->outbound_scratch_pad_1); in megasas_set_dma_mask()
7045 instance->consistent_mask_64bit = false; in megasas_set_dma_mask()
7047 instance->consistent_mask_64bit = true; in megasas_set_dma_mask()
7051 (instance->consistent_mask_64bit ? "63" : "32")); in megasas_set_dma_mask()
7072 * @instance: Adapter soft state
7075 static inline void megasas_set_adapter_type(struct megasas_instance *instance) in megasas_set_adapter_type() argument
7077 if ((instance->pdev->vendor == PCI_VENDOR_ID_DELL) && in megasas_set_adapter_type()
7078 (instance->pdev->device == PCI_DEVICE_ID_DELL_PERC5)) { in megasas_set_adapter_type()
7079 instance->adapter_type = MFI_SERIES; in megasas_set_adapter_type()
7081 switch (instance->pdev->device) { in megasas_set_adapter_type()
7086 instance->adapter_type = AERO_SERIES; in megasas_set_adapter_type()
7094 instance->adapter_type = VENTURA_SERIES; in megasas_set_adapter_type()
7098 instance->adapter_type = THUNDERBOLT_SERIES; in megasas_set_adapter_type()
7106 instance->adapter_type = INVADER_SERIES; in megasas_set_adapter_type()
7109 instance->adapter_type = MFI_SERIES; in megasas_set_adapter_type()
7115 static inline int megasas_alloc_mfi_ctrl_mem(struct megasas_instance *instance) in megasas_alloc_mfi_ctrl_mem() argument
7117 instance->producer = dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_mfi_ctrl_mem()
7118 sizeof(u32), &instance->producer_h, GFP_KERNEL); in megasas_alloc_mfi_ctrl_mem()
7119 instance->consumer = dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_mfi_ctrl_mem()
7120 sizeof(u32), &instance->consumer_h, GFP_KERNEL); in megasas_alloc_mfi_ctrl_mem()
7122 if (!instance->producer || !instance->consumer) { in megasas_alloc_mfi_ctrl_mem()
7123 dev_err(&instance->pdev->dev, in megasas_alloc_mfi_ctrl_mem()
7128 *instance->producer = 0; in megasas_alloc_mfi_ctrl_mem()
7129 *instance->consumer = 0; in megasas_alloc_mfi_ctrl_mem()
7140 * @instance: Adapter soft state
7143 static int megasas_alloc_ctrl_mem(struct megasas_instance *instance) in megasas_alloc_ctrl_mem() argument
7145 instance->reply_map = kcalloc(nr_cpu_ids, sizeof(unsigned int), in megasas_alloc_ctrl_mem()
7147 if (!instance->reply_map) in megasas_alloc_ctrl_mem()
7150 switch (instance->adapter_type) { in megasas_alloc_ctrl_mem()
7152 if (megasas_alloc_mfi_ctrl_mem(instance)) in megasas_alloc_ctrl_mem()
7159 if (megasas_alloc_fusion_context(instance)) in megasas_alloc_ctrl_mem()
7171 * @instance - Adapter soft instance
7174 static inline void megasas_free_ctrl_mem(struct megasas_instance *instance) in megasas_free_ctrl_mem() argument
7176 kfree(instance->reply_map); in megasas_free_ctrl_mem()
7177 if (instance->adapter_type == MFI_SERIES) { in megasas_free_ctrl_mem()
7178 if (instance->producer) in megasas_free_ctrl_mem()
7179 dma_free_coherent(&instance->pdev->dev, sizeof(u32), in megasas_free_ctrl_mem()
7180 instance->producer, in megasas_free_ctrl_mem()
7181 instance->producer_h); in megasas_free_ctrl_mem()
7182 if (instance->consumer) in megasas_free_ctrl_mem()
7183 dma_free_coherent(&instance->pdev->dev, sizeof(u32), in megasas_free_ctrl_mem()
7184 instance->consumer, in megasas_free_ctrl_mem()
7185 instance->consumer_h); in megasas_free_ctrl_mem()
7187 megasas_free_fusion_context(instance); in megasas_free_ctrl_mem()
7195 * @instance: Adapter soft instance
7200 int megasas_alloc_ctrl_dma_buffers(struct megasas_instance *instance) in megasas_alloc_ctrl_dma_buffers() argument
7202 struct pci_dev *pdev = instance->pdev; in megasas_alloc_ctrl_dma_buffers()
7203 struct fusion_context *fusion = instance->ctrl_context; in megasas_alloc_ctrl_dma_buffers()
7205 instance->evt_detail = dma_alloc_coherent(&pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7207 &instance->evt_detail_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7209 if (!instance->evt_detail) { in megasas_alloc_ctrl_dma_buffers()
7210 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7228 instance->snapdump_prop = dma_alloc_coherent(&pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7230 &instance->snapdump_prop_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7232 if (!instance->snapdump_prop) in megasas_alloc_ctrl_dma_buffers()
7236 instance->host_device_list_buf = dma_alloc_coherent(&pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7238 &instance->host_device_list_buf_h, in megasas_alloc_ctrl_dma_buffers()
7241 if (!instance->host_device_list_buf) { in megasas_alloc_ctrl_dma_buffers()
7249 instance->pd_list_buf = in megasas_alloc_ctrl_dma_buffers()
7252 &instance->pd_list_buf_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7254 if (!instance->pd_list_buf) { in megasas_alloc_ctrl_dma_buffers()
7259 instance->ctrl_info_buf = in megasas_alloc_ctrl_dma_buffers()
7262 &instance->ctrl_info_buf_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7264 if (!instance->ctrl_info_buf) { in megasas_alloc_ctrl_dma_buffers()
7270 instance->ld_list_buf = in megasas_alloc_ctrl_dma_buffers()
7273 &instance->ld_list_buf_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7275 if (!instance->ld_list_buf) { in megasas_alloc_ctrl_dma_buffers()
7280 instance->ld_targetid_list_buf = in megasas_alloc_ctrl_dma_buffers()
7283 &instance->ld_targetid_list_buf_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7285 if (!instance->ld_targetid_list_buf) { in megasas_alloc_ctrl_dma_buffers()
7292 instance->system_info_buf = in megasas_alloc_ctrl_dma_buffers()
7295 &instance->system_info_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7296 instance->pd_info = in megasas_alloc_ctrl_dma_buffers()
7299 &instance->pd_info_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7300 instance->tgt_prop = in megasas_alloc_ctrl_dma_buffers()
7303 &instance->tgt_prop_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7304 instance->crash_dump_buf = in megasas_alloc_ctrl_dma_buffers()
7306 &instance->crash_dump_h, GFP_KERNEL); in megasas_alloc_ctrl_dma_buffers()
7308 if (!instance->system_info_buf) in megasas_alloc_ctrl_dma_buffers()
7309 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7312 if (!instance->pd_info) in megasas_alloc_ctrl_dma_buffers()
7313 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7316 if (!instance->tgt_prop) in megasas_alloc_ctrl_dma_buffers()
7317 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7320 if (!instance->crash_dump_buf) in megasas_alloc_ctrl_dma_buffers()
7321 dev_err(&instance->pdev->dev, in megasas_alloc_ctrl_dma_buffers()
7332 * @instance- Adapter soft instance
7336 void megasas_free_ctrl_dma_buffers(struct megasas_instance *instance) in megasas_free_ctrl_dma_buffers() argument
7338 struct pci_dev *pdev = instance->pdev; in megasas_free_ctrl_dma_buffers()
7339 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_ctrl_dma_buffers()
7341 if (instance->evt_detail) in megasas_free_ctrl_dma_buffers()
7343 instance->evt_detail, in megasas_free_ctrl_dma_buffers()
7344 instance->evt_detail_h); in megasas_free_ctrl_dma_buffers()
7352 if (instance->pd_list_buf) in megasas_free_ctrl_dma_buffers()
7355 instance->pd_list_buf, in megasas_free_ctrl_dma_buffers()
7356 instance->pd_list_buf_h); in megasas_free_ctrl_dma_buffers()
7358 if (instance->ld_list_buf) in megasas_free_ctrl_dma_buffers()
7360 instance->ld_list_buf, in megasas_free_ctrl_dma_buffers()
7361 instance->ld_list_buf_h); in megasas_free_ctrl_dma_buffers()
7363 if (instance->ld_targetid_list_buf) in megasas_free_ctrl_dma_buffers()
7365 instance->ld_targetid_list_buf, in megasas_free_ctrl_dma_buffers()
7366 instance->ld_targetid_list_buf_h); in megasas_free_ctrl_dma_buffers()
7368 if (instance->ctrl_info_buf) in megasas_free_ctrl_dma_buffers()
7370 instance->ctrl_info_buf, in megasas_free_ctrl_dma_buffers()
7371 instance->ctrl_info_buf_h); in megasas_free_ctrl_dma_buffers()
7373 if (instance->system_info_buf) in megasas_free_ctrl_dma_buffers()
7375 instance->system_info_buf, in megasas_free_ctrl_dma_buffers()
7376 instance->system_info_h); in megasas_free_ctrl_dma_buffers()
7378 if (instance->pd_info) in megasas_free_ctrl_dma_buffers()
7380 instance->pd_info, instance->pd_info_h); in megasas_free_ctrl_dma_buffers()
7382 if (instance->tgt_prop) in megasas_free_ctrl_dma_buffers()
7384 instance->tgt_prop, instance->tgt_prop_h); in megasas_free_ctrl_dma_buffers()
7386 if (instance->crash_dump_buf) in megasas_free_ctrl_dma_buffers()
7388 instance->crash_dump_buf, in megasas_free_ctrl_dma_buffers()
7389 instance->crash_dump_h); in megasas_free_ctrl_dma_buffers()
7391 if (instance->snapdump_prop) in megasas_free_ctrl_dma_buffers()
7394 instance->snapdump_prop, in megasas_free_ctrl_dma_buffers()
7395 instance->snapdump_prop_h); in megasas_free_ctrl_dma_buffers()
7397 if (instance->host_device_list_buf) in megasas_free_ctrl_dma_buffers()
7400 instance->host_device_list_buf, in megasas_free_ctrl_dma_buffers()
7401 instance->host_device_list_buf_h); in megasas_free_ctrl_dma_buffers()
7406 * megasas_init_ctrl_params - Initialize controller's instance
7408 * @instance - Adapter soft instance
7411 static inline void megasas_init_ctrl_params(struct megasas_instance *instance) in megasas_init_ctrl_params() argument
7413 instance->fw_crash_state = UNAVAILABLE; in megasas_init_ctrl_params()
7416 instance->issuepend_done = 1; in megasas_init_ctrl_params()
7417 atomic_set(&instance->adprecovery, MEGASAS_HBA_OPERATIONAL); in megasas_init_ctrl_params()
7422 INIT_LIST_HEAD(&instance->cmd_pool); in megasas_init_ctrl_params()
7423 INIT_LIST_HEAD(&instance->internal_reset_pending_q); in megasas_init_ctrl_params()
7425 atomic_set(&instance->fw_outstanding, 0); in megasas_init_ctrl_params()
7426 atomic64_set(&instance->total_io_count, 0); in megasas_init_ctrl_params()
7428 init_waitqueue_head(&instance->int_cmd_wait_q); in megasas_init_ctrl_params()
7429 init_waitqueue_head(&instance->abort_cmd_wait_q); in megasas_init_ctrl_params()
7431 mutex_init(&instance->crashdump_lock); in megasas_init_ctrl_params()
7432 spin_lock_init(&instance->mfi_pool_lock); in megasas_init_ctrl_params()
7433 spin_lock_init(&instance->hba_lock); in megasas_init_ctrl_params()
7434 spin_lock_init(&instance->stream_lock); in megasas_init_ctrl_params()
7435 spin_lock_init(&instance->completion_lock); in megasas_init_ctrl_params()
7437 mutex_init(&instance->reset_mutex); in megasas_init_ctrl_params()
7439 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) || in megasas_init_ctrl_params()
7440 (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY)) in megasas_init_ctrl_params()
7441 instance->flag_ieee = 1; in megasas_init_ctrl_params()
7443 instance->flag = 0; in megasas_init_ctrl_params()
7444 instance->unload = 1; in megasas_init_ctrl_params()
7445 instance->last_time = 0; in megasas_init_ctrl_params()
7446 instance->disableOnlineCtrlReset = 1; in megasas_init_ctrl_params()
7447 instance->UnevenSpanSupport = 0; in megasas_init_ctrl_params()
7448 instance->smp_affinity_enable = smp_affinity_enable ? true : false; in megasas_init_ctrl_params()
7449 instance->msix_load_balance = false; in megasas_init_ctrl_params()
7451 if (instance->adapter_type != MFI_SERIES) in megasas_init_ctrl_params()
7452 INIT_WORK(&instance->work_init, megasas_fusion_ocr_wq); in megasas_init_ctrl_params()
7454 INIT_WORK(&instance->work_init, process_fw_state_change_wq); in megasas_init_ctrl_params()
7467 struct megasas_instance *instance; in megasas_probe_one() local
7518 instance = (struct megasas_instance *)host->hostdata; in megasas_probe_one()
7519 memset(instance, 0, sizeof(*instance)); in megasas_probe_one()
7520 atomic_set(&instance->fw_reset_no_pci_access, 0); in megasas_probe_one()
7525 instance->pdev = pdev; in megasas_probe_one()
7526 instance->host = host; in megasas_probe_one()
7527 instance->unique_id = pci_dev_id(pdev); in megasas_probe_one()
7528 instance->init_id = MEGASAS_DEFAULT_INIT_ID; in megasas_probe_one()
7530 megasas_set_adapter_type(instance); in megasas_probe_one()
7535 if (megasas_init_fw(instance)) in megasas_probe_one()
7538 if (instance->requestorId) { in megasas_probe_one()
7539 if (instance->PlasmaFW111) { in megasas_probe_one()
7540 instance->vf_affiliation_111 = in megasas_probe_one()
7543 &instance->vf_affiliation_111_h, in megasas_probe_one()
7545 if (!instance->vf_affiliation_111) in megasas_probe_one()
7549 instance->vf_affiliation = in megasas_probe_one()
7553 &instance->vf_affiliation_h, in megasas_probe_one()
7555 if (!instance->vf_affiliation) in megasas_probe_one()
7562 * Store instance in PCI softstate in megasas_probe_one()
7564 pci_set_drvdata(pdev, instance); in megasas_probe_one()
7571 megasas_mgmt_info.instance[megasas_mgmt_info.max_index] = instance; in megasas_probe_one()
7577 if (megasas_io_attach(instance)) in megasas_probe_one()
7580 instance->unload = 0; in megasas_probe_one()
7584 if (!instance->enable_fw_dev_list || in megasas_probe_one()
7585 (instance->host_device_list_buf->count > 0)) in megasas_probe_one()
7591 if (megasas_start_aen(instance)) { in megasas_probe_one()
7596 megasas_setup_debugfs(instance); in megasas_probe_one()
7599 if (instance->requestorId) in megasas_probe_one()
7600 megasas_get_ld_vf_affiliation(instance, 1); in megasas_probe_one()
7605 instance->unload = 1; in megasas_probe_one()
7606 scsi_remove_host(instance->host); in megasas_probe_one()
7610 megasas_mgmt_info.instance[megasas_mgmt_info.max_index] = NULL; in megasas_probe_one()
7612 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_probe_one()
7613 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_probe_one()
7615 instance->instancet->disable_intr(instance); in megasas_probe_one()
7616 megasas_destroy_irqs(instance); in megasas_probe_one()
7618 if (instance->adapter_type != MFI_SERIES) in megasas_probe_one()
7619 megasas_release_fusion(instance); in megasas_probe_one()
7621 megasas_release_mfi(instance); in megasas_probe_one()
7623 if (instance->msix_vectors) in megasas_probe_one()
7624 pci_free_irq_vectors(instance->pdev); in megasas_probe_one()
7625 instance->msix_vectors = 0; in megasas_probe_one()
7627 if (instance->fw_crash_state != UNAVAILABLE) in megasas_probe_one()
7628 megasas_free_host_crash_buffer(instance); in megasas_probe_one()
7630 if (instance->adapter_type != MFI_SERIES) in megasas_probe_one()
7631 megasas_fusion_stop_watchdog(instance); in megasas_probe_one()
7642 * @instance: Adapter soft state
7644 static void megasas_flush_cache(struct megasas_instance *instance) in megasas_flush_cache() argument
7649 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) in megasas_flush_cache()
7652 cmd = megasas_get_cmd(instance); in megasas_flush_cache()
7671 if (megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS) in megasas_flush_cache()
7673 dev_err(&instance->pdev->dev, in megasas_flush_cache()
7678 megasas_return_cmd(instance, cmd); in megasas_flush_cache()
7683 * @instance: Adapter soft state
7686 static void megasas_shutdown_controller(struct megasas_instance *instance, in megasas_shutdown_controller() argument
7692 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) in megasas_shutdown_controller()
7695 cmd = megasas_get_cmd(instance); in megasas_shutdown_controller()
7700 if (instance->aen_cmd) in megasas_shutdown_controller()
7701 megasas_issue_blocked_abort_cmd(instance, in megasas_shutdown_controller()
7702 instance->aen_cmd, MFI_IO_TIMEOUT_SECS); in megasas_shutdown_controller()
7703 if (instance->map_update_cmd) in megasas_shutdown_controller()
7704 megasas_issue_blocked_abort_cmd(instance, in megasas_shutdown_controller()
7705 instance->map_update_cmd, MFI_IO_TIMEOUT_SECS); in megasas_shutdown_controller()
7706 if (instance->jbod_seq_cmd) in megasas_shutdown_controller()
7707 megasas_issue_blocked_abort_cmd(instance, in megasas_shutdown_controller()
7708 instance->jbod_seq_cmd, MFI_IO_TIMEOUT_SECS); in megasas_shutdown_controller()
7723 if (megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS) in megasas_shutdown_controller()
7725 dev_err(&instance->pdev->dev, in megasas_shutdown_controller()
7730 megasas_return_cmd(instance, cmd); in megasas_shutdown_controller()
7740 struct megasas_instance *instance; in megasas_suspend() local
7742 instance = dev_get_drvdata(dev); in megasas_suspend()
7744 if (!instance) in megasas_suspend()
7747 instance->unload = 1; in megasas_suspend()
7752 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_suspend()
7753 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_suspend()
7756 if (instance->adapter_type != MFI_SERIES) in megasas_suspend()
7757 megasas_fusion_stop_watchdog(instance); in megasas_suspend()
7759 megasas_flush_cache(instance); in megasas_suspend()
7760 megasas_shutdown_controller(instance, MR_DCMD_HIBERNATE_SHUTDOWN); in megasas_suspend()
7763 if (instance->ev != NULL) { in megasas_suspend()
7764 struct megasas_aen_event *ev = instance->ev; in megasas_suspend()
7766 instance->ev = NULL; in megasas_suspend()
7769 tasklet_kill(&instance->isr_tasklet); in megasas_suspend()
7771 pci_set_drvdata(instance->pdev, instance); in megasas_suspend()
7772 instance->instancet->disable_intr(instance); in megasas_suspend()
7774 megasas_destroy_irqs(instance); in megasas_suspend()
7776 if (instance->msix_vectors) in megasas_suspend()
7777 pci_free_irq_vectors(instance->pdev); in megasas_suspend()
7791 struct megasas_instance *instance; in megasas_resume() local
7794 instance = dev_get_drvdata(dev); in megasas_resume()
7796 if (!instance) in megasas_resume()
7799 host = instance->host; in megasas_resume()
7807 if (megasas_transition_to_ready(instance, 0)) { in megasas_resume()
7808 dev_info(&instance->pdev->dev, in megasas_resume()
7811 if (instance->adapter_type != MFI_SERIES) { in megasas_resume()
7813 instance->instancet->read_fw_status_reg(instance); in megasas_resume()
7816 (instance, true, 0)) == FAILED)) in megasas_resume()
7819 atomic_set(&instance->fw_reset_no_pci_access, 1); in megasas_resume()
7820 instance->instancet->adp_reset in megasas_resume()
7821 (instance, instance->reg_set); in megasas_resume()
7822 atomic_set(&instance->fw_reset_no_pci_access, 0); in megasas_resume()
7827 if (megasas_transition_to_ready(instance, 0)) in megasas_resume()
7831 dev_info(&instance->pdev->dev, in megasas_resume()
7835 if (megasas_set_dma_mask(instance)) in megasas_resume()
7842 atomic_set(&instance->fw_outstanding, 0); in megasas_resume()
7843 atomic_set(&instance->ldio_outstanding, 0); in megasas_resume()
7846 if (instance->msix_vectors) in megasas_resume()
7847 megasas_alloc_irq_vectors(instance); in megasas_resume()
7849 if (!instance->msix_vectors) { in megasas_resume()
7850 rval = pci_alloc_irq_vectors(instance->pdev, 1, 1, in megasas_resume()
7856 megasas_setup_reply_map(instance); in megasas_resume()
7858 if (instance->adapter_type != MFI_SERIES) { in megasas_resume()
7859 megasas_reset_reply_desc(instance); in megasas_resume()
7860 if (megasas_ioc_init_fusion(instance)) { in megasas_resume()
7861 megasas_free_cmds(instance); in megasas_resume()
7862 megasas_free_cmds_fusion(instance); in megasas_resume()
7865 if (!megasas_get_map_info(instance)) in megasas_resume()
7866 megasas_sync_map_info(instance); in megasas_resume()
7868 *instance->producer = 0; in megasas_resume()
7869 *instance->consumer = 0; in megasas_resume()
7870 if (megasas_issue_init_mfi(instance)) in megasas_resume()
7874 if (megasas_get_ctrl_info(instance) != DCMD_SUCCESS) in megasas_resume()
7877 tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet, in megasas_resume()
7878 (unsigned long)instance); in megasas_resume()
7880 if (instance->msix_vectors ? in megasas_resume()
7881 megasas_setup_irqs_msix(instance, 0) : in megasas_resume()
7882 megasas_setup_irqs_ioapic(instance)) in megasas_resume()
7885 if (instance->adapter_type != MFI_SERIES) in megasas_resume()
7886 megasas_setup_irq_poll(instance); in megasas_resume()
7889 if (instance->requestorId) { in megasas_resume()
7890 if (!megasas_sriov_start_heartbeat(instance, 0)) in megasas_resume()
7891 megasas_start_timer(instance); in megasas_resume()
7893 instance->skip_heartbeat_timer_del = 1; in megasas_resume()
7898 instance->instancet->enable_intr(instance); in megasas_resume()
7899 megasas_setup_jbod_map(instance); in megasas_resume()
7900 instance->unload = 0; in megasas_resume()
7905 if (megasas_start_aen(instance)) in megasas_resume()
7906 dev_err(&instance->pdev->dev, "Start AEN failed\n"); in megasas_resume()
7909 if (instance->adapter_type != MFI_SERIES) in megasas_resume()
7910 if (megasas_fusion_start_watchdog(instance) != SUCCESS) in megasas_resume()
7916 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_resume()
7917 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_resume()
7919 megasas_free_ctrl_dma_buffers(instance); in megasas_resume()
7920 megasas_free_ctrl_mem(instance); in megasas_resume()
7931 megasas_wait_for_adapter_operational(struct megasas_instance *instance) in megasas_wait_for_adapter_operational() argument
7938 adp_state = atomic_read(&instance->adprecovery); in megasas_wait_for_adapter_operational()
7944 dev_notice(&instance->pdev->dev, "waiting for controller reset to finish\n"); in megasas_wait_for_adapter_operational()
7950 dev_info(&instance->pdev->dev, in megasas_wait_for_adapter_operational()
7967 struct megasas_instance *instance; in megasas_detach_one() local
7971 instance = pci_get_drvdata(pdev); in megasas_detach_one()
7973 if (!instance) in megasas_detach_one()
7976 host = instance->host; in megasas_detach_one()
7977 fusion = instance->ctrl_context; in megasas_detach_one()
7980 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_detach_one()
7981 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_detach_one()
7984 if (instance->adapter_type != MFI_SERIES) in megasas_detach_one()
7985 megasas_fusion_stop_watchdog(instance); in megasas_detach_one()
7987 if (instance->fw_crash_state != UNAVAILABLE) in megasas_detach_one()
7988 megasas_free_host_crash_buffer(instance); in megasas_detach_one()
7989 scsi_remove_host(instance->host); in megasas_detach_one()
7990 instance->unload = 1; in megasas_detach_one()
7992 if (megasas_wait_for_adapter_operational(instance)) in megasas_detach_one()
7995 megasas_flush_cache(instance); in megasas_detach_one()
7996 megasas_shutdown_controller(instance, MR_DCMD_CTRL_SHUTDOWN); in megasas_detach_one()
8000 if (instance->ev != NULL) { in megasas_detach_one()
8001 struct megasas_aen_event *ev = instance->ev; in megasas_detach_one()
8003 instance->ev = NULL; in megasas_detach_one()
8007 wake_up_all(&instance->int_cmd_wait_q); in megasas_detach_one()
8009 tasklet_kill(&instance->isr_tasklet); in megasas_detach_one()
8012 * Take the instance off the instance array. Note that we will not in megasas_detach_one()
8016 if (megasas_mgmt_info.instance[i] == instance) { in megasas_detach_one()
8018 megasas_mgmt_info.instance[i] = NULL; in megasas_detach_one()
8024 instance->instancet->disable_intr(instance); in megasas_detach_one()
8026 megasas_destroy_irqs(instance); in megasas_detach_one()
8028 if (instance->msix_vectors) in megasas_detach_one()
8029 pci_free_irq_vectors(instance->pdev); in megasas_detach_one()
8031 if (instance->adapter_type >= VENTURA_SERIES) { in megasas_detach_one()
8039 if (instance->adapter_type != MFI_SERIES) { in megasas_detach_one()
8040 megasas_release_fusion(instance); in megasas_detach_one()
8046 dma_free_coherent(&instance->pdev->dev, in megasas_detach_one()
8059 dma_free_coherent(&instance->pdev->dev, in megasas_detach_one()
8065 megasas_release_mfi(instance); in megasas_detach_one()
8068 if (instance->vf_affiliation) in megasas_detach_one()
8071 instance->vf_affiliation, in megasas_detach_one()
8072 instance->vf_affiliation_h); in megasas_detach_one()
8074 if (instance->vf_affiliation_111) in megasas_detach_one()
8077 instance->vf_affiliation_111, in megasas_detach_one()
8078 instance->vf_affiliation_111_h); in megasas_detach_one()
8080 if (instance->hb_host_mem) in megasas_detach_one()
8082 instance->hb_host_mem, in megasas_detach_one()
8083 instance->hb_host_mem_h); in megasas_detach_one()
8085 megasas_free_ctrl_dma_buffers(instance); in megasas_detach_one()
8087 megasas_free_ctrl_mem(instance); in megasas_detach_one()
8089 megasas_destroy_debugfs(instance); in megasas_detach_one()
8102 struct megasas_instance *instance = pci_get_drvdata(pdev); in megasas_shutdown() local
8104 if (!instance) in megasas_shutdown()
8107 instance->unload = 1; in megasas_shutdown()
8109 if (megasas_wait_for_adapter_operational(instance)) in megasas_shutdown()
8112 megasas_flush_cache(instance); in megasas_shutdown()
8113 megasas_shutdown_controller(instance, MR_DCMD_CTRL_SHUTDOWN); in megasas_shutdown()
8116 instance->instancet->disable_intr(instance); in megasas_shutdown()
8117 megasas_destroy_irqs(instance); in megasas_shutdown()
8119 if (instance->msix_vectors) in megasas_shutdown()
8120 pci_free_irq_vectors(instance->pdev); in megasas_shutdown()
8205 local_instance = megasas_mgmt_info.instance[i]; in megasas_set_crash_dump_params_ioctl()
8230 * @instance: Adapter soft state
8235 megasas_mgmt_fw_ioctl(struct megasas_instance *instance, in megasas_mgmt_fw_ioctl() argument
8254 dev_printk(KERN_DEBUG, &instance->pdev->dev, "SGE count [%d] > max limit [%d]\n", in megasas_mgmt_fw_ioctl()
8261 !instance->support_nvme_passthru) || in megasas_mgmt_fw_ioctl()
8263 !instance->support_pci_lane_margining)) { in megasas_mgmt_fw_ioctl()
8264 dev_err(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8270 cmd = megasas_get_cmd(instance); in megasas_mgmt_fw_ioctl()
8272 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to get a cmd packet\n"); in megasas_mgmt_fw_ioctl()
8288 if (instance->consistent_mask_64bit) in megasas_mgmt_fw_ioctl()
8299 mutex_lock(&instance->reset_mutex); in megasas_mgmt_fw_ioctl()
8300 if (megasas_get_ctrl_info(instance) != DCMD_SUCCESS) { in megasas_mgmt_fw_ioctl()
8301 megasas_return_cmd(instance, cmd); in megasas_mgmt_fw_ioctl()
8302 mutex_unlock(&instance->reset_mutex); in megasas_mgmt_fw_ioctl()
8305 mutex_unlock(&instance->reset_mutex); in megasas_mgmt_fw_ioctl()
8310 megasas_return_cmd(instance, cmd); in megasas_mgmt_fw_ioctl()
8322 if (instance->consistent_mask_64bit) in megasas_mgmt_fw_ioctl()
8336 kbuff_arr[i] = dma_alloc_coherent(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8340 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to alloc " in megasas_mgmt_fw_ioctl()
8350 if (instance->consistent_mask_64bit) { in megasas_mgmt_fw_ioctl()
8377 sense = dma_alloc_coherent(&instance->pdev->dev, ioc->sense_len, in megasas_mgmt_fw_ioctl()
8395 ret = megasas_issue_blocked_cmd(instance, cmd, 0); in megasas_mgmt_fw_ioctl()
8400 dev_err(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8410 if (instance->unload == 1) { in megasas_mgmt_fw_ioctl()
8411 dev_info(&instance->pdev->dev, "Driver unload is in progress " in megasas_mgmt_fw_ioctl()
8443 dev_err(&instance->pdev->dev, "Failed to copy out to user " in megasas_mgmt_fw_ioctl()
8455 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Error copying out cmd_status\n"); in megasas_mgmt_fw_ioctl()
8461 dma_free_coherent(&instance->pdev->dev, ioc->sense_len, in megasas_mgmt_fw_ioctl()
8467 if (instance->consistent_mask_64bit) in megasas_mgmt_fw_ioctl()
8468 dma_free_coherent(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8473 dma_free_coherent(&instance->pdev->dev, in megasas_mgmt_fw_ioctl()
8481 megasas_return_cmd(instance, cmd); in megasas_mgmt_fw_ioctl()
8522 struct megasas_instance *instance; in megasas_mgmt_ioctl_fw() local
8533 instance = megasas_lookup_instance(ioc->host_no); in megasas_mgmt_ioctl_fw()
8534 if (!instance) { in megasas_mgmt_ioctl_fw()
8540 if (instance->requestorId && !allow_vf_ioctls) { in megasas_mgmt_ioctl_fw()
8545 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_mgmt_ioctl_fw()
8546 dev_err(&instance->pdev->dev, "Controller in crit error\n"); in megasas_mgmt_ioctl_fw()
8551 if (instance->unload == 1) { in megasas_mgmt_ioctl_fw()
8556 if (down_interruptible(&instance->ioctl_sem)) { in megasas_mgmt_ioctl_fw()
8561 if (megasas_wait_for_adapter_operational(instance)) { in megasas_mgmt_ioctl_fw()
8566 error = megasas_mgmt_fw_ioctl(instance, user_ioc, ioc); in megasas_mgmt_ioctl_fw()
8568 up(&instance->ioctl_sem); in megasas_mgmt_ioctl_fw()
8577 struct megasas_instance *instance; in megasas_mgmt_ioctl_aen() local
8590 instance = megasas_lookup_instance(aen.host_no); in megasas_mgmt_ioctl_aen()
8592 if (!instance) in megasas_mgmt_ioctl_aen()
8595 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_mgmt_ioctl_aen()
8599 if (instance->unload == 1) { in megasas_mgmt_ioctl_aen()
8603 if (megasas_wait_for_adapter_operational(instance)) in megasas_mgmt_ioctl_aen()
8606 mutex_lock(&instance->reset_mutex); in megasas_mgmt_ioctl_aen()
8607 error = megasas_register_aen(instance, aen.seq_num, in megasas_mgmt_ioctl_aen()
8609 mutex_unlock(&instance->reset_mutex); in megasas_mgmt_ioctl_aen()
8752 * @instance: Adapter soft state
8762 int megasas_update_device_list(struct megasas_instance *instance, in megasas_update_device_list() argument
8767 if (instance->enable_fw_dev_list) { in megasas_update_device_list()
8768 return megasas_host_device_list_query(instance, false); in megasas_update_device_list()
8771 dcmd_ret = megasas_get_pd_list(instance); in megasas_update_device_list()
8777 if (!instance->requestorId || in megasas_update_device_list()
8778 megasas_get_ld_vf_affiliation(instance, 0)) { in megasas_update_device_list()
8779 return megasas_ld_list_query(instance, in megasas_update_device_list()
8790 * @instance: Adapter soft state
8795 void megasas_add_remove_devices(struct megasas_instance *instance, in megasas_add_remove_devices() argument
8807 host = instance->host; in megasas_add_remove_devices()
8809 if (instance->enable_fw_dev_list) { in megasas_add_remove_devices()
8810 targetid_list = instance->host_device_list_buf; in megasas_add_remove_devices()
8839 if (instance->pd_list[pd_index].driveState == in megasas_add_remove_devices()
8859 if (instance->ld_ids[ld_index] != 0xff) { in megasas_add_remove_devices()
8879 struct megasas_instance *instance = ev->instance; in megasas_aen_polling() local
8888 if (!instance) { in megasas_aen_polling()
8889 printk(KERN_ERR "invalid instance!\n"); in megasas_aen_polling()
8895 mutex_lock(&instance->reset_mutex); in megasas_aen_polling()
8897 instance->ev = NULL; in megasas_aen_polling()
8898 if (instance->evt_detail) { in megasas_aen_polling()
8899 megasas_decode_evt(instance); in megasas_aen_polling()
8901 switch (le32_to_cpu(instance->evt_detail->code)) { in megasas_aen_polling()
8910 ld_target_id = instance->evt_detail->args.ld.target_id; in megasas_aen_polling()
8911 sdev1 = scsi_device_lookup(instance->host, in megasas_aen_polling()
8917 mutex_unlock(&instance->reset_mutex); in megasas_aen_polling()
8919 mutex_lock(&instance->reset_mutex); in megasas_aen_polling()
8933 dev_info(&instance->pdev->dev, "scanning for scsi%d...\n", in megasas_aen_polling()
8934 instance->host->host_no); in megasas_aen_polling()
8938 dcmd_ret = megasas_get_ctrl_info(instance); in megasas_aen_polling()
8940 instance->snapdump_wait_time) { in megasas_aen_polling()
8941 megasas_get_snapdump_properties(instance); in megasas_aen_polling()
8942 dev_info(&instance->pdev->dev, in megasas_aen_polling()
8944 instance->snapdump_wait_time); in megasas_aen_polling()
8952 dev_err(&instance->pdev->dev, "invalid evt_detail!\n"); in megasas_aen_polling()
8953 mutex_unlock(&instance->reset_mutex); in megasas_aen_polling()
8959 dcmd_ret = megasas_update_device_list(instance, event_type); in megasas_aen_polling()
8961 mutex_unlock(&instance->reset_mutex); in megasas_aen_polling()
8964 megasas_add_remove_devices(instance, event_type); in megasas_aen_polling()
8967 seq_num = le32_to_cpu(instance->evt_detail->seq_num) + 1; in megasas_aen_polling()
8969 seq_num = instance->last_seq_num; in megasas_aen_polling()
8976 if (instance->aen_cmd != NULL) { in megasas_aen_polling()
8981 mutex_lock(&instance->reset_mutex); in megasas_aen_polling()
8982 error = megasas_register_aen(instance, seq_num, in megasas_aen_polling()
8985 dev_err(&instance->pdev->dev, in megasas_aen_polling()
8988 mutex_unlock(&instance->reset_mutex); in megasas_aen_polling()