Lines Matching full:fusion
233 struct fusion_context *fusion; in megasas_get_cmd_fusion() local
235 fusion = instance->ctrl_context; in megasas_get_cmd_fusion()
236 return fusion->cmd_list[blk_tag]; in megasas_get_cmd_fusion()
301 * This function is only for fusion controllers.
395 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_cmds_fusion() local
398 if (fusion->sense) in megasas_free_cmds_fusion()
399 dma_pool_free(fusion->sense_dma_pool, fusion->sense, in megasas_free_cmds_fusion()
400 fusion->sense_phys_addr); in megasas_free_cmds_fusion()
403 if (fusion->cmd_list) { in megasas_free_cmds_fusion()
405 cmd = fusion->cmd_list[i]; in megasas_free_cmds_fusion()
408 dma_pool_free(fusion->sg_dma_pool, in megasas_free_cmds_fusion()
414 kfree(fusion->cmd_list); in megasas_free_cmds_fusion()
417 if (fusion->sg_dma_pool) { in megasas_free_cmds_fusion()
418 dma_pool_destroy(fusion->sg_dma_pool); in megasas_free_cmds_fusion()
419 fusion->sg_dma_pool = NULL; in megasas_free_cmds_fusion()
421 if (fusion->sense_dma_pool) { in megasas_free_cmds_fusion()
422 dma_pool_destroy(fusion->sense_dma_pool); in megasas_free_cmds_fusion()
423 fusion->sense_dma_pool = NULL; in megasas_free_cmds_fusion()
434 if (fusion->req_frames_desc) in megasas_free_cmds_fusion()
436 fusion->request_alloc_sz, fusion->req_frames_desc, in megasas_free_cmds_fusion()
437 fusion->req_frames_desc_phys); in megasas_free_cmds_fusion()
438 if (fusion->io_request_frames) in megasas_free_cmds_fusion()
439 dma_pool_free(fusion->io_request_frames_pool, in megasas_free_cmds_fusion()
440 fusion->io_request_frames, in megasas_free_cmds_fusion()
441 fusion->io_request_frames_phys); in megasas_free_cmds_fusion()
442 if (fusion->io_request_frames_pool) { in megasas_free_cmds_fusion()
443 dma_pool_destroy(fusion->io_request_frames_pool); in megasas_free_cmds_fusion()
444 fusion->io_request_frames_pool = NULL; in megasas_free_cmds_fusion()
457 struct fusion_context *fusion; in megasas_create_sg_sense_fusion() local
462 fusion = instance->ctrl_context; in megasas_create_sg_sense_fusion()
466 fusion->sg_dma_pool = in megasas_create_sg_sense_fusion()
471 fusion->sense_dma_pool = in megasas_create_sg_sense_fusion()
475 if (!fusion->sense_dma_pool || !fusion->sg_dma_pool) { in megasas_create_sg_sense_fusion()
481 fusion->sense = dma_pool_alloc(fusion->sense_dma_pool, in megasas_create_sg_sense_fusion()
482 GFP_KERNEL, &fusion->sense_phys_addr); in megasas_create_sg_sense_fusion()
483 if (!fusion->sense) { in megasas_create_sg_sense_fusion()
500 if (!megasas_check_same_4gb_region(instance, fusion->sense_phys_addr, in megasas_create_sg_sense_fusion()
502 dma_pool_free(fusion->sense_dma_pool, fusion->sense, in megasas_create_sg_sense_fusion()
503 fusion->sense_phys_addr); in megasas_create_sg_sense_fusion()
504 fusion->sense = NULL; in megasas_create_sg_sense_fusion()
505 dma_pool_destroy(fusion->sense_dma_pool); in megasas_create_sg_sense_fusion()
507 fusion->sense_dma_pool = in megasas_create_sg_sense_fusion()
511 if (!fusion->sense_dma_pool) { in megasas_create_sg_sense_fusion()
516 fusion->sense = dma_pool_alloc(fusion->sense_dma_pool, in megasas_create_sg_sense_fusion()
518 &fusion->sense_phys_addr); in megasas_create_sg_sense_fusion()
519 if (!fusion->sense) { in megasas_create_sg_sense_fusion()
530 cmd = fusion->cmd_list[i]; in megasas_create_sg_sense_fusion()
531 cmd->sg_frame = dma_pool_alloc(fusion->sg_dma_pool, in megasas_create_sg_sense_fusion()
535 cmd->sense = (u8 *)fusion->sense + offset; in megasas_create_sg_sense_fusion()
536 cmd->sense_phys_addr = fusion->sense_phys_addr + offset; in megasas_create_sg_sense_fusion()
547 cmd = fusion->cmd_list[i]; in megasas_create_sg_sense_fusion()
549 cmd->sense = (u8 *)fusion->sense + offset; in megasas_create_sg_sense_fusion()
550 cmd->sense_phys_addr = fusion->sense_phys_addr + offset; in megasas_create_sg_sense_fusion()
561 struct fusion_context *fusion; in megasas_alloc_cmdlist_fusion() local
563 fusion = instance->ctrl_context; in megasas_alloc_cmdlist_fusion()
568 * fusion->cmd_list is an array of struct megasas_cmd_fusion pointers. in megasas_alloc_cmdlist_fusion()
572 fusion->cmd_list = in megasas_alloc_cmdlist_fusion()
575 if (!fusion->cmd_list) { in megasas_alloc_cmdlist_fusion()
582 fusion->cmd_list[i] = kzalloc(sizeof(struct megasas_cmd_fusion), in megasas_alloc_cmdlist_fusion()
584 if (!fusion->cmd_list[i]) { in megasas_alloc_cmdlist_fusion()
586 kfree(fusion->cmd_list[j]); in megasas_alloc_cmdlist_fusion()
587 kfree(fusion->cmd_list); in megasas_alloc_cmdlist_fusion()
600 struct fusion_context *fusion; in megasas_alloc_request_fusion() local
602 fusion = instance->ctrl_context; in megasas_alloc_request_fusion()
605 fusion->io_request_frames_pool = in megasas_alloc_request_fusion()
607 fusion->io_frames_alloc_sz, 16, 0); in megasas_alloc_request_fusion()
609 if (!fusion->io_request_frames_pool) { in megasas_alloc_request_fusion()
615 fusion->io_request_frames = in megasas_alloc_request_fusion()
616 dma_pool_alloc(fusion->io_request_frames_pool, in megasas_alloc_request_fusion()
618 &fusion->io_request_frames_phys); in megasas_alloc_request_fusion()
619 if (!fusion->io_request_frames) { in megasas_alloc_request_fusion()
622 dma_pool_destroy(fusion->io_request_frames_pool); in megasas_alloc_request_fusion()
633 fusion->io_request_frames_phys, in megasas_alloc_request_fusion()
634 fusion->io_frames_alloc_sz)) { in megasas_alloc_request_fusion()
635 dma_pool_free(fusion->io_request_frames_pool, in megasas_alloc_request_fusion()
636 fusion->io_request_frames, in megasas_alloc_request_fusion()
637 fusion->io_request_frames_phys); in megasas_alloc_request_fusion()
638 fusion->io_request_frames = NULL; in megasas_alloc_request_fusion()
639 dma_pool_destroy(fusion->io_request_frames_pool); in megasas_alloc_request_fusion()
641 fusion->io_request_frames_pool = in megasas_alloc_request_fusion()
644 fusion->io_frames_alloc_sz, in megasas_alloc_request_fusion()
645 roundup_pow_of_two(fusion->io_frames_alloc_sz), in megasas_alloc_request_fusion()
648 if (!fusion->io_request_frames_pool) { in megasas_alloc_request_fusion()
654 fusion->io_request_frames = in megasas_alloc_request_fusion()
655 dma_pool_alloc(fusion->io_request_frames_pool, in megasas_alloc_request_fusion()
657 &fusion->io_request_frames_phys); in megasas_alloc_request_fusion()
659 if (!fusion->io_request_frames) { in megasas_alloc_request_fusion()
666 fusion->req_frames_desc = in megasas_alloc_request_fusion()
668 fusion->request_alloc_sz, in megasas_alloc_request_fusion()
669 &fusion->req_frames_desc_phys, GFP_KERNEL); in megasas_alloc_request_fusion()
670 if (!fusion->req_frames_desc) { in megasas_alloc_request_fusion()
683 struct fusion_context *fusion; in megasas_alloc_reply_fusion() local
685 fusion = instance->ctrl_context; in megasas_alloc_reply_fusion()
688 fusion->reply_frames_desc_pool = in megasas_alloc_reply_fusion()
690 fusion->reply_alloc_sz * count, 16, 0); in megasas_alloc_reply_fusion()
692 if (!fusion->reply_frames_desc_pool) { in megasas_alloc_reply_fusion()
698 fusion->reply_frames_desc[0] = in megasas_alloc_reply_fusion()
699 dma_pool_alloc(fusion->reply_frames_desc_pool, in megasas_alloc_reply_fusion()
700 GFP_KERNEL, &fusion->reply_frames_desc_phys[0]); in megasas_alloc_reply_fusion()
701 if (!fusion->reply_frames_desc[0]) { in megasas_alloc_reply_fusion()
708 fusion->reply_frames_desc_phys[0], in megasas_alloc_reply_fusion()
709 (fusion->reply_alloc_sz * count))) { in megasas_alloc_reply_fusion()
710 dma_pool_free(fusion->reply_frames_desc_pool, in megasas_alloc_reply_fusion()
711 fusion->reply_frames_desc[0], in megasas_alloc_reply_fusion()
712 fusion->reply_frames_desc_phys[0]); in megasas_alloc_reply_fusion()
713 fusion->reply_frames_desc[0] = NULL; in megasas_alloc_reply_fusion()
714 dma_pool_destroy(fusion->reply_frames_desc_pool); in megasas_alloc_reply_fusion()
716 fusion->reply_frames_desc_pool = in megasas_alloc_reply_fusion()
719 fusion->reply_alloc_sz * count, in megasas_alloc_reply_fusion()
720 roundup_pow_of_two(fusion->reply_alloc_sz * count), in megasas_alloc_reply_fusion()
723 if (!fusion->reply_frames_desc_pool) { in megasas_alloc_reply_fusion()
729 fusion->reply_frames_desc[0] = in megasas_alloc_reply_fusion()
730 dma_pool_alloc(fusion->reply_frames_desc_pool, in megasas_alloc_reply_fusion()
732 &fusion->reply_frames_desc_phys[0]); in megasas_alloc_reply_fusion()
734 if (!fusion->reply_frames_desc[0]) { in megasas_alloc_reply_fusion()
741 reply_desc = fusion->reply_frames_desc[0]; in megasas_alloc_reply_fusion()
742 for (i = 0; i < fusion->reply_q_depth * count; i++, reply_desc++) in megasas_alloc_reply_fusion()
749 fusion->reply_frames_desc[i + 1] = in megasas_alloc_reply_fusion()
750 fusion->reply_frames_desc[i] + in megasas_alloc_reply_fusion()
751 (fusion->reply_alloc_sz)/sizeof(union MPI2_REPLY_DESCRIPTORS_UNION); in megasas_alloc_reply_fusion()
760 struct fusion_context *fusion; in megasas_alloc_rdpq_fusion() local
767 fusion = instance->ctrl_context; in megasas_alloc_rdpq_fusion()
768 chunk_size = fusion->reply_alloc_sz * RDPQ_MAX_INDEX_IN_ONE_CHUNK; in megasas_alloc_rdpq_fusion()
772 fusion->rdpq_virt = dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_rdpq_fusion()
773 array_size, &fusion->rdpq_phys, in megasas_alloc_rdpq_fusion()
775 if (!fusion->rdpq_virt) { in megasas_alloc_rdpq_fusion()
783 fusion->reply_frames_desc_pool = dma_pool_create("mr_rdpq", in megasas_alloc_rdpq_fusion()
786 fusion->reply_frames_desc_pool_align = in megasas_alloc_rdpq_fusion()
793 if (!fusion->reply_frames_desc_pool || in megasas_alloc_rdpq_fusion()
794 !fusion->reply_frames_desc_pool_align) { in megasas_alloc_rdpq_fusion()
812 dma_pool_alloc(fusion->reply_frames_desc_pool, in megasas_alloc_rdpq_fusion()
833 dma_pool_free(fusion->reply_frames_desc_pool, in megasas_alloc_rdpq_fusion()
838 dma_pool_alloc(fusion->reply_frames_desc_pool_align, in megasas_alloc_rdpq_fusion()
846 fusion->rdpq_tracker[i].dma_pool_ptr = in megasas_alloc_rdpq_fusion()
847 fusion->reply_frames_desc_pool_align; in megasas_alloc_rdpq_fusion()
849 fusion->rdpq_tracker[i].dma_pool_ptr = in megasas_alloc_rdpq_fusion()
850 fusion->reply_frames_desc_pool; in megasas_alloc_rdpq_fusion()
853 fusion->rdpq_tracker[i].pool_entry_phys = rdpq_chunk_phys[i]; in megasas_alloc_rdpq_fusion()
854 fusion->rdpq_tracker[i].pool_entry_virt = rdpq_chunk_virt[i]; in megasas_alloc_rdpq_fusion()
863 offset = fusion->reply_alloc_sz * i; in megasas_alloc_rdpq_fusion()
864 fusion->rdpq_virt[abs_index].RDPQBaseAddress = in megasas_alloc_rdpq_fusion()
866 fusion->reply_frames_desc_phys[abs_index] = in megasas_alloc_rdpq_fusion()
868 fusion->reply_frames_desc[abs_index] = in megasas_alloc_rdpq_fusion()
871 reply_desc = fusion->reply_frames_desc[abs_index]; in megasas_alloc_rdpq_fusion()
872 for (j = 0; j < fusion->reply_q_depth; j++, reply_desc++) in megasas_alloc_rdpq_fusion()
884 struct fusion_context *fusion; in megasas_free_rdpq_fusion() local
886 fusion = instance->ctrl_context; in megasas_free_rdpq_fusion()
889 if (fusion->rdpq_tracker[i].pool_entry_virt) in megasas_free_rdpq_fusion()
890 dma_pool_free(fusion->rdpq_tracker[i].dma_pool_ptr, in megasas_free_rdpq_fusion()
891 fusion->rdpq_tracker[i].pool_entry_virt, in megasas_free_rdpq_fusion()
892 fusion->rdpq_tracker[i].pool_entry_phys); in megasas_free_rdpq_fusion()
896 dma_pool_destroy(fusion->reply_frames_desc_pool); in megasas_free_rdpq_fusion()
897 dma_pool_destroy(fusion->reply_frames_desc_pool_align); in megasas_free_rdpq_fusion()
899 if (fusion->rdpq_virt) in megasas_free_rdpq_fusion()
902 fusion->rdpq_virt, fusion->rdpq_phys); in megasas_free_rdpq_fusion()
908 struct fusion_context *fusion; in megasas_free_reply_fusion() local
910 fusion = instance->ctrl_context; in megasas_free_reply_fusion()
912 if (fusion->reply_frames_desc[0]) in megasas_free_reply_fusion()
913 dma_pool_free(fusion->reply_frames_desc_pool, in megasas_free_reply_fusion()
914 fusion->reply_frames_desc[0], in megasas_free_reply_fusion()
915 fusion->reply_frames_desc_phys[0]); in megasas_free_reply_fusion()
917 dma_pool_destroy(fusion->reply_frames_desc_pool); in megasas_free_reply_fusion()
942 struct fusion_context *fusion; in megasas_alloc_cmds_fusion() local
949 fusion = instance->ctrl_context; in megasas_alloc_cmds_fusion()
965 io_req_base = fusion->io_request_frames + MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE; in megasas_alloc_cmds_fusion()
966 io_req_base_phys = fusion->io_request_frames_phys + MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE; in megasas_alloc_cmds_fusion()
969 * Add all the commands to command pool (fusion->cmd_pool) in megasas_alloc_cmds_fusion()
974 cmd = fusion->cmd_list[i]; in megasas_alloc_cmds_fusion()
1057 struct fusion_context *fusion; in megasas_ioc_init_fusion() local
1068 fusion = instance->ctrl_context; in megasas_ioc_init_fusion()
1070 ioc_init_handle = fusion->ioc_init_request_phys; in megasas_ioc_init_fusion()
1071 IOCInitMessage = fusion->ioc_init_request; in megasas_ioc_init_fusion()
1073 cmd = fusion->ioc_init_cmd; in megasas_ioc_init_fusion()
1124 IOCInitMessage->ReplyDescriptorPostQueueDepth = cpu_to_le16(fusion->reply_q_depth); in megasas_ioc_init_fusion()
1126 cpu_to_le64(fusion->rdpq_phys) : in megasas_ioc_init_fusion()
1127 cpu_to_le64(fusion->reply_frames_desc_phys[0]); in megasas_ioc_init_fusion()
1130 IOCInitMessage->SystemRequestFrameBaseAddress = cpu_to_le64(fusion->io_request_frames_phys); in megasas_ioc_init_fusion()
1131 IOCInitMessage->SenseBufferAddressHigh = cpu_to_le32(upper_32_bits(fusion->sense_phys_addr)); in megasas_ioc_init_fusion()
1276 struct fusion_context *fusion = instance->ctrl_context; in megasas_sync_pd_seq_num() local
1280 pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id & 1)]; in megasas_sync_pd_seq_num()
1281 pd_seq_h = fusion->pd_seq_phys[(instance->pd_seq_map_id & 1)]; in megasas_sync_pd_seq_num()
1370 struct fusion_context *fusion; in megasas_get_ld_map_info() local
1379 fusion = instance->ctrl_context; in megasas_get_ld_map_info()
1381 if (!fusion) { in megasas_get_ld_map_info()
1388 size_map_info = fusion->current_map_sz; in megasas_get_ld_map_info()
1390 ci = (void *) fusion->ld_map[(instance->map_id & 1)]; in megasas_get_ld_map_info()
1391 ci_h = fusion->ld_map_phys[(instance->map_id & 1)]; in megasas_get_ld_map_info()
1399 memset(ci, 0, fusion->max_map_sz); in megasas_get_ld_map_info()
1431 struct fusion_context *fusion = instance->ctrl_context; in megasas_get_map_info() local
1433 fusion->fast_path_io = 0; in megasas_get_map_info()
1436 fusion->fast_path_io = 1; in megasas_get_map_info()
1458 struct fusion_context *fusion; in megasas_sync_map_info() local
1473 fusion = instance->ctrl_context; in megasas_sync_map_info()
1475 if (!fusion) { in megasas_sync_map_info()
1480 map = fusion->ld_drv_map[instance->map_id & 1]; in megasas_sync_map_info()
1489 fusion->ld_map[(instance->map_id - 1) & 1]; in megasas_sync_map_info()
1490 memset(ci, 0, fusion->max_map_sz); in megasas_sync_map_info()
1492 ci_h = fusion->ld_map_phys[(instance->map_id - 1) & 1]; in megasas_sync_map_info()
1502 size_map_info = fusion->current_map_sz; in megasas_sync_map_info()
1605 struct fusion_context *fusion; in megasas_allocate_raid_maps() local
1608 fusion = instance->ctrl_context; in megasas_allocate_raid_maps()
1610 fusion->drv_map_pages = get_order(fusion->drv_map_sz); in megasas_allocate_raid_maps()
1613 fusion->ld_map[i] = NULL; in megasas_allocate_raid_maps()
1615 fusion->ld_drv_map[i] = (void *) in megasas_allocate_raid_maps()
1617 fusion->drv_map_pages); in megasas_allocate_raid_maps()
1619 if (!fusion->ld_drv_map[i]) { in megasas_allocate_raid_maps()
1620 fusion->ld_drv_map[i] = vzalloc(fusion->drv_map_sz); in megasas_allocate_raid_maps()
1622 if (!fusion->ld_drv_map[i]) { in megasas_allocate_raid_maps()
1626 fusion->drv_map_sz); in megasas_allocate_raid_maps()
1633 fusion->ld_map[i] = dma_alloc_coherent(&instance->pdev->dev, in megasas_allocate_raid_maps()
1634 fusion->max_map_sz, in megasas_allocate_raid_maps()
1635 &fusion->ld_map_phys[i], in megasas_allocate_raid_maps()
1637 if (!fusion->ld_map[i]) { in megasas_allocate_raid_maps()
1649 if (fusion->ld_map[i]) in megasas_allocate_raid_maps()
1651 fusion->max_map_sz, in megasas_allocate_raid_maps()
1652 fusion->ld_map[i], in megasas_allocate_raid_maps()
1653 fusion->ld_map_phys[i]); in megasas_allocate_raid_maps()
1658 if (fusion->ld_drv_map[i]) { in megasas_allocate_raid_maps()
1659 if (is_vmalloc_addr(fusion->ld_drv_map[i])) in megasas_allocate_raid_maps()
1660 vfree(fusion->ld_drv_map[i]); in megasas_allocate_raid_maps()
1662 free_pages((ulong)fusion->ld_drv_map[i], in megasas_allocate_raid_maps()
1663 fusion->drv_map_pages); in megasas_allocate_raid_maps()
1680 struct fusion_context *fusion; in megasas_configure_queue_sizes() local
1683 fusion = instance->ctrl_context; in megasas_configure_queue_sizes()
1695 fusion->reply_q_depth = 2 * ((max_cmd + 1 + 15) / 16) * 16; in megasas_configure_queue_sizes()
1697 fusion->request_alloc_sz = sizeof(union MEGASAS_REQUEST_DESCRIPTOR_UNION) * in megasas_configure_queue_sizes()
1699 fusion->reply_alloc_sz = sizeof(union MPI2_REPLY_DESCRIPTORS_UNION) * in megasas_configure_queue_sizes()
1700 (fusion->reply_q_depth); in megasas_configure_queue_sizes()
1701 fusion->io_frames_alloc_sz = MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE + in megasas_configure_queue_sizes()
1708 struct fusion_context *fusion; in megasas_alloc_ioc_init_frame() local
1711 fusion = instance->ctrl_context; in megasas_alloc_ioc_init_frame()
1732 fusion->ioc_init_cmd = cmd; in megasas_alloc_ioc_init_frame()
1742 struct fusion_context *fusion; in megasas_free_ioc_init_cmd() local
1744 fusion = instance->ctrl_context; in megasas_free_ioc_init_cmd()
1746 if (fusion->ioc_init_cmd && fusion->ioc_init_cmd->frame) in megasas_free_ioc_init_cmd()
1749 fusion->ioc_init_cmd->frame, in megasas_free_ioc_init_cmd()
1750 fusion->ioc_init_cmd->frame_phys_addr); in megasas_free_ioc_init_cmd()
1752 kfree(fusion->ioc_init_cmd); in megasas_free_ioc_init_cmd()
1764 struct fusion_context *fusion; in megasas_init_adapter_fusion() local
1769 fusion = instance->ctrl_context; in megasas_init_adapter_fusion()
1805 fusion->max_sge_in_main_msg = in megasas_init_adapter_fusion()
1809 fusion->max_sge_in_chain = in megasas_init_adapter_fusion()
1814 rounddown_pow_of_two(fusion->max_sge_in_main_msg in megasas_init_adapter_fusion()
1815 + fusion->max_sge_in_chain - 2); in megasas_init_adapter_fusion()
1818 fusion->chain_offset_mfi_pthru = in megasas_init_adapter_fusion()
1821 fusion->chain_offset_io_request = in megasas_init_adapter_fusion()
1827 fusion->last_reply_idx[i] = 0; in megasas_init_adapter_fusion()
1830 * For fusion adapters, 3 commands for IOCTL and 8 commands in megasas_init_adapter_fusion()
1877 fusion->fast_path_io = 0; in megasas_init_adapter_fusion()
1983 * @fusion: fusion context
1991 map_cmd_status(struct fusion_context *fusion, in map_cmd_status() argument
2104 * @cmd: Fusion command frame
2241 struct fusion_context *fusion; in megasas_make_sgl_fusion() local
2243 fusion = instance->ctrl_context; in megasas_make_sgl_fusion()
2247 sgl_ptr_end += fusion->max_sge_in_main_msg - 1; in megasas_make_sgl_fusion()
2261 if ((sg_processed == (fusion->max_sge_in_main_msg - 1)) && in megasas_make_sgl_fusion()
2262 (sge_count > fusion->max_sge_in_main_msg)) { in megasas_make_sgl_fusion()
2270 fusion-> in megasas_make_sgl_fusion()
2276 fusion->chain_offset_io_request; in megasas_make_sgl_fusion()
2301 * @cmd: Fusion command pointer
2530 struct fusion_context *fusion = instance->ctrl_context; in megasas_stream_detect() local
2533 = fusion->stream_detect_by_ld[device_id]; in megasas_stream_detect()
2602 * @fusion: Fusion context
2611 megasas_set_raidflag_cpu_affinity(struct fusion_context *fusion, in megasas_set_raidflag_cpu_affinity() argument
2672 if ((fusion->pcie_bw_limitation) && (raid->level == 1) && (!is_read) && in megasas_set_raidflag_cpu_affinity()
2700 struct fusion_context *fusion; in megasas_build_ldio_fusion() local
2711 fusion = instance->ctrl_context; in megasas_build_ldio_fusion()
2787 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_ldio_fusion()
2793 if (!raid || (!fusion->fast_path_io)) { in megasas_build_ldio_fusion()
2820 } else if (fusion->pcie_bw_limitation && in megasas_build_ldio_fusion()
2847 megasas_set_raidflag_cpu_affinity(fusion, &io_request->RaidContext, in megasas_build_ldio_fusion()
2876 if (fusion->load_balance_info && in megasas_build_ldio_fusion()
2877 (fusion->load_balance_info[device_id].loadBalanceFlag) && in megasas_build_ldio_fusion()
2881 &fusion->load_balance_info[device_id], in megasas_build_ldio_fusion()
2953 struct fusion_context *fusion = instance->ctrl_context; in megasas_build_ld_nonrw_fusion() local
2963 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_ld_nonrw_fusion()
2972 if (fusion->fast_path_io && ( in megasas_build_ld_nonrw_fusion()
3049 struct fusion_context *fusion = instance->ctrl_context; in megasas_build_syspd_fusion() local
3050 pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id - 1) & 1]; in megasas_build_syspd_fusion()
3111 if (fusion->fast_path_io) { in megasas_build_syspd_fusion()
3113 fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_syspd_fusion()
3264 struct fusion_context *fusion; in megasas_get_request_descriptor() local
3266 fusion = instance->ctrl_context; in megasas_get_request_descriptor()
3267 p = fusion->req_frames_desc + in megasas_get_request_descriptor()
3282 struct fusion_context *fusion; in megasas_prepare_secondRaid1_IO() local
3283 fusion = instance->ctrl_context; in megasas_prepare_secondRaid1_IO()
3289 (fusion->max_sge_in_main_msg * sizeof(union MPI2_SGE_IO_UNION))); in megasas_prepare_secondRaid1_IO()
3416 struct fusion_context *fusion; in megasas_complete_r1_command() local
3422 fusion = instance->ctrl_context; in megasas_complete_r1_command()
3425 r1_cmd = fusion->cmd_list[peer_smid - 1]; in megasas_complete_r1_command()
3445 map_cmd_status(fusion, scmd_local, status, ex_status, in megasas_complete_r1_command()
3472 struct fusion_context *fusion; in complete_cmd_fusion() local
3485 fusion = instance->ctrl_context; in complete_cmd_fusion()
3490 desc = fusion->reply_frames_desc[MSIxIndex] + in complete_cmd_fusion()
3491 fusion->last_reply_idx[MSIxIndex]; in complete_cmd_fusion()
3509 cmd_fusion = fusion->cmd_list[smid - 1]; in complete_cmd_fusion()
3532 if (fusion->load_balance_info && in complete_cmd_fusion()
3536 lbinfo = &fusion->load_balance_info[device_id]; in complete_cmd_fusion()
3544 map_cmd_status(fusion, scmd_local, status, in complete_cmd_fusion()
3570 fusion->last_reply_idx[MSIxIndex]++; in complete_cmd_fusion()
3571 if (fusion->last_reply_idx[MSIxIndex] >= in complete_cmd_fusion()
3572 fusion->reply_q_depth) in complete_cmd_fusion()
3573 fusion->last_reply_idx[MSIxIndex] = 0; in complete_cmd_fusion()
3580 if (!fusion->last_reply_idx[MSIxIndex]) in complete_cmd_fusion()
3581 desc = fusion->reply_frames_desc[MSIxIndex]; in complete_cmd_fusion()
3603 fusion->last_reply_idx[MSIxIndex], in complete_cmd_fusion()
3607 fusion->last_reply_idx[MSIxIndex], in complete_cmd_fusion()
3625 fusion->last_reply_idx[MSIxIndex], in complete_cmd_fusion()
3629 fusion->last_reply_idx[MSIxIndex], in complete_cmd_fusion()
3783 struct fusion_context *fusion; in build_mpt_mfi_pass_thru() local
3786 fusion = instance->ctrl_context; in build_mpt_mfi_pass_thru()
3808 sgl_ptr_end += fusion->max_sge_in_main_msg - 1; in build_mpt_mfi_pass_thru()
3818 io_req->ChainOffset = fusion->chain_offset_mfi_pthru; in build_mpt_mfi_pass_thru()
4057 /* This function waits for outstanding commands on fusion to complete */
4167 struct fusion_context *fusion; in megasas_reset_reply_desc() local
4170 fusion = instance->ctrl_context; in megasas_reset_reply_desc()
4173 fusion->last_reply_idx[i] = 0; in megasas_reset_reply_desc()
4174 reply_desc = fusion->reply_frames_desc[i]; in megasas_reset_reply_desc()
4175 for (j = 0 ; j < fusion->reply_q_depth; j++, reply_desc++) in megasas_reset_reply_desc()
4189 struct fusion_context *fusion; in megasas_refire_mgmt_cmd() local
4198 fusion = instance->ctrl_context; in megasas_refire_mgmt_cmd()
4204 cmd_fusion = fusion->cmd_list[j]; in megasas_refire_mgmt_cmd()
4289 struct fusion_context *fusion; in megasas_return_polled_cmds() local
4292 fusion = instance->ctrl_context; in megasas_return_polled_cmds()
4295 cmd_fusion = fusion->cmd_list[i]; in megasas_return_polled_cmds()
4324 struct fusion_context *fusion; in megasas_track_scsiio() local
4325 fusion = instance->ctrl_context; in megasas_track_scsiio()
4328 cmd_fusion = fusion->cmd_list[i]; in megasas_track_scsiio()
4424 struct fusion_context *fusion = NULL; in megasas_issue_tm() local
4430 fusion = instance->ctrl_context; in megasas_issue_tm()
4506 scsi_lookup = fusion->cmd_list[smid_task - 1]; in megasas_issue_tm()
4544 * megasas_fusion_smid_lookup : Look for fusion command correpspodning to SCSI
4554 struct fusion_context *fusion; in megasas_fusion_smid_lookup() local
4558 fusion = instance->ctrl_context; in megasas_fusion_smid_lookup()
4561 cmd_fusion = fusion->cmd_list[i]; in megasas_fusion_smid_lookup()
4584 struct fusion_context *fusion; in megasas_get_tm_devhandle() local
4589 fusion = instance->ctrl_context; in megasas_get_tm_devhandle()
4595 pd_sync = (void *)fusion->pd_seq_sync in megasas_get_tm_devhandle()
4611 * megasas_task_abort_fusion : SCSI task abort function for fusion adapters
4691 * megasas_reset_target_fusion : target reset function for fusion adapters
4791 /* Core fusion reset function */
4797 struct fusion_context *fusion; in megasas_reset_fusion() local
4808 fusion = instance->ctrl_context; in megasas_reset_fusion()
4868 dev_warn(&instance->pdev->dev, "resetting fusion " in megasas_reset_fusion()
4878 cmd_fusion = fusion->cmd_list[i]; in megasas_reset_fusion()
4881 r1_cmd = fusion->cmd_list[i + instance->max_fw_cmds]; in megasas_reset_fusion()
4969 if (fusion->load_balance_info) in megasas_reset_fusion()
4970 memset(fusion->load_balance_info, 0, in megasas_reset_fusion()
4990 memset(fusion->stream_detect_by_ld[j], in megasas_reset_fusion()
4992 fusion->stream_detect_by_ld[j]->mru_bit_map in megasas_reset_fusion()
5083 /* Fusion Crash dump collection */
5167 /* Fusion OCR work queue */
5176 /* Allocate fusion context */
5180 struct fusion_context *fusion; in megasas_alloc_fusion_context() local
5190 fusion = instance->ctrl_context; in megasas_alloc_fusion_context()
5192 fusion->log_to_span_pages = get_order(MAX_LOGICAL_DRIVES_EXT * in megasas_alloc_fusion_context()
5194 fusion->log_to_span = in megasas_alloc_fusion_context()
5196 fusion->log_to_span_pages); in megasas_alloc_fusion_context()
5197 if (!fusion->log_to_span) { in megasas_alloc_fusion_context()
5198 fusion->log_to_span = in megasas_alloc_fusion_context()
5201 if (!fusion->log_to_span) { in megasas_alloc_fusion_context()
5208 fusion->load_balance_info_pages = get_order(MAX_LOGICAL_DRIVES_EXT * in megasas_alloc_fusion_context()
5210 fusion->load_balance_info = in megasas_alloc_fusion_context()
5212 fusion->load_balance_info_pages); in megasas_alloc_fusion_context()
5213 if (!fusion->load_balance_info) { in megasas_alloc_fusion_context()
5214 fusion->load_balance_info = in megasas_alloc_fusion_context()
5217 if (!fusion->load_balance_info) in megasas_alloc_fusion_context()
5228 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_fusion_context() local
5230 if (fusion) { in megasas_free_fusion_context()
5231 if (fusion->load_balance_info) { in megasas_free_fusion_context()
5232 if (is_vmalloc_addr(fusion->load_balance_info)) in megasas_free_fusion_context()
5233 vfree(fusion->load_balance_info); in megasas_free_fusion_context()
5235 free_pages((ulong)fusion->load_balance_info, in megasas_free_fusion_context()
5236 fusion->load_balance_info_pages); in megasas_free_fusion_context()
5239 if (fusion->log_to_span) { in megasas_free_fusion_context()
5240 if (is_vmalloc_addr(fusion->log_to_span)) in megasas_free_fusion_context()
5241 vfree(fusion->log_to_span); in megasas_free_fusion_context()
5243 free_pages((ulong)fusion->log_to_span, in megasas_free_fusion_context()
5244 fusion->log_to_span_pages); in megasas_free_fusion_context()
5247 kfree(fusion); in megasas_free_fusion_context()