• Home
  • Raw
  • Download

Lines Matching full:instance

63 extern void megasas_free_cmds(struct megasas_instance *instance);
65 *instance);
67 megasas_complete_cmd(struct megasas_instance *instance,
70 wait_and_poll(struct megasas_instance *instance, struct megasas_cmd *cmd,
74 megasas_return_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd);
75 int megasas_alloc_cmds(struct megasas_instance *instance);
79 megasas_issue_polled(struct megasas_instance *instance,
82 megasas_check_and_restore_queue_depth(struct megasas_instance *instance);
84 int megasas_transition_to_ready(struct megasas_instance *instance, int ocr);
85 void megaraid_sas_kill_hba(struct megasas_instance *instance);
88 int megasas_sriov_start_heartbeat(struct megasas_instance *instance,
90 void megasas_start_timer(struct megasas_instance *instance);
94 static void megasas_free_rdpq_fusion(struct megasas_instance *instance);
95 static void megasas_free_reply_fusion(struct megasas_instance *instance);
97 void megasas_configure_queue_sizes(struct megasas_instance *instance);
102 * @instance - adapter's soft instance
111 (struct megasas_instance *instance, dma_addr_t start_addr, size_t size) in megasas_check_same_4gb_region() argument
118 dev_err(&instance->pdev->dev, in megasas_check_same_4gb_region()
133 megasas_enable_intr_fusion(struct megasas_instance *instance) in megasas_enable_intr_fusion() argument
136 regs = instance->reg_set; in megasas_enable_intr_fusion()
138 instance->mask_interrupts = 0; in megasas_enable_intr_fusion()
154 megasas_disable_intr_fusion(struct megasas_instance *instance) in megasas_disable_intr_fusion() argument
159 regs = instance->reg_set; in megasas_disable_intr_fusion()
160 instance->mask_interrupts = 1; in megasas_disable_intr_fusion()
189 * @instance: Adapter soft state
194 *instance, u32 blk_tag) in megasas_get_cmd_fusion()
198 fusion = instance->ctrl_context; in megasas_get_cmd_fusion()
204 * @instance: Adapter soft state
207 inline void megasas_return_cmd_fusion(struct megasas_instance *instance, in megasas_return_cmd_fusion() argument
218 * @instance: Adapter soft state
225 megasas_fire_cmd_fusion(struct megasas_instance *instance, in megasas_fire_cmd_fusion() argument
232 writeq(req_data, &instance->reg_set->inbound_low_queue_port); in megasas_fire_cmd_fusion()
235 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_fusion()
237 &instance->reg_set->inbound_low_queue_port); in megasas_fire_cmd_fusion()
239 &instance->reg_set->inbound_high_queue_port); in megasas_fire_cmd_fusion()
241 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_fusion()
247 * @instance: Adapter soft state
257 megasas_fusion_update_can_queue(struct megasas_instance *instance, int fw_boot_context) in megasas_fusion_update_can_queue() argument
263 reg_set = instance->reg_set; in megasas_fusion_update_can_queue()
266 if (instance->adapter_type < VENTURA_SERIES) in megasas_fusion_update_can_queue()
268 readl(&instance->reg_set->outbound_scratch_pad_3) & 0x00FFFF; in megasas_fusion_update_can_queue()
271 cur_max_fw_cmds = instance->instancet->read_fw_status_reg(reg_set) & 0x00FFFF; in megasas_fusion_update_can_queue()
274 (instance->instancet->read_fw_status_reg(reg_set) & 0x00FFFF) - MEGASAS_FUSION_IOCTL_CMDS; in megasas_fusion_update_can_queue()
276 dev_info(&instance->pdev->dev, in megasas_fusion_update_can_queue()
282 if (cur_max_fw_cmds < instance->max_fw_cmds) { in megasas_fusion_update_can_queue()
283 instance->cur_can_queue = in megasas_fusion_update_can_queue()
286 instance->host->can_queue = instance->cur_can_queue; in megasas_fusion_update_can_queue()
287 instance->ldio_threshold = ldio_threshold; in megasas_fusion_update_can_queue()
290 instance->max_fw_cmds = cur_max_fw_cmds; in megasas_fusion_update_can_queue()
291 instance->ldio_threshold = ldio_threshold; in megasas_fusion_update_can_queue()
294 instance->max_fw_cmds = min(instance->max_fw_cmds, in megasas_fusion_update_can_queue()
301 instance->max_fw_cmds = instance->max_fw_cmds-1; in megasas_fusion_update_can_queue()
306 * @instance: Adapter soft state
309 megasas_free_cmds_fusion(struct megasas_instance *instance) in megasas_free_cmds_fusion() argument
312 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_cmds_fusion()
321 for (i = 0; i < instance->max_mpt_cmds; i++) { in megasas_free_cmds_fusion()
345 if (instance->is_rdpq) in megasas_free_cmds_fusion()
346 megasas_free_rdpq_fusion(instance); in megasas_free_cmds_fusion()
348 megasas_free_reply_fusion(instance); in megasas_free_cmds_fusion()
352 dma_free_coherent(&instance->pdev->dev, in megasas_free_cmds_fusion()
367 * @instance: Adapter soft state
370 static int megasas_create_sg_sense_fusion(struct megasas_instance *instance) in megasas_create_sg_sense_fusion() argument
379 fusion = instance->ctrl_context; in megasas_create_sg_sense_fusion()
380 max_cmd = instance->max_fw_cmds; in megasas_create_sg_sense_fusion()
381 sense_sz = instance->max_mpt_cmds * SCSI_SENSE_BUFFERSIZE; in megasas_create_sg_sense_fusion()
384 dma_pool_create("mr_sg", &instance->pdev->dev, in megasas_create_sg_sense_fusion()
385 instance->max_chain_frame_sz, in megasas_create_sg_sense_fusion()
389 dma_pool_create("mr_sense", &instance->pdev->dev, in megasas_create_sg_sense_fusion()
393 dev_err(&instance->pdev->dev, in megasas_create_sg_sense_fusion()
401 dev_err(&instance->pdev->dev, in megasas_create_sg_sense_fusion()
417 if (!megasas_check_same_4gb_region(instance, fusion->sense_phys_addr, in megasas_create_sg_sense_fusion()
425 dma_pool_create("mr_sense_align", &instance->pdev->dev, in megasas_create_sg_sense_fusion()
429 dev_err(&instance->pdev->dev, in megasas_create_sg_sense_fusion()
437 dev_err(&instance->pdev->dev, in megasas_create_sg_sense_fusion()
456 dev_err(&instance->pdev->dev, in megasas_create_sg_sense_fusion()
463 for (i = max_cmd; i < instance->max_mpt_cmds; i++) { in megasas_create_sg_sense_fusion()
475 megasas_alloc_cmdlist_fusion(struct megasas_instance *instance) in megasas_alloc_cmdlist_fusion() argument
480 fusion = instance->ctrl_context; in megasas_alloc_cmdlist_fusion()
482 max_mpt_cmd = instance->max_mpt_cmds; in megasas_alloc_cmdlist_fusion()
493 dev_err(&instance->pdev->dev, in megasas_alloc_cmdlist_fusion()
505 dev_err(&instance->pdev->dev, in megasas_alloc_cmdlist_fusion()
514 megasas_alloc_request_fusion(struct megasas_instance *instance) in megasas_alloc_request_fusion() argument
518 fusion = instance->ctrl_context; in megasas_alloc_request_fusion()
522 dma_pool_create("mr_ioreq", &instance->pdev->dev, in megasas_alloc_request_fusion()
526 dev_err(&instance->pdev->dev, in megasas_alloc_request_fusion()
536 if (instance->max_fw_cmds >= (MEGASAS_REDUCE_QD_COUNT * 2)) { in megasas_alloc_request_fusion()
537 instance->max_fw_cmds -= MEGASAS_REDUCE_QD_COUNT; in megasas_alloc_request_fusion()
539 megasas_configure_queue_sizes(instance); in megasas_alloc_request_fusion()
542 dev_err(&instance->pdev->dev, in megasas_alloc_request_fusion()
548 if (!megasas_check_same_4gb_region(instance, in megasas_alloc_request_fusion()
559 &instance->pdev->dev, in megasas_alloc_request_fusion()
565 dev_err(&instance->pdev->dev, in megasas_alloc_request_fusion()
576 dev_err(&instance->pdev->dev, in megasas_alloc_request_fusion()
583 dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_request_fusion()
587 dev_err(&instance->pdev->dev, in megasas_alloc_request_fusion()
596 megasas_alloc_reply_fusion(struct megasas_instance *instance) in megasas_alloc_reply_fusion() argument
601 fusion = instance->ctrl_context; in megasas_alloc_reply_fusion()
603 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_alloc_reply_fusion()
605 dma_pool_create("mr_reply", &instance->pdev->dev, in megasas_alloc_reply_fusion()
609 dev_err(&instance->pdev->dev, in megasas_alloc_reply_fusion()
618 dev_err(&instance->pdev->dev, in megasas_alloc_reply_fusion()
623 if (!megasas_check_same_4gb_region(instance, in megasas_alloc_reply_fusion()
634 &instance->pdev->dev, in megasas_alloc_reply_fusion()
640 dev_err(&instance->pdev->dev, in megasas_alloc_reply_fusion()
651 dev_err(&instance->pdev->dev, in megasas_alloc_reply_fusion()
673 megasas_alloc_rdpq_fusion(struct megasas_instance *instance) in megasas_alloc_rdpq_fusion() argument
683 fusion = instance->ctrl_context; in megasas_alloc_rdpq_fusion()
688 fusion->rdpq_virt = pci_zalloc_consistent(instance->pdev, array_size, in megasas_alloc_rdpq_fusion()
691 dev_err(&instance->pdev->dev, in megasas_alloc_rdpq_fusion()
696 msix_count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_alloc_rdpq_fusion()
699 &instance->pdev->dev, in megasas_alloc_rdpq_fusion()
703 &instance->pdev->dev, in megasas_alloc_rdpq_fusion()
710 dev_err(&instance->pdev->dev, in megasas_alloc_rdpq_fusion()
730 dev_err(&instance->pdev->dev, in megasas_alloc_rdpq_fusion()
746 if (!megasas_check_same_4gb_region(instance, rdpq_chunk_phys[i], in megasas_alloc_rdpq_fusion()
756 dev_err(&instance->pdev->dev, in megasas_alloc_rdpq_fusion()
796 megasas_free_rdpq_fusion(struct megasas_instance *instance) { in megasas_free_rdpq_fusion() argument
801 fusion = instance->ctrl_context; in megasas_free_rdpq_fusion()
817 pci_free_consistent(instance->pdev, in megasas_free_rdpq_fusion()
823 megasas_free_reply_fusion(struct megasas_instance *instance) { in megasas_free_reply_fusion() argument
827 fusion = instance->ctrl_context; in megasas_free_reply_fusion()
842 * @instance: Adapter soft state
857 megasas_alloc_cmds_fusion(struct megasas_instance *instance) in megasas_alloc_cmds_fusion() argument
867 fusion = instance->ctrl_context; in megasas_alloc_cmds_fusion()
869 if (megasas_alloc_request_fusion(instance)) in megasas_alloc_cmds_fusion()
872 if (instance->is_rdpq) { in megasas_alloc_cmds_fusion()
873 if (megasas_alloc_rdpq_fusion(instance)) in megasas_alloc_cmds_fusion()
876 if (megasas_alloc_reply_fusion(instance)) in megasas_alloc_cmds_fusion()
879 if (megasas_alloc_cmdlist_fusion(instance)) in megasas_alloc_cmds_fusion()
882 dev_info(&instance->pdev->dev, "Configured max firmware commands: %d\n", in megasas_alloc_cmds_fusion()
883 instance->max_fw_cmds); in megasas_alloc_cmds_fusion()
894 for (i = 0; i < instance->max_mpt_cmds; i++) { in megasas_alloc_cmds_fusion()
901 (i >= instance->max_scsi_cmds && i < instance->max_fw_cmds) ? in megasas_alloc_cmds_fusion()
902 (i - instance->max_scsi_cmds) : in megasas_alloc_cmds_fusion()
904 cmd->instance = instance; in megasas_alloc_cmds_fusion()
914 if (megasas_create_sg_sense_fusion(instance)) in megasas_alloc_cmds_fusion()
920 megasas_free_cmds_fusion(instance); in megasas_alloc_cmds_fusion()
926 * @instance: Adapter soft state
932 wait_and_poll(struct megasas_instance *instance, struct megasas_cmd *cmd, in wait_and_poll() argument
941 fusion = instance->ctrl_context; in wait_and_poll()
960 * @instance: Adapter soft state
965 megasas_ioc_init_fusion(struct megasas_instance *instance) in megasas_ioc_init_fusion() argument
982 fusion = instance->ctrl_context; in megasas_ioc_init_fusion()
990 (&instance->reg_set->outbound_scratch_pad_2); in megasas_ioc_init_fusion()
994 if (instance->adapter_type == INVADER_SERIES) { in megasas_ioc_init_fusion()
998 if (instance->consistent_mask_64bit && !cur_fw_64bit_dma_capable) { in megasas_ioc_init_fusion()
999 dev_err(&instance->pdev->dev, "Driver was operating on 64bit " in megasas_ioc_init_fusion()
1001 megaraid_sas_kill_hba(instance); in megasas_ioc_init_fusion()
1007 if (instance->is_rdpq && !cur_rdpq_mode) { in megasas_ioc_init_fusion()
1008 dev_err(&instance->pdev->dev, "Firmware downgrade *NOT SUPPORTED*" in megasas_ioc_init_fusion()
1014 instance->fw_sync_cache_support = (scratch_pad_2 & in megasas_ioc_init_fusion()
1016 dev_info(&instance->pdev->dev, "FW supports sync cache\t: %s\n", in megasas_ioc_init_fusion()
1017 instance->fw_sync_cache_support ? "Yes" : "No"); in megasas_ioc_init_fusion()
1028 IOCInitMessage->ReplyDescriptorPostQueueAddress = instance->is_rdpq ? in megasas_ioc_init_fusion()
1031 IOCInitMessage->MsgFlags = instance->is_rdpq ? in megasas_ioc_init_fusion()
1035 IOCInitMessage->HostMSIxVectors = instance->msix_vectors; in megasas_ioc_init_fusion()
1057 if (instance->adapter_type >= INVADER_SERIES) in megasas_ioc_init_fusion()
1066 if (instance->max_chain_frame_sz > MEGASAS_CHAIN_FRAME_SZ_MIN) in megasas_ioc_init_fusion()
1077 if (instance->consistent_mask_64bit) in megasas_ioc_init_fusion()
1084 if (instance->system_info_buf && sys_info) { in megasas_ioc_init_fusion()
1085 memcpy(instance->system_info_buf->systemId, sys_info, in megasas_ioc_init_fusion()
1087 instance->system_info_buf->systemIdLength = in megasas_ioc_init_fusion()
1089 init_frame->system_info_lo = cpu_to_le32(lower_32_bits(instance->system_info_h)); in megasas_ioc_init_fusion()
1090 init_frame->system_info_hi = cpu_to_le32(upper_32_bits(instance->system_info_h)); in megasas_ioc_init_fusion()
1108 instance->instancet->disable_intr(instance); in megasas_ioc_init_fusion()
1111 if (readl(&instance->reg_set->doorbell) & 1) in megasas_ioc_init_fusion()
1117 megasas_fire_cmd_fusion(instance, &req_desc); in megasas_ioc_init_fusion()
1119 wait_and_poll(instance, cmd, MFI_POLL_TIMEOUT_SECS); in megasas_ioc_init_fusion()
1130 dev_err(&instance->pdev->dev, in megasas_ioc_init_fusion()
1132 instance->host->host_no); in megasas_ioc_init_fusion()
1139 * @instance: Adapter soft state
1143 * issue command and return. If it is first instance of jbod map
1147 megasas_sync_pd_seq_num(struct megasas_instance *instance, bool pend) { in megasas_sync_pd_seq_num() argument
1152 struct fusion_context *fusion = instance->ctrl_context; in megasas_sync_pd_seq_num()
1156 pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id & 1)]; in megasas_sync_pd_seq_num()
1157 pd_seq_h = fusion->pd_seq_phys[(instance->pd_seq_map_id & 1)]; in megasas_sync_pd_seq_num()
1162 cmd = megasas_get_cmd(instance); in megasas_sync_pd_seq_num()
1164 dev_err(&instance->pdev->dev, in megasas_sync_pd_seq_num()
1178 instance->jbod_seq_cmd = cmd; in megasas_sync_pd_seq_num()
1191 megasas_set_dma_settings(instance, dcmd, pd_seq_h, pd_seq_map_sz); in megasas_sync_pd_seq_num()
1194 instance->instancet->issue_dcmd(instance, cmd); in megasas_sync_pd_seq_num()
1199 if (!instance->mask_interrupts) in megasas_sync_pd_seq_num()
1200 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_sync_pd_seq_num()
1203 ret = megasas_issue_polled(instance, cmd); in megasas_sync_pd_seq_num()
1206 dev_warn(&instance->pdev->dev, in megasas_sync_pd_seq_num()
1213 megaraid_sas_kill_hba(instance); in megasas_sync_pd_seq_num()
1216 instance->pd_seq_map_id++; in megasas_sync_pd_seq_num()
1218 megasas_return_cmd(instance, cmd); in megasas_sync_pd_seq_num()
1224 * @instance: Adapter soft state
1238 megasas_get_ld_map_info(struct megasas_instance *instance) in megasas_get_ld_map_info() argument
1248 cmd = megasas_get_cmd(instance); in megasas_get_ld_map_info()
1251 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to get cmd for map info\n"); in megasas_get_ld_map_info()
1255 fusion = instance->ctrl_context; in megasas_get_ld_map_info()
1258 megasas_return_cmd(instance, cmd); in megasas_get_ld_map_info()
1266 ci = (void *) fusion->ld_map[(instance->map_id & 1)]; in megasas_get_ld_map_info()
1267 ci_h = fusion->ld_map_phys[(instance->map_id & 1)]; in megasas_get_ld_map_info()
1270 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to alloc mem for ld_map_info\n"); in megasas_get_ld_map_info()
1271 megasas_return_cmd(instance, cmd); in megasas_get_ld_map_info()
1286 megasas_set_dma_settings(instance, dcmd, ci_h, size_map_info); in megasas_get_ld_map_info()
1288 if (!instance->mask_interrupts) in megasas_get_ld_map_info()
1289 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_get_ld_map_info()
1292 ret = megasas_issue_polled(instance, cmd); in megasas_get_ld_map_info()
1295 megaraid_sas_kill_hba(instance); in megasas_get_ld_map_info()
1297 megasas_return_cmd(instance, cmd); in megasas_get_ld_map_info()
1303 megasas_get_map_info(struct megasas_instance *instance) in megasas_get_map_info() argument
1305 struct fusion_context *fusion = instance->ctrl_context; in megasas_get_map_info()
1308 if (!megasas_get_ld_map_info(instance)) { in megasas_get_map_info()
1309 if (MR_ValidateMapInfo(instance, instance->map_id)) { in megasas_get_map_info()
1319 * @instance: Adapter soft state
1326 megasas_sync_map_info(struct megasas_instance *instance) in megasas_sync_map_info() argument
1341 cmd = megasas_get_cmd(instance); in megasas_sync_map_info()
1344 dev_printk(KERN_DEBUG, &instance->pdev->dev, "Failed to get cmd for sync info\n"); in megasas_sync_map_info()
1348 fusion = instance->ctrl_context; in megasas_sync_map_info()
1351 megasas_return_cmd(instance, cmd); in megasas_sync_map_info()
1355 map = fusion->ld_drv_map[instance->map_id & 1]; in megasas_sync_map_info()
1366 fusion->ld_map[(instance->map_id - 1) & 1]; in megasas_sync_map_info()
1369 ci_h = fusion->ld_map_phys[(instance->map_id - 1) & 1]; in megasas_sync_map_info()
1392 megasas_set_dma_settings(instance, dcmd, ci_h, size_map_info); in megasas_sync_map_info()
1394 instance->map_update_cmd = cmd; in megasas_sync_map_info()
1396 instance->instancet->issue_dcmd(instance, cmd); in megasas_sync_map_info()
1403 * @instance: per adapter object
1408 megasas_display_intel_branding(struct megasas_instance *instance) in megasas_display_intel_branding() argument
1410 if (instance->pdev->subsystem_vendor != PCI_VENDOR_ID_INTEL) in megasas_display_intel_branding()
1413 switch (instance->pdev->device) { in megasas_display_intel_branding()
1415 switch (instance->pdev->subsystem_device) { in megasas_display_intel_branding()
1417 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
1418 instance->host->host_no, in megasas_display_intel_branding()
1422 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
1423 instance->host->host_no, in megasas_display_intel_branding()
1427 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
1428 instance->host->host_no, in megasas_display_intel_branding()
1432 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
1433 instance->host->host_no, in megasas_display_intel_branding()
1441 switch (instance->pdev->subsystem_device) { in megasas_display_intel_branding()
1443 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
1444 instance->host->host_no, in megasas_display_intel_branding()
1448 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
1449 instance->host->host_no, in megasas_display_intel_branding()
1458 switch (instance->pdev->subsystem_device) { in megasas_display_intel_branding()
1460 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
1461 instance->host->host_no, in megasas_display_intel_branding()
1475 * @instance: Adapter soft state
1480 static inline int megasas_allocate_raid_maps(struct megasas_instance *instance) in megasas_allocate_raid_maps() argument
1485 fusion = instance->ctrl_context; in megasas_allocate_raid_maps()
1500 dev_err(&instance->pdev->dev, in megasas_allocate_raid_maps()
1510 fusion->ld_map[i] = dma_alloc_coherent(&instance->pdev->dev, in megasas_allocate_raid_maps()
1515 dev_err(&instance->pdev->dev, in megasas_allocate_raid_maps()
1527 dma_free_coherent(&instance->pdev->dev, in megasas_allocate_raid_maps()
1551 * @instance: Adapter soft state
1555 void megasas_configure_queue_sizes(struct megasas_instance *instance) in megasas_configure_queue_sizes() argument
1560 fusion = instance->ctrl_context; in megasas_configure_queue_sizes()
1561 max_cmd = instance->max_fw_cmds; in megasas_configure_queue_sizes()
1563 if (instance->adapter_type == VENTURA_SERIES) in megasas_configure_queue_sizes()
1564 instance->max_mpt_cmds = instance->max_fw_cmds * RAID_1_PEER_CMDS; in megasas_configure_queue_sizes()
1566 instance->max_mpt_cmds = instance->max_fw_cmds; in megasas_configure_queue_sizes()
1568 instance->max_scsi_cmds = instance->max_fw_cmds - in megasas_configure_queue_sizes()
1571 instance->cur_can_queue = instance->max_scsi_cmds; in megasas_configure_queue_sizes()
1572 instance->host->can_queue = instance->cur_can_queue; in megasas_configure_queue_sizes()
1577 instance->max_mpt_cmds; in megasas_configure_queue_sizes()
1582 * (instance->max_mpt_cmds + 1)); /* Extra 1 for SMID 0 */ in megasas_configure_queue_sizes()
1585 static int megasas_alloc_ioc_init_frame(struct megasas_instance *instance) in megasas_alloc_ioc_init_frame() argument
1590 fusion = instance->ctrl_context; in megasas_alloc_ioc_init_frame()
1595 dev_err(&instance->pdev->dev, "Failed from func: %s line: %d\n", in megasas_alloc_ioc_init_frame()
1600 cmd->frame = dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_ioc_init_frame()
1605 dev_err(&instance->pdev->dev, "Failed from func: %s line: %d\n", in megasas_alloc_ioc_init_frame()
1617 * @instance: Adapter soft state
1619 static inline void megasas_free_ioc_init_cmd(struct megasas_instance *instance) in megasas_free_ioc_init_cmd() argument
1623 fusion = instance->ctrl_context; in megasas_free_ioc_init_cmd()
1626 dma_free_coherent(&instance->pdev->dev, in megasas_free_ioc_init_cmd()
1637 * @instance: Adapter soft state
1642 megasas_init_adapter_fusion(struct megasas_instance *instance) in megasas_init_adapter_fusion() argument
1649 fusion = instance->ctrl_context; in megasas_init_adapter_fusion()
1651 reg_set = instance->reg_set; in megasas_init_adapter_fusion()
1653 megasas_fusion_update_can_queue(instance, PROBE_CONTEXT); in megasas_init_adapter_fusion()
1658 instance->max_mfi_cmds = in megasas_init_adapter_fusion()
1661 megasas_configure_queue_sizes(instance); in megasas_init_adapter_fusion()
1663 scratch_pad_2 = readl(&instance->reg_set->outbound_scratch_pad_2); in megasas_init_adapter_fusion()
1671 instance->max_chain_frame_sz = in megasas_init_adapter_fusion()
1675 instance->max_chain_frame_sz = in megasas_init_adapter_fusion()
1679 if (instance->max_chain_frame_sz < MEGASAS_CHAIN_FRAME_SZ_MIN) { in megasas_init_adapter_fusion()
1680 dev_warn(&instance->pdev->dev, "frame size %d invalid, fall back to legacy max frame size %d\n", in megasas_init_adapter_fusion()
1681 instance->max_chain_frame_sz, in megasas_init_adapter_fusion()
1683 instance->max_chain_frame_sz = MEGASAS_CHAIN_FRAME_SZ_MIN; in megasas_init_adapter_fusion()
1691 instance->max_chain_frame_sz in megasas_init_adapter_fusion()
1694 instance->max_num_sge = in megasas_init_adapter_fusion()
1706 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_init_adapter_fusion()
1714 instance->max_scsi_cmds = instance->max_fw_cmds - in megasas_init_adapter_fusion()
1717 sema_init(&instance->ioctl_sem, MEGASAS_FUSION_IOCTL_CMDS); in megasas_init_adapter_fusion()
1719 if (megasas_alloc_ioc_init_frame(instance)) in megasas_init_adapter_fusion()
1726 if (megasas_alloc_cmds(instance)) in megasas_init_adapter_fusion()
1728 if (megasas_alloc_cmds_fusion(instance)) in megasas_init_adapter_fusion()
1731 if (megasas_ioc_init_fusion(instance)) in megasas_init_adapter_fusion()
1734 megasas_display_intel_branding(instance); in megasas_init_adapter_fusion()
1735 if (megasas_get_ctrl_info(instance)) { in megasas_init_adapter_fusion()
1736 dev_err(&instance->pdev->dev, in megasas_init_adapter_fusion()
1742 instance->flag_ieee = 1; in megasas_init_adapter_fusion()
1743 instance->r1_ldio_hint_default = MR_R1_LDIO_PIGGYBACK_DEFAULT; in megasas_init_adapter_fusion()
1746 if (megasas_allocate_raid_maps(instance)) in megasas_init_adapter_fusion()
1749 if (!megasas_get_map_info(instance)) in megasas_init_adapter_fusion()
1750 megasas_sync_map_info(instance); in megasas_init_adapter_fusion()
1755 megasas_free_cmds_fusion(instance); in megasas_init_adapter_fusion()
1757 megasas_free_cmds(instance); in megasas_init_adapter_fusion()
1759 megasas_free_ioc_init_cmd(instance); in megasas_init_adapter_fusion()
1835 * @instance: Adapter soft state
1843 megasas_is_prp_possible(struct megasas_instance *instance, in megasas_is_prp_possible() argument
1853 mr_nvme_pg_size = max_t(u32, instance->nvme_page_size, in megasas_is_prp_possible()
1855 fusion = instance->ctrl_context; in megasas_is_prp_possible()
1912 atomic_inc(&instance->sge_holes_type1); in megasas_is_prp_possible()
1922 atomic_inc(&instance->sge_holes_type2); in megasas_is_prp_possible()
1931 atomic_inc(&instance->sge_holes_type3); in megasas_is_prp_possible()
1944 * @instance: Adapter soft state
1954 megasas_make_prp_nvme(struct megasas_instance *instance, struct scsi_cmnd *scmd, in megasas_make_prp_nvme() argument
1969 u32 mr_nvme_pg_size = max_t(u32, instance->nvme_page_size, in megasas_make_prp_nvme()
1972 fusion = instance->ctrl_context; in megasas_make_prp_nvme()
1974 build_prp = megasas_is_prp_possible(instance, scmd, sge_count); in megasas_make_prp_nvme()
1994 memset(ptr_sgl, 0, instance->max_chain_frame_sz); in megasas_make_prp_nvme()
2067 atomic_inc(&instance->prp_sgl); in megasas_make_prp_nvme()
2073 * @instance: Adapter soft state
2081 megasas_make_sgl_fusion(struct megasas_instance *instance, in megasas_make_sgl_fusion() argument
2090 fusion = instance->ctrl_context; in megasas_make_sgl_fusion()
2092 if (instance->adapter_type >= INVADER_SERIES) { in megasas_make_sgl_fusion()
2102 if (instance->adapter_type >= INVADER_SERIES) in megasas_make_sgl_fusion()
2112 if (instance->adapter_type >= INVADER_SERIES) { in megasas_make_sgl_fusion()
2128 if (instance->adapter_type >= INVADER_SERIES) in megasas_make_sgl_fusion()
2139 memset(sgl_ptr, 0, instance->max_chain_frame_sz); in megasas_make_sgl_fusion()
2142 atomic_inc(&instance->ieee_sgl); in megasas_make_sgl_fusion()
2148 * @instance: Soft instance of controller
2159 int megasas_make_sgl(struct megasas_instance *instance, struct scsi_cmnd *scp, in megasas_make_sgl() argument
2168 if ((sge_count > instance->max_num_sge) || (sge_count <= 0)) in megasas_make_sgl()
2175 build_prp = megasas_make_prp_nvme(instance, scp, sgl_chain64, in megasas_make_sgl()
2179 megasas_make_sgl_fusion(instance, scp, sgl_chain64, in megasas_make_sgl()
2364 * @instance: Adapter soft state
2371 static void megasas_stream_detect(struct megasas_instance *instance, in megasas_stream_detect() argument
2375 struct fusion_context *fusion = instance->ctrl_context; in megasas_stream_detect()
2524 * @instance: Adapter soft state
2532 megasas_build_ldio_fusion(struct megasas_instance *instance, in megasas_build_ldio_fusion() argument
2553 fusion = instance->ctrl_context; in megasas_build_ldio_fusion()
2628 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_ldio_fusion()
2631 if (ld < instance->fw_supported_vd_count) in megasas_build_ldio_fusion()
2638 if (MR_BuildRaidContext(instance, &io_info, in megasas_build_ldio_fusion()
2645 instance->reply_map[raw_smp_processor_id()]; in megasas_build_ldio_fusion()
2649 if (instance->adapter_type == VENTURA_SERIES) { in megasas_build_ldio_fusion()
2661 if (atomic_inc_return(&instance->fw_outstanding) > in megasas_build_ldio_fusion()
2662 (instance->host->can_queue)) { in megasas_build_ldio_fusion()
2664 atomic_dec(&instance->fw_outstanding); in megasas_build_ldio_fusion()
2668 atomic_dec(&instance->fw_outstanding); in megasas_build_ldio_fusion()
2671 instance->r1_ldio_hint_default); in megasas_build_ldio_fusion()
2677 spin_lock_irqsave(&instance->stream_lock, in megasas_build_ldio_fusion()
2679 megasas_stream_detect(instance, cmd, &io_info); in megasas_build_ldio_fusion()
2680 spin_unlock_irqrestore(&instance->stream_lock, in megasas_build_ldio_fusion()
2706 if (instance->adapter_type == INVADER_SERIES) { in megasas_build_ldio_fusion()
2719 } else if (instance->adapter_type == VENTURA_SERIES) { in megasas_build_ldio_fusion()
2733 get_updated_dev_handle(instance, in megasas_build_ldio_fusion()
2738 if (instance->adapter_type == VENTURA_SERIES) in megasas_build_ldio_fusion()
2748 if (instance->adapter_type == VENTURA_SERIES) in megasas_build_ldio_fusion()
2755 instance->dev_handle = !(instance->dev_handle); in megasas_build_ldio_fusion()
2757 local_map_ptr->raidMap.devHndlInfo[io_info.pd_after_lb].devHandle[instance->dev_handle]; in megasas_build_ldio_fusion()
2771 if (instance->adapter_type == INVADER_SERIES) { in megasas_build_ldio_fusion()
2784 } else if (instance->adapter_type == VENTURA_SERIES) { in megasas_build_ldio_fusion()
2800 * @instance: Adapter soft state
2806 static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance, in megasas_build_ld_nonrw_fusion() argument
2813 struct fusion_context *fusion = instance->ctrl_context; in megasas_build_ld_nonrw_fusion()
2823 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_ld_nonrw_fusion()
2833 device_id < instance->fw_supported_vd_count)) { in megasas_build_ld_nonrw_fusion()
2836 if (ld >= instance->fw_supported_vd_count - 1) in megasas_build_ld_nonrw_fusion()
2859 if (instance->adapter_type != VENTURA_SERIES) in megasas_build_ld_nonrw_fusion()
2888 * @instance: Adapter soft state
2896 megasas_build_syspd_fusion(struct megasas_instance *instance, in megasas_build_syspd_fusion() argument
2909 struct fusion_context *fusion = instance->ctrl_context; in megasas_build_syspd_fusion()
2910 pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id - 1) & 1]; in megasas_build_syspd_fusion()
2930 if (instance->use_seqnum_jbod_fp && in megasas_build_syspd_fusion()
2931 instance->pd_list[pd_index].driveType == TYPE_DISK) { in megasas_build_syspd_fusion()
2936 if (instance->support_morethan256jbod) in megasas_build_syspd_fusion()
2944 if (instance->adapter_type == VENTURA_SERIES) { in megasas_build_syspd_fusion()
2960 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_syspd_fusion()
2973 instance->reply_map[raw_smp_processor_id()]; in megasas_build_syspd_fusion()
2994 if (instance->adapter_type >= INVADER_SERIES) in megasas_build_syspd_fusion()
3006 * @instance: Adapter soft state
3014 megasas_build_io_fusion(struct megasas_instance *instance, in megasas_build_io_fusion() argument
3045 megasas_build_ldio_fusion(instance, scp, cmd); in megasas_build_io_fusion()
3048 megasas_build_ld_nonrw_fusion(instance, scp, cmd); in megasas_build_io_fusion()
3051 megasas_build_syspd_fusion(instance, scp, cmd, true); in megasas_build_io_fusion()
3054 if (instance->secure_jbod_support || in megasas_build_io_fusion()
3056 megasas_build_syspd_fusion(instance, scp, cmd, false); in megasas_build_io_fusion()
3058 megasas_build_syspd_fusion(instance, scp, cmd, true); in megasas_build_io_fusion()
3068 sge_count = megasas_make_sgl(instance, scp, cmd); in megasas_build_io_fusion()
3070 if (sge_count > instance->max_num_sge || (sge_count < 0)) { in megasas_build_io_fusion()
3071 dev_err(&instance->pdev->dev, in megasas_build_io_fusion()
3073 __func__, __LINE__, sge_count, instance->max_num_sge); in megasas_build_io_fusion()
3077 if (instance->adapter_type == VENTURA_SERIES) { in megasas_build_io_fusion()
3111 megasas_get_request_descriptor(struct megasas_instance *instance, u16 index) in megasas_get_request_descriptor() argument
3116 fusion = instance->ctrl_context; in megasas_get_request_descriptor()
3127 void megasas_prepare_secondRaid1_IO(struct megasas_instance *instance, in megasas_prepare_secondRaid1_IO() argument
3133 fusion = instance->ctrl_context; in megasas_prepare_secondRaid1_IO()
3144 req_desc2 = megasas_get_request_descriptor(instance, in megasas_prepare_secondRaid1_IO()
3168 * @instance: Adapter soft state
3172 megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, in megasas_build_and_issue_cmd_fusion() argument
3180 fusion = instance->ctrl_context; in megasas_build_and_issue_cmd_fusion()
3183 instance->ldio_threshold && in megasas_build_and_issue_cmd_fusion()
3184 (atomic_inc_return(&instance->ldio_outstanding) > in megasas_build_and_issue_cmd_fusion()
3185 instance->ldio_threshold)) { in megasas_build_and_issue_cmd_fusion()
3186 atomic_dec(&instance->ldio_outstanding); in megasas_build_and_issue_cmd_fusion()
3190 if (atomic_inc_return(&instance->fw_outstanding) > in megasas_build_and_issue_cmd_fusion()
3191 instance->host->can_queue) { in megasas_build_and_issue_cmd_fusion()
3192 atomic_dec(&instance->fw_outstanding); in megasas_build_and_issue_cmd_fusion()
3196 cmd = megasas_get_cmd_fusion(instance, scmd->request->tag); in megasas_build_and_issue_cmd_fusion()
3199 atomic_dec(&instance->fw_outstanding); in megasas_build_and_issue_cmd_fusion()
3205 req_desc = megasas_get_request_descriptor(instance, index-1); in megasas_build_and_issue_cmd_fusion()
3210 if (megasas_build_io_fusion(instance, scmd, cmd)) { in megasas_build_and_issue_cmd_fusion()
3211 megasas_return_cmd_fusion(instance, cmd); in megasas_build_and_issue_cmd_fusion()
3212 dev_err(&instance->pdev->dev, "Error building command\n"); in megasas_build_and_issue_cmd_fusion()
3214 atomic_dec(&instance->fw_outstanding); in megasas_build_and_issue_cmd_fusion()
3223 dev_err(&instance->pdev->dev, "The chain offset value is not " in megasas_build_and_issue_cmd_fusion()
3236 r1_cmd = megasas_get_cmd_fusion(instance, in megasas_build_and_issue_cmd_fusion()
3237 (scmd->request->tag + instance->max_fw_cmds)); in megasas_build_and_issue_cmd_fusion()
3238 megasas_prepare_secondRaid1_IO(instance, cmd, r1_cmd); in megasas_build_and_issue_cmd_fusion()
3246 megasas_fire_cmd_fusion(instance, req_desc); in megasas_build_and_issue_cmd_fusion()
3249 megasas_fire_cmd_fusion(instance, r1_cmd->request_desc); in megasas_build_and_issue_cmd_fusion()
3258 * @instance: Adapter soft state
3263 megasas_complete_r1_command(struct megasas_instance *instance, in megasas_complete_r1_command() argument
3275 fusion = instance->ctrl_context; in megasas_complete_r1_command()
3297 megasas_return_cmd_fusion(instance, r1_cmd); in megasas_complete_r1_command()
3300 if (instance->ldio_threshold && in megasas_complete_r1_command()
3302 atomic_dec(&instance->ldio_outstanding); in megasas_complete_r1_command()
3304 megasas_return_cmd_fusion(instance, cmd); in megasas_complete_r1_command()
3312 * @instance: Adapter soft state
3316 complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) in complete_cmd_fusion() argument
3334 fusion = instance->ctrl_context; in complete_cmd_fusion()
3336 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) in complete_cmd_fusion()
3374 dev_dbg(&instance->pdev->dev, "TM completion:" in complete_cmd_fusion()
3391 atomic_dec(&instance->fw_outstanding); in complete_cmd_fusion()
3396 if (instance->ldio_threshold && in complete_cmd_fusion()
3398 atomic_dec(&instance->ldio_outstanding); in complete_cmd_fusion()
3400 megasas_return_cmd_fusion(instance, cmd_fusion); in complete_cmd_fusion()
3404 megasas_complete_r1_command(instance, cmd_fusion); in complete_cmd_fusion()
3407 cmd_mfi = instance->cmd_list[cmd_fusion->sync_cmd_idx]; in complete_cmd_fusion()
3413 megasas_return_cmd(instance, cmd_mfi); in complete_cmd_fusion()
3415 megasas_complete_cmd(instance, cmd_mfi, DID_OK); in complete_cmd_fusion()
3450 if (instance->msix_combined) in complete_cmd_fusion()
3453 instance->reply_post_host_index_addr[MSIxIndex/8]); in complete_cmd_fusion()
3457 instance->reply_post_host_index_addr[0]); in complete_cmd_fusion()
3466 if (instance->msix_combined) in complete_cmd_fusion()
3469 instance->reply_post_host_index_addr[MSIxIndex/8]); in complete_cmd_fusion()
3473 instance->reply_post_host_index_addr[0]); in complete_cmd_fusion()
3474 megasas_check_and_restore_queue_depth(instance); in complete_cmd_fusion()
3480 * @instance: Adapter soft state
3485 struct megasas_instance *instance = in megasas_sync_irqs() local
3488 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_sync_irqs()
3491 synchronize_irq(pci_irq_vector(instance->pdev, i)); in megasas_sync_irqs()
3496 * @instance: Adapter soft state
3503 struct megasas_instance *instance = in megasas_complete_cmd_dpc_fusion() local
3508 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_complete_cmd_dpc_fusion()
3511 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_complete_cmd_dpc_fusion()
3512 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_complete_cmd_dpc_fusion()
3513 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_complete_cmd_dpc_fusion()
3516 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_complete_cmd_dpc_fusion()
3519 complete_cmd_fusion(instance, MSIxIndex); in megasas_complete_cmd_dpc_fusion()
3528 struct megasas_instance *instance = irq_context->instance; in megasas_isr_fusion() local
3531 if (instance->mask_interrupts) in megasas_isr_fusion()
3534 if (!instance->msix_vectors) { in megasas_isr_fusion()
3535 mfiStatus = instance->instancet->clear_intr(instance->reg_set); in megasas_isr_fusion()
3541 if (test_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags)) { in megasas_isr_fusion()
3542 instance->instancet->clear_intr(instance->reg_set); in megasas_isr_fusion()
3546 if (!complete_cmd_fusion(instance, irq_context->MSIxIndex)) { in megasas_isr_fusion()
3547 instance->instancet->clear_intr(instance->reg_set); in megasas_isr_fusion()
3549 fw_state = instance->instancet->read_fw_status_reg( in megasas_isr_fusion()
3550 instance->reg_set) & MFI_STATE_MASK; in megasas_isr_fusion()
3551 dma_state = instance->instancet->read_fw_status_reg in megasas_isr_fusion()
3552 (instance->reg_set) & MFI_STATE_DMADONE; in megasas_isr_fusion()
3553 if (instance->crash_dump_drv_support && in megasas_isr_fusion()
3554 instance->crash_dump_app_support) { in megasas_isr_fusion()
3557 schedule_work(&instance->crash_init); in megasas_isr_fusion()
3559 if (instance->unload == 0) in megasas_isr_fusion()
3560 schedule_work(&instance->work_init); in megasas_isr_fusion()
3563 dev_warn(&instance->pdev->dev, "Iop2SysDoorbellInt" in megasas_isr_fusion()
3564 "for scsi%d\n", instance->host->host_no); in megasas_isr_fusion()
3565 if (instance->unload == 0) in megasas_isr_fusion()
3566 schedule_work(&instance->work_init); in megasas_isr_fusion()
3575 * @instance: Adapter soft state
3580 build_mpt_mfi_pass_thru(struct megasas_instance *instance, in build_mpt_mfi_pass_thru() argument
3589 fusion = instance->ctrl_context; in build_mpt_mfi_pass_thru()
3591 cmd = megasas_get_cmd_fusion(instance, in build_mpt_mfi_pass_thru()
3592 instance->max_scsi_cmds + mfi_cmd->index); in build_mpt_mfi_pass_thru()
3608 if (instance->adapter_type >= INVADER_SERIES) { in build_mpt_mfi_pass_thru()
3628 mpi25_ieee_chain->Length = cpu_to_le32(instance->mfi_frame_size); in build_mpt_mfi_pass_thru()
3633 * @instance: Adapter soft state
3638 build_mpt_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd) in build_mpt_cmd() argument
3643 build_mpt_mfi_pass_thru(instance, cmd); in build_mpt_cmd()
3646 req_desc = megasas_get_request_descriptor(instance, index - 1); in build_mpt_cmd()
3659 * @instance: Adapter soft state
3664 megasas_issue_dcmd_fusion(struct megasas_instance *instance, in megasas_issue_dcmd_fusion() argument
3669 req_desc = build_mpt_cmd(instance, cmd); in megasas_issue_dcmd_fusion()
3671 megasas_fire_cmd_fusion(instance, req_desc); in megasas_issue_dcmd_fusion()
3677 * @instance: Adapter soft state
3680 megasas_release_fusion(struct megasas_instance *instance) in megasas_release_fusion() argument
3682 megasas_free_ioc_init_cmd(instance); in megasas_release_fusion()
3683 megasas_free_cmds(instance); in megasas_release_fusion()
3684 megasas_free_cmds_fusion(instance); in megasas_release_fusion()
3686 iounmap(instance->reg_set); in megasas_release_fusion()
3688 pci_release_selected_regions(instance->pdev, 1<<instance->bar); in megasas_release_fusion()
3703 * @instance: Controller's soft instance
3707 megasas_alloc_host_crash_buffer(struct megasas_instance *instance) in megasas_alloc_host_crash_buffer() argument
3712 instance->crash_buf[i] = vzalloc(CRASH_DMA_BUF_SIZE); in megasas_alloc_host_crash_buffer()
3713 if (!instance->crash_buf[i]) { in megasas_alloc_host_crash_buffer()
3714 dev_info(&instance->pdev->dev, "Firmware crash dump " in megasas_alloc_host_crash_buffer()
3719 instance->drv_buf_alloc = i; in megasas_alloc_host_crash_buffer()
3724 * @instance: Controller's soft instance
3727 megasas_free_host_crash_buffer(struct megasas_instance *instance) in megasas_free_host_crash_buffer() argument
3730 for (i = 0; i < instance->drv_buf_alloc; i++) { in megasas_free_host_crash_buffer()
3731 if (instance->crash_buf[i]) in megasas_free_host_crash_buffer()
3732 vfree(instance->crash_buf[i]); in megasas_free_host_crash_buffer()
3734 instance->drv_buf_index = 0; in megasas_free_host_crash_buffer()
3735 instance->drv_buf_alloc = 0; in megasas_free_host_crash_buffer()
3736 instance->fw_crash_state = UNAVAILABLE; in megasas_free_host_crash_buffer()
3737 instance->fw_crash_buffer_size = 0; in megasas_free_host_crash_buffer()
3745 megasas_adp_reset_fusion(struct megasas_instance *instance, in megasas_adp_reset_fusion() argument
3751 writel(MPI2_WRSEQ_FLUSH_KEY_VALUE, &instance->reg_set->fusion_seq_offset); in megasas_adp_reset_fusion()
3752 writel(MPI2_WRSEQ_1ST_KEY_VALUE, &instance->reg_set->fusion_seq_offset); in megasas_adp_reset_fusion()
3753 writel(MPI2_WRSEQ_2ND_KEY_VALUE, &instance->reg_set->fusion_seq_offset); in megasas_adp_reset_fusion()
3754 writel(MPI2_WRSEQ_3RD_KEY_VALUE, &instance->reg_set->fusion_seq_offset); in megasas_adp_reset_fusion()
3755 writel(MPI2_WRSEQ_4TH_KEY_VALUE, &instance->reg_set->fusion_seq_offset); in megasas_adp_reset_fusion()
3756 writel(MPI2_WRSEQ_5TH_KEY_VALUE, &instance->reg_set->fusion_seq_offset); in megasas_adp_reset_fusion()
3757 writel(MPI2_WRSEQ_6TH_KEY_VALUE, &instance->reg_set->fusion_seq_offset); in megasas_adp_reset_fusion()
3760 host_diag = readl(&instance->reg_set->fusion_host_diag); in megasas_adp_reset_fusion()
3764 host_diag = readl(&instance->reg_set->fusion_host_diag); in megasas_adp_reset_fusion()
3766 dev_warn(&instance->pdev->dev, in megasas_adp_reset_fusion()
3777 &instance->reg_set->fusion_host_diag); in megasas_adp_reset_fusion()
3781 host_diag = readl(&instance->reg_set->fusion_host_diag); in megasas_adp_reset_fusion()
3785 host_diag = readl(&instance->reg_set->fusion_host_diag); in megasas_adp_reset_fusion()
3787 dev_warn(&instance->pdev->dev, in megasas_adp_reset_fusion()
3796 abs_state = instance->instancet->read_fw_status_reg(instance->reg_set) in megasas_adp_reset_fusion()
3802 abs_state = instance->instancet-> in megasas_adp_reset_fusion()
3803 read_fw_status_reg(instance->reg_set) & MFI_STATE_MASK; in megasas_adp_reset_fusion()
3806 dev_warn(&instance->pdev->dev, in megasas_adp_reset_fusion()
3820 megasas_check_reset_fusion(struct megasas_instance *instance, in megasas_check_reset_fusion() argument
3827 int megasas_wait_for_outstanding_fusion(struct megasas_instance *instance, in megasas_wait_for_outstanding_fusion() argument
3835 fw_state = instance->instancet->read_fw_status_reg( in megasas_wait_for_outstanding_fusion()
3836 instance->reg_set) & MFI_STATE_MASK; in megasas_wait_for_outstanding_fusion()
3838 dev_warn(&instance->pdev->dev, "Found FW in FAULT state," in megasas_wait_for_outstanding_fusion()
3840 instance->host->host_no); in megasas_wait_for_outstanding_fusion()
3841 megasas_complete_cmd_dpc_fusion((unsigned long)instance); in megasas_wait_for_outstanding_fusion()
3842 if (instance->requestorId && reason) { in megasas_wait_for_outstanding_fusion()
3843 dev_warn(&instance->pdev->dev, "SR-IOV Found FW in FAULT" in megasas_wait_for_outstanding_fusion()
3846 instance->host->host_no); in megasas_wait_for_outstanding_fusion()
3855 dev_info(&instance->pdev->dev, in megasas_wait_for_outstanding_fusion()
3857 megasas_complete_cmd_dpc_fusion((unsigned long)instance); in megasas_wait_for_outstanding_fusion()
3863 if (instance->requestorId && !reason) { in megasas_wait_for_outstanding_fusion()
3869 if (instance->requestorId && (reason == SCSIIO_TIMEOUT_OCR)) { in megasas_wait_for_outstanding_fusion()
3870 if (instance->hb_host_mem->HB.fwCounter != in megasas_wait_for_outstanding_fusion()
3871 instance->hb_host_mem->HB.driverCounter) { in megasas_wait_for_outstanding_fusion()
3872 instance->hb_host_mem->HB.driverCounter = in megasas_wait_for_outstanding_fusion()
3873 instance->hb_host_mem->HB.fwCounter; in megasas_wait_for_outstanding_fusion()
3879 dev_warn(&instance->pdev->dev, "SR-IOV:" in megasas_wait_for_outstanding_fusion()
3884 instance->host->host_no); in megasas_wait_for_outstanding_fusion()
3892 megasas_complete_cmd_dpc_fusion((unsigned long)instance); in megasas_wait_for_outstanding_fusion()
3893 outstanding = atomic_read(&instance->fw_outstanding); in megasas_wait_for_outstanding_fusion()
3898 dev_notice(&instance->pdev->dev, "[%2d]waiting for %d " in megasas_wait_for_outstanding_fusion()
3900 outstanding, instance->host->host_no); in megasas_wait_for_outstanding_fusion()
3905 if (atomic_read(&instance->fw_outstanding)) { in megasas_wait_for_outstanding_fusion()
3906 dev_err(&instance->pdev->dev, "pending commands remain after waiting, " in megasas_wait_for_outstanding_fusion()
3908 instance->host->host_no); in megasas_wait_for_outstanding_fusion()
3916 void megasas_reset_reply_desc(struct megasas_instance *instance) in megasas_reset_reply_desc() argument
3922 fusion = instance->ctrl_context; in megasas_reset_reply_desc()
3923 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_reset_reply_desc()
3934 * @instance: Controller's soft instance
3936 void megasas_refire_mgmt_cmd(struct megasas_instance *instance) in megasas_refire_mgmt_cmd() argument
3949 fusion = instance->ctrl_context; in megasas_refire_mgmt_cmd()
3954 for (j = instance->max_scsi_cmds ; j < instance->max_fw_cmds; j++) { in megasas_refire_mgmt_cmd()
3956 cmd_mfi = instance->cmd_list[cmd_fusion->sync_cmd_idx]; in megasas_refire_mgmt_cmd()
3963 req_desc = megasas_get_request_descriptor(instance, smid - 1); in megasas_refire_mgmt_cmd()
3984 if (!instance->support_nvme_passthru) { in megasas_refire_mgmt_cmd()
4001 megasas_fire_cmd_fusion(instance, req_desc); in megasas_refire_mgmt_cmd()
4004 megasas_return_cmd(instance, cmd_mfi); in megasas_refire_mgmt_cmd()
4007 megasas_complete_cmd(instance, cmd_mfi, DID_OK); in megasas_refire_mgmt_cmd()
4015 * @instance: per adapter struct
4022 static int megasas_track_scsiio(struct megasas_instance *instance, in megasas_track_scsiio() argument
4028 fusion = instance->ctrl_context; in megasas_track_scsiio()
4030 for (i = 0 ; i < instance->max_scsi_cmds; i++) { in megasas_track_scsiio()
4035 dev_info(&instance->pdev->dev, in megasas_track_scsiio()
4056 megasas_tm_response_code(struct megasas_instance *instance, in megasas_tm_response_code() argument
4090 dev_dbg(&instance->pdev->dev, "response_code(%01x): %s\n", in megasas_tm_response_code()
4092 dev_dbg(&instance->pdev->dev, in megasas_tm_response_code()
4102 * @instance: per adapter struct
4117 megasas_issue_tm(struct megasas_instance *instance, u16 device_handle, in megasas_issue_tm() argument
4133 fusion = instance->ctrl_context; in megasas_issue_tm()
4135 cmd_mfi = megasas_get_cmd(instance); in megasas_issue_tm()
4138 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_issue_tm()
4143 cmd_fusion = megasas_get_cmd_fusion(instance, in megasas_issue_tm()
4144 instance->max_scsi_cmds + cmd_mfi->index); in megasas_issue_tm()
4149 req_desc = megasas_get_request_descriptor(instance, in megasas_issue_tm()
4180 megasas_fire_cmd_fusion(instance, req_desc); in megasas_issue_tm()
4194 dev_err(&instance->pdev->dev, in megasas_issue_tm()
4196 mutex_unlock(&instance->reset_mutex); in megasas_issue_tm()
4197 rc = megasas_reset_fusion(instance->host, MFI_IO_TIMEOUT_OCR); in megasas_issue_tm()
4198 mutex_lock(&instance->reset_mutex); in megasas_issue_tm()
4203 megasas_tm_response_code(instance, mpi_reply); in megasas_issue_tm()
4205 megasas_return_cmd(instance, cmd_mfi); in megasas_issue_tm()
4214 instance->instancet->disable_intr(instance); in megasas_issue_tm()
4215 megasas_sync_irqs((unsigned long)instance); in megasas_issue_tm()
4216 instance->instancet->enable_intr(instance); in megasas_issue_tm()
4226 instance->instancet->disable_intr(instance); in megasas_issue_tm()
4227 megasas_sync_irqs((unsigned long)instance); in megasas_issue_tm()
4228 rc = megasas_track_scsiio(instance, id, channel); in megasas_issue_tm()
4229 instance->instancet->enable_intr(instance); in megasas_issue_tm()
4246 * @instance: per adapter struct
4253 struct megasas_instance *instance; in megasas_fusion_smid_lookup() local
4257 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_fusion_smid_lookup()
4259 fusion = instance->ctrl_context; in megasas_fusion_smid_lookup()
4261 for (i = 0; i < instance->max_scsi_cmds; i++) { in megasas_fusion_smid_lookup()
4284 struct megasas_instance *instance; in megasas_get_tm_devhandle() local
4289 instance = (struct megasas_instance *)sdev->host->hostdata; in megasas_get_tm_devhandle()
4290 fusion = instance->ctrl_context; in megasas_get_tm_devhandle()
4293 if (instance->use_seqnum_jbod_fp) { in megasas_get_tm_devhandle()
4297 [(instance->pd_seq_map_id - 1) & 1]; in megasas_get_tm_devhandle()
4320 struct megasas_instance *instance; in megasas_task_abort_fusion() local
4328 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_task_abort_fusion()
4329 fusion = instance->ctrl_context; in megasas_task_abort_fusion()
4334 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) { in megasas_task_abort_fusion()
4335 dev_err(&instance->pdev->dev, "Controller is not OPERATIONAL," in megasas_task_abort_fusion()
4336 "SCSI host:%d\n", instance->host->host_no); in megasas_task_abort_fusion()
4355 mutex_lock(&instance->reset_mutex); in megasas_task_abort_fusion()
4363 mutex_unlock(&instance->reset_mutex); in megasas_task_abort_fusion()
4373 mutex_unlock(&instance->reset_mutex); in megasas_task_abort_fusion()
4381 ret = megasas_issue_tm(instance, devhandle, in megasas_task_abort_fusion()
4387 mutex_unlock(&instance->reset_mutex); in megasas_task_abort_fusion()
4405 struct megasas_instance *instance; in megasas_reset_target_fusion() local
4412 instance = (struct megasas_instance *)scmd->device->host->hostdata; in megasas_reset_target_fusion()
4413 fusion = instance->ctrl_context; in megasas_reset_target_fusion()
4418 if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) { in megasas_reset_target_fusion()
4419 dev_err(&instance->pdev->dev, "Controller is not OPERATIONAL," in megasas_reset_target_fusion()
4420 "SCSI host:%d\n", instance->host->host_no); in megasas_reset_target_fusion()
4439 mutex_lock(&instance->reset_mutex); in megasas_reset_target_fusion()
4446 mutex_unlock(&instance->reset_mutex); in megasas_reset_target_fusion()
4454 ret = megasas_issue_tm(instance, devhandle, in megasas_reset_target_fusion()
4459 mutex_unlock(&instance->reset_mutex); in megasas_reset_target_fusion()
4467 /*SRIOV get other instance in cluster if any*/
4468 struct megasas_instance *megasas_get_peer_instance(struct megasas_instance *instance) in megasas_get_peer_instance() argument
4473 if (megasas_mgmt_info.instance[i] && in megasas_get_peer_instance()
4474 (megasas_mgmt_info.instance[i] != instance) && in megasas_get_peer_instance()
4475 megasas_mgmt_info.instance[i]->requestorId && in megasas_get_peer_instance()
4476 megasas_mgmt_info.instance[i]->peerIsPresent && in megasas_get_peer_instance()
4477 (memcmp((megasas_mgmt_info.instance[i]->clusterId), in megasas_get_peer_instance()
4478 instance->clusterId, MEGASAS_CLUSTER_ID_SIZE) == 0)) in megasas_get_peer_instance()
4479 return megasas_mgmt_info.instance[i]; in megasas_get_peer_instance()
4485 int megasas_check_mpio_paths(struct megasas_instance *instance, in megasas_check_mpio_paths() argument
4491 if (instance->peerIsPresent) { in megasas_check_mpio_paths()
4492 peer_instance = megasas_get_peer_instance(instance); in megasas_check_mpio_paths()
4505 struct megasas_instance *instance; in megasas_reset_fusion() local
4515 instance = (struct megasas_instance *)shost->hostdata; in megasas_reset_fusion()
4516 fusion = instance->ctrl_context; in megasas_reset_fusion()
4518 mutex_lock(&instance->reset_mutex); in megasas_reset_fusion()
4520 if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) { in megasas_reset_fusion()
4521 dev_warn(&instance->pdev->dev, "Hardware critical error, " in megasas_reset_fusion()
4523 instance->host->host_no); in megasas_reset_fusion()
4524 mutex_unlock(&instance->reset_mutex); in megasas_reset_fusion()
4527 status_reg = instance->instancet->read_fw_status_reg(instance->reg_set); in megasas_reset_fusion()
4531 if (abs_state != MFI_STATE_FAULT && instance->crash_dump_buf && in megasas_reset_fusion()
4532 instance->crash_dump_app_support && reason) { in megasas_reset_fusion()
4533 dev_info(&instance->pdev->dev, "IO/DCMD timeout is detected, " in megasas_reset_fusion()
4535 atomic_set(&instance->adprecovery, MEGASAS_ADPRESET_SM_INFAULT); in megasas_reset_fusion()
4536 status_reg = readl(&instance->reg_set->doorbell); in megasas_reset_fusion()
4538 &instance->reg_set->doorbell); in megasas_reset_fusion()
4539 readl(&instance->reg_set->doorbell); in megasas_reset_fusion()
4540 mutex_unlock(&instance->reset_mutex); in megasas_reset_fusion()
4544 dev_dbg(&instance->pdev->dev, "waiting for [%d] " in megasas_reset_fusion()
4547 } while ((atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) && in megasas_reset_fusion()
4550 if (atomic_read(&instance->adprecovery) == MEGASAS_HBA_OPERATIONAL) { in megasas_reset_fusion()
4551 dev_info(&instance->pdev->dev, "OCR done for IO " in megasas_reset_fusion()
4555 dev_info(&instance->pdev->dev, "Controller is not " in megasas_reset_fusion()
4564 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_reset_fusion()
4565 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_reset_fusion()
4566 set_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags); in megasas_reset_fusion()
4567 set_bit(MEGASAS_FUSION_OCR_NOT_POSSIBLE, &instance->reset_flags); in megasas_reset_fusion()
4568 atomic_set(&instance->adprecovery, MEGASAS_ADPRESET_SM_POLLING); in megasas_reset_fusion()
4569 instance->instancet->disable_intr(instance); in megasas_reset_fusion()
4570 megasas_sync_irqs((unsigned long)instance); in megasas_reset_fusion()
4573 if (megasas_wait_for_outstanding_fusion(instance, reason, in megasas_reset_fusion()
4575 atomic_set(&instance->adprecovery, MEGASAS_ADPRESET_SM_INFAULT); in megasas_reset_fusion()
4576 dev_warn(&instance->pdev->dev, "resetting fusion " in megasas_reset_fusion()
4577 "adapter scsi%d.\n", instance->host->host_no); in megasas_reset_fusion()
4582 dev_info(&instance->pdev->dev, "\nPending SCSI commands:\n"); in megasas_reset_fusion()
4585 for (i = 0 ; i < instance->max_scsi_cmds; i++) { in megasas_reset_fusion()
4588 if (instance->adapter_type == VENTURA_SERIES) { in megasas_reset_fusion()
4589 r1_cmd = fusion->cmd_list[i + instance->max_fw_cmds]; in megasas_reset_fusion()
4590 megasas_return_cmd_fusion(instance, r1_cmd); in megasas_reset_fusion()
4602 megasas_check_mpio_paths(instance, in megasas_reset_fusion()
4604 if (instance->ldio_threshold && in megasas_reset_fusion()
4606 atomic_dec(&instance->ldio_outstanding); in megasas_reset_fusion()
4607 megasas_return_cmd_fusion(instance, cmd_fusion); in megasas_reset_fusion()
4613 atomic_set(&instance->fw_outstanding, 0); in megasas_reset_fusion()
4615 status_reg = instance->instancet->read_fw_status_reg( in megasas_reset_fusion()
4616 instance->reg_set); in megasas_reset_fusion()
4619 if (instance->disableOnlineCtrlReset || in megasas_reset_fusion()
4622 dev_warn(&instance->pdev->dev, "Reset not supported" in megasas_reset_fusion()
4624 instance->host->host_no); in megasas_reset_fusion()
4625 megaraid_sas_kill_hba(instance); in megasas_reset_fusion()
4626 instance->skip_heartbeat_timer_del = 1; in megasas_reset_fusion()
4632 if (instance->requestorId && !reason) { in megasas_reset_fusion()
4640 if (instance->instancet->adp_reset in megasas_reset_fusion()
4641 (instance, instance->reg_set)) in megasas_reset_fusion()
4645 if (megasas_transition_to_ready(instance, 1)) { in megasas_reset_fusion()
4646 dev_warn(&instance->pdev->dev, in megasas_reset_fusion()
4648 "scsi%d.\n", instance->host->host_no); in megasas_reset_fusion()
4649 if (instance->requestorId && !reason) in megasas_reset_fusion()
4654 megasas_reset_reply_desc(instance); in megasas_reset_fusion()
4655 megasas_fusion_update_can_queue(instance, OCR_CONTEXT); in megasas_reset_fusion()
4657 if (megasas_ioc_init_fusion(instance)) { in megasas_reset_fusion()
4658 if (instance->requestorId && !reason) in megasas_reset_fusion()
4664 if (megasas_get_ctrl_info(instance)) { in megasas_reset_fusion()
4665 dev_info(&instance->pdev->dev, in megasas_reset_fusion()
4668 megaraid_sas_kill_hba(instance); in megasas_reset_fusion()
4673 megasas_refire_mgmt_cmd(instance); in megasas_reset_fusion()
4681 if (!megasas_get_map_info(instance)) in megasas_reset_fusion()
4682 megasas_sync_map_info(instance); in megasas_reset_fusion()
4684 megasas_setup_jbod_map(instance); in megasas_reset_fusion()
4687 if (instance->adapter_type == VENTURA_SERIES) { in megasas_reset_fusion()
4697 &instance->reset_flags); in megasas_reset_fusion()
4698 instance->instancet->enable_intr(instance); in megasas_reset_fusion()
4701 if ((instance->tgt_prop) && in megasas_reset_fusion()
4702 (instance->nvme_page_size)) in megasas_reset_fusion()
4703 ret_target_prop = megasas_get_target_prop(instance, sdev); in megasas_reset_fusion()
4709 atomic_set(&instance->adprecovery, MEGASAS_HBA_OPERATIONAL); in megasas_reset_fusion()
4711 dev_info(&instance->pdev->dev, "Interrupts are enabled and" in megasas_reset_fusion()
4713 instance->host->host_no); in megasas_reset_fusion()
4716 if (instance->requestorId) { in megasas_reset_fusion()
4717 if (!megasas_sriov_start_heartbeat(instance, 0)) in megasas_reset_fusion()
4718 megasas_start_timer(instance); in megasas_reset_fusion()
4720 instance->skip_heartbeat_timer_del = 1; in megasas_reset_fusion()
4723 if (instance->crash_dump_drv_support && in megasas_reset_fusion()
4724 instance->crash_dump_app_support) in megasas_reset_fusion()
4725 megasas_set_crash_dump_params(instance, in megasas_reset_fusion()
4728 megasas_set_crash_dump_params(instance, in megasas_reset_fusion()
4734 dev_warn(&instance->pdev->dev, in megasas_reset_fusion()
4736 instance->host->host_no); in megasas_reset_fusion()
4742 dev_warn(&instance->pdev->dev, "Reset failed, killing " in megasas_reset_fusion()
4743 "adapter scsi%d.\n", instance->host->host_no); in megasas_reset_fusion()
4744 megaraid_sas_kill_hba(instance); in megasas_reset_fusion()
4745 instance->skip_heartbeat_timer_del = 1; in megasas_reset_fusion()
4749 if (instance->requestorId) { in megasas_reset_fusion()
4750 megasas_start_timer(instance); in megasas_reset_fusion()
4752 clear_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags); in megasas_reset_fusion()
4753 instance->instancet->enable_intr(instance); in megasas_reset_fusion()
4754 atomic_set(&instance->adprecovery, MEGASAS_HBA_OPERATIONAL); in megasas_reset_fusion()
4757 clear_bit(MEGASAS_FUSION_OCR_NOT_POSSIBLE, &instance->reset_flags); in megasas_reset_fusion()
4758 mutex_unlock(&instance->reset_mutex); in megasas_reset_fusion()
4765 struct megasas_instance *instance = in megasas_fusion_crash_dump_wq() local
4771 status_reg = instance->instancet->read_fw_status_reg(instance->reg_set); in megasas_fusion_crash_dump_wq()
4777 if (instance->drv_buf_index == 0) { in megasas_fusion_crash_dump_wq()
4781 if (instance->drv_buf_alloc) { in megasas_fusion_crash_dump_wq()
4782 dev_info(&instance->pdev->dev, "earlier crash dump is " in megasas_fusion_crash_dump_wq()
4787 &instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
4788 readl(&instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
4791 megasas_alloc_host_crash_buffer(instance); in megasas_fusion_crash_dump_wq()
4792 dev_info(&instance->pdev->dev, "Number of host crash buffers " in megasas_fusion_crash_dump_wq()
4793 "allocated: %d\n", instance->drv_buf_alloc); in megasas_fusion_crash_dump_wq()
4801 if (instance->drv_buf_index >= (instance->drv_buf_alloc)) { in megasas_fusion_crash_dump_wq()
4802 dev_info(&instance->pdev->dev, "Driver is done copying " in megasas_fusion_crash_dump_wq()
4803 "the buffer: %d\n", instance->drv_buf_alloc); in megasas_fusion_crash_dump_wq()
4807 memcpy(instance->crash_buf[instance->drv_buf_index], in megasas_fusion_crash_dump_wq()
4808 instance->crash_dump_buf, CRASH_DMA_BUF_SIZE); in megasas_fusion_crash_dump_wq()
4809 instance->drv_buf_index++; in megasas_fusion_crash_dump_wq()
4814 dev_info(&instance->pdev->dev, "Crash Dump is available,number " in megasas_fusion_crash_dump_wq()
4815 "of copied buffers: %d\n", instance->drv_buf_index); in megasas_fusion_crash_dump_wq()
4816 instance->fw_crash_buffer_size = instance->drv_buf_index; in megasas_fusion_crash_dump_wq()
4817 instance->fw_crash_state = AVAILABLE; in megasas_fusion_crash_dump_wq()
4818 instance->drv_buf_index = 0; in megasas_fusion_crash_dump_wq()
4819 writel(status_reg, &instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
4820 readl(&instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
4822 megasas_reset_fusion(instance->host, 0); in megasas_fusion_crash_dump_wq()
4824 writel(status_reg, &instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
4825 readl(&instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
4833 struct megasas_instance *instance = in megasas_fusion_ocr_wq() local
4836 megasas_reset_fusion(instance->host, 0); in megasas_fusion_ocr_wq()
4841 megasas_alloc_fusion_context(struct megasas_instance *instance) in megasas_alloc_fusion_context() argument
4845 instance->ctrl_context = kzalloc(sizeof(struct fusion_context), in megasas_alloc_fusion_context()
4847 if (!instance->ctrl_context) { in megasas_alloc_fusion_context()
4848 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_alloc_fusion_context()
4853 fusion = instance->ctrl_context; in megasas_alloc_fusion_context()
4865 dev_err(&instance->pdev->dev, "Failed from %s %d\n", in megasas_alloc_fusion_context()
4881 dev_err(&instance->pdev->dev, "Failed to allocate load_balance_info, " in megasas_alloc_fusion_context()
4889 megasas_free_fusion_context(struct megasas_instance *instance) in megasas_free_fusion_context() argument
4891 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_fusion_context()