Lines Matching full:fusion
267 struct fusion_context *fusion; in megasas_get_cmd_fusion() local
269 fusion = instance->ctrl_context; in megasas_get_cmd_fusion()
270 return fusion->cmd_list[blk_tag]; in megasas_get_cmd_fusion()
335 * This function is only for fusion controllers.
423 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_cmds_fusion() local
426 if (fusion->sense) in megasas_free_cmds_fusion()
427 dma_pool_free(fusion->sense_dma_pool, fusion->sense, in megasas_free_cmds_fusion()
428 fusion->sense_phys_addr); in megasas_free_cmds_fusion()
431 if (fusion->cmd_list) { in megasas_free_cmds_fusion()
433 cmd = fusion->cmd_list[i]; in megasas_free_cmds_fusion()
436 dma_pool_free(fusion->sg_dma_pool, in megasas_free_cmds_fusion()
442 kfree(fusion->cmd_list); in megasas_free_cmds_fusion()
445 if (fusion->sg_dma_pool) { in megasas_free_cmds_fusion()
446 dma_pool_destroy(fusion->sg_dma_pool); in megasas_free_cmds_fusion()
447 fusion->sg_dma_pool = NULL; in megasas_free_cmds_fusion()
449 if (fusion->sense_dma_pool) { in megasas_free_cmds_fusion()
450 dma_pool_destroy(fusion->sense_dma_pool); in megasas_free_cmds_fusion()
451 fusion->sense_dma_pool = NULL; in megasas_free_cmds_fusion()
462 if (fusion->req_frames_desc) in megasas_free_cmds_fusion()
464 fusion->request_alloc_sz, fusion->req_frames_desc, in megasas_free_cmds_fusion()
465 fusion->req_frames_desc_phys); in megasas_free_cmds_fusion()
466 if (fusion->io_request_frames) in megasas_free_cmds_fusion()
467 dma_pool_free(fusion->io_request_frames_pool, in megasas_free_cmds_fusion()
468 fusion->io_request_frames, in megasas_free_cmds_fusion()
469 fusion->io_request_frames_phys); in megasas_free_cmds_fusion()
470 if (fusion->io_request_frames_pool) { in megasas_free_cmds_fusion()
471 dma_pool_destroy(fusion->io_request_frames_pool); in megasas_free_cmds_fusion()
472 fusion->io_request_frames_pool = NULL; in megasas_free_cmds_fusion()
485 struct fusion_context *fusion; in megasas_create_sg_sense_fusion() local
490 fusion = instance->ctrl_context; in megasas_create_sg_sense_fusion()
494 fusion->sg_dma_pool = in megasas_create_sg_sense_fusion()
499 fusion->sense_dma_pool = in megasas_create_sg_sense_fusion()
503 if (!fusion->sense_dma_pool || !fusion->sg_dma_pool) { in megasas_create_sg_sense_fusion()
509 fusion->sense = dma_pool_alloc(fusion->sense_dma_pool, in megasas_create_sg_sense_fusion()
510 GFP_KERNEL, &fusion->sense_phys_addr); in megasas_create_sg_sense_fusion()
511 if (!fusion->sense) { in megasas_create_sg_sense_fusion()
528 if (!megasas_check_same_4gb_region(instance, fusion->sense_phys_addr, in megasas_create_sg_sense_fusion()
530 dma_pool_free(fusion->sense_dma_pool, fusion->sense, in megasas_create_sg_sense_fusion()
531 fusion->sense_phys_addr); in megasas_create_sg_sense_fusion()
532 fusion->sense = NULL; in megasas_create_sg_sense_fusion()
533 dma_pool_destroy(fusion->sense_dma_pool); in megasas_create_sg_sense_fusion()
535 fusion->sense_dma_pool = in megasas_create_sg_sense_fusion()
539 if (!fusion->sense_dma_pool) { in megasas_create_sg_sense_fusion()
544 fusion->sense = dma_pool_alloc(fusion->sense_dma_pool, in megasas_create_sg_sense_fusion()
546 &fusion->sense_phys_addr); in megasas_create_sg_sense_fusion()
547 if (!fusion->sense) { in megasas_create_sg_sense_fusion()
558 cmd = fusion->cmd_list[i]; in megasas_create_sg_sense_fusion()
559 cmd->sg_frame = dma_pool_alloc(fusion->sg_dma_pool, in megasas_create_sg_sense_fusion()
563 cmd->sense = (u8 *)fusion->sense + offset; in megasas_create_sg_sense_fusion()
564 cmd->sense_phys_addr = fusion->sense_phys_addr + offset; in megasas_create_sg_sense_fusion()
575 cmd = fusion->cmd_list[i]; in megasas_create_sg_sense_fusion()
577 cmd->sense = (u8 *)fusion->sense + offset; in megasas_create_sg_sense_fusion()
578 cmd->sense_phys_addr = fusion->sense_phys_addr + offset; in megasas_create_sg_sense_fusion()
589 struct fusion_context *fusion; in megasas_alloc_cmdlist_fusion() local
591 fusion = instance->ctrl_context; in megasas_alloc_cmdlist_fusion()
596 * fusion->cmd_list is an array of struct megasas_cmd_fusion pointers. in megasas_alloc_cmdlist_fusion()
600 fusion->cmd_list = in megasas_alloc_cmdlist_fusion()
603 if (!fusion->cmd_list) { in megasas_alloc_cmdlist_fusion()
610 fusion->cmd_list[i] = kzalloc(sizeof(struct megasas_cmd_fusion), in megasas_alloc_cmdlist_fusion()
612 if (!fusion->cmd_list[i]) { in megasas_alloc_cmdlist_fusion()
614 kfree(fusion->cmd_list[j]); in megasas_alloc_cmdlist_fusion()
615 kfree(fusion->cmd_list); in megasas_alloc_cmdlist_fusion()
628 struct fusion_context *fusion; in megasas_alloc_request_fusion() local
630 fusion = instance->ctrl_context; in megasas_alloc_request_fusion()
633 fusion->io_request_frames_pool = in megasas_alloc_request_fusion()
635 fusion->io_frames_alloc_sz, 16, 0); in megasas_alloc_request_fusion()
637 if (!fusion->io_request_frames_pool) { in megasas_alloc_request_fusion()
643 fusion->io_request_frames = in megasas_alloc_request_fusion()
644 dma_pool_alloc(fusion->io_request_frames_pool, in megasas_alloc_request_fusion()
646 &fusion->io_request_frames_phys); in megasas_alloc_request_fusion()
647 if (!fusion->io_request_frames) { in megasas_alloc_request_fusion()
650 dma_pool_destroy(fusion->io_request_frames_pool); in megasas_alloc_request_fusion()
661 fusion->io_request_frames_phys, in megasas_alloc_request_fusion()
662 fusion->io_frames_alloc_sz)) { in megasas_alloc_request_fusion()
663 dma_pool_free(fusion->io_request_frames_pool, in megasas_alloc_request_fusion()
664 fusion->io_request_frames, in megasas_alloc_request_fusion()
665 fusion->io_request_frames_phys); in megasas_alloc_request_fusion()
666 fusion->io_request_frames = NULL; in megasas_alloc_request_fusion()
667 dma_pool_destroy(fusion->io_request_frames_pool); in megasas_alloc_request_fusion()
669 fusion->io_request_frames_pool = in megasas_alloc_request_fusion()
672 fusion->io_frames_alloc_sz, in megasas_alloc_request_fusion()
673 roundup_pow_of_two(fusion->io_frames_alloc_sz), in megasas_alloc_request_fusion()
676 if (!fusion->io_request_frames_pool) { in megasas_alloc_request_fusion()
682 fusion->io_request_frames = in megasas_alloc_request_fusion()
683 dma_pool_alloc(fusion->io_request_frames_pool, in megasas_alloc_request_fusion()
685 &fusion->io_request_frames_phys); in megasas_alloc_request_fusion()
687 if (!fusion->io_request_frames) { in megasas_alloc_request_fusion()
694 fusion->req_frames_desc = in megasas_alloc_request_fusion()
696 fusion->request_alloc_sz, in megasas_alloc_request_fusion()
697 &fusion->req_frames_desc_phys, GFP_KERNEL); in megasas_alloc_request_fusion()
698 if (!fusion->req_frames_desc) { in megasas_alloc_request_fusion()
711 struct fusion_context *fusion; in megasas_alloc_reply_fusion() local
713 fusion = instance->ctrl_context; in megasas_alloc_reply_fusion()
718 fusion->reply_frames_desc_pool = in megasas_alloc_reply_fusion()
720 fusion->reply_alloc_sz * count, 16, 0); in megasas_alloc_reply_fusion()
722 if (!fusion->reply_frames_desc_pool) { in megasas_alloc_reply_fusion()
728 fusion->reply_frames_desc[0] = in megasas_alloc_reply_fusion()
729 dma_pool_alloc(fusion->reply_frames_desc_pool, in megasas_alloc_reply_fusion()
730 GFP_KERNEL, &fusion->reply_frames_desc_phys[0]); in megasas_alloc_reply_fusion()
731 if (!fusion->reply_frames_desc[0]) { in megasas_alloc_reply_fusion()
738 fusion->reply_frames_desc_phys[0], in megasas_alloc_reply_fusion()
739 (fusion->reply_alloc_sz * count))) { in megasas_alloc_reply_fusion()
740 dma_pool_free(fusion->reply_frames_desc_pool, in megasas_alloc_reply_fusion()
741 fusion->reply_frames_desc[0], in megasas_alloc_reply_fusion()
742 fusion->reply_frames_desc_phys[0]); in megasas_alloc_reply_fusion()
743 fusion->reply_frames_desc[0] = NULL; in megasas_alloc_reply_fusion()
744 dma_pool_destroy(fusion->reply_frames_desc_pool); in megasas_alloc_reply_fusion()
746 fusion->reply_frames_desc_pool = in megasas_alloc_reply_fusion()
749 fusion->reply_alloc_sz * count, in megasas_alloc_reply_fusion()
750 roundup_pow_of_two(fusion->reply_alloc_sz * count), in megasas_alloc_reply_fusion()
753 if (!fusion->reply_frames_desc_pool) { in megasas_alloc_reply_fusion()
759 fusion->reply_frames_desc[0] = in megasas_alloc_reply_fusion()
760 dma_pool_alloc(fusion->reply_frames_desc_pool, in megasas_alloc_reply_fusion()
762 &fusion->reply_frames_desc_phys[0]); in megasas_alloc_reply_fusion()
764 if (!fusion->reply_frames_desc[0]) { in megasas_alloc_reply_fusion()
771 reply_desc = fusion->reply_frames_desc[0]; in megasas_alloc_reply_fusion()
772 for (i = 0; i < fusion->reply_q_depth * count; i++, reply_desc++) in megasas_alloc_reply_fusion()
779 fusion->reply_frames_desc[i + 1] = in megasas_alloc_reply_fusion()
780 fusion->reply_frames_desc[i] + in megasas_alloc_reply_fusion()
781 (fusion->reply_alloc_sz)/sizeof(union MPI2_REPLY_DESCRIPTORS_UNION); in megasas_alloc_reply_fusion()
790 struct fusion_context *fusion; in megasas_alloc_rdpq_fusion() local
797 fusion = instance->ctrl_context; in megasas_alloc_rdpq_fusion()
798 chunk_size = fusion->reply_alloc_sz * RDPQ_MAX_INDEX_IN_ONE_CHUNK; in megasas_alloc_rdpq_fusion()
802 fusion->rdpq_virt = dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_rdpq_fusion()
803 array_size, &fusion->rdpq_phys, in megasas_alloc_rdpq_fusion()
805 if (!fusion->rdpq_virt) { in megasas_alloc_rdpq_fusion()
814 fusion->reply_frames_desc_pool = dma_pool_create("mr_rdpq", in megasas_alloc_rdpq_fusion()
817 fusion->reply_frames_desc_pool_align = in megasas_alloc_rdpq_fusion()
824 if (!fusion->reply_frames_desc_pool || in megasas_alloc_rdpq_fusion()
825 !fusion->reply_frames_desc_pool_align) { in megasas_alloc_rdpq_fusion()
843 dma_pool_alloc(fusion->reply_frames_desc_pool, in megasas_alloc_rdpq_fusion()
864 dma_pool_free(fusion->reply_frames_desc_pool, in megasas_alloc_rdpq_fusion()
869 dma_pool_alloc(fusion->reply_frames_desc_pool_align, in megasas_alloc_rdpq_fusion()
877 fusion->rdpq_tracker[i].dma_pool_ptr = in megasas_alloc_rdpq_fusion()
878 fusion->reply_frames_desc_pool_align; in megasas_alloc_rdpq_fusion()
880 fusion->rdpq_tracker[i].dma_pool_ptr = in megasas_alloc_rdpq_fusion()
881 fusion->reply_frames_desc_pool; in megasas_alloc_rdpq_fusion()
884 fusion->rdpq_tracker[i].pool_entry_phys = rdpq_chunk_phys[i]; in megasas_alloc_rdpq_fusion()
885 fusion->rdpq_tracker[i].pool_entry_virt = rdpq_chunk_virt[i]; in megasas_alloc_rdpq_fusion()
894 offset = fusion->reply_alloc_sz * i; in megasas_alloc_rdpq_fusion()
895 fusion->rdpq_virt[abs_index].RDPQBaseAddress = in megasas_alloc_rdpq_fusion()
897 fusion->reply_frames_desc_phys[abs_index] = in megasas_alloc_rdpq_fusion()
899 fusion->reply_frames_desc[abs_index] = in megasas_alloc_rdpq_fusion()
902 reply_desc = fusion->reply_frames_desc[abs_index]; in megasas_alloc_rdpq_fusion()
903 for (j = 0; j < fusion->reply_q_depth; j++, reply_desc++) in megasas_alloc_rdpq_fusion()
915 struct fusion_context *fusion; in megasas_free_rdpq_fusion() local
917 fusion = instance->ctrl_context; in megasas_free_rdpq_fusion()
920 if (fusion->rdpq_tracker[i].pool_entry_virt) in megasas_free_rdpq_fusion()
921 dma_pool_free(fusion->rdpq_tracker[i].dma_pool_ptr, in megasas_free_rdpq_fusion()
922 fusion->rdpq_tracker[i].pool_entry_virt, in megasas_free_rdpq_fusion()
923 fusion->rdpq_tracker[i].pool_entry_phys); in megasas_free_rdpq_fusion()
927 dma_pool_destroy(fusion->reply_frames_desc_pool); in megasas_free_rdpq_fusion()
928 dma_pool_destroy(fusion->reply_frames_desc_pool_align); in megasas_free_rdpq_fusion()
930 if (fusion->rdpq_virt) in megasas_free_rdpq_fusion()
933 fusion->rdpq_virt, fusion->rdpq_phys); in megasas_free_rdpq_fusion()
939 struct fusion_context *fusion; in megasas_free_reply_fusion() local
941 fusion = instance->ctrl_context; in megasas_free_reply_fusion()
943 if (fusion->reply_frames_desc[0]) in megasas_free_reply_fusion()
944 dma_pool_free(fusion->reply_frames_desc_pool, in megasas_free_reply_fusion()
945 fusion->reply_frames_desc[0], in megasas_free_reply_fusion()
946 fusion->reply_frames_desc_phys[0]); in megasas_free_reply_fusion()
948 dma_pool_destroy(fusion->reply_frames_desc_pool); in megasas_free_reply_fusion()
973 struct fusion_context *fusion; in megasas_alloc_cmds_fusion() local
980 fusion = instance->ctrl_context; in megasas_alloc_cmds_fusion()
996 io_req_base = fusion->io_request_frames + MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE; in megasas_alloc_cmds_fusion()
997 io_req_base_phys = fusion->io_request_frames_phys + MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE; in megasas_alloc_cmds_fusion()
1000 * Add all the commands to command pool (fusion->cmd_pool) in megasas_alloc_cmds_fusion()
1005 cmd = fusion->cmd_list[i]; in megasas_alloc_cmds_fusion()
1088 struct fusion_context *fusion; in megasas_ioc_init_fusion() local
1099 fusion = instance->ctrl_context; in megasas_ioc_init_fusion()
1101 ioc_init_handle = fusion->ioc_init_request_phys; in megasas_ioc_init_fusion()
1102 IOCInitMessage = fusion->ioc_init_request; in megasas_ioc_init_fusion()
1104 cmd = fusion->ioc_init_cmd; in megasas_ioc_init_fusion()
1155 IOCInitMessage->ReplyDescriptorPostQueueDepth = cpu_to_le16(fusion->reply_q_depth); in megasas_ioc_init_fusion()
1157 cpu_to_le64(fusion->rdpq_phys) : in megasas_ioc_init_fusion()
1158 cpu_to_le64(fusion->reply_frames_desc_phys[0]); in megasas_ioc_init_fusion()
1161 IOCInitMessage->SystemRequestFrameBaseAddress = cpu_to_le64(fusion->io_request_frames_phys); in megasas_ioc_init_fusion()
1162 IOCInitMessage->SenseBufferAddressHigh = cpu_to_le32(upper_32_bits(fusion->sense_phys_addr)); in megasas_ioc_init_fusion()
1310 struct fusion_context *fusion = instance->ctrl_context; in megasas_sync_pd_seq_num() local
1314 pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id & 1)]; in megasas_sync_pd_seq_num()
1315 pd_seq_h = fusion->pd_seq_phys[(instance->pd_seq_map_id & 1)]; in megasas_sync_pd_seq_num()
1404 struct fusion_context *fusion; in megasas_get_ld_map_info() local
1413 fusion = instance->ctrl_context; in megasas_get_ld_map_info()
1415 if (!fusion) { in megasas_get_ld_map_info()
1422 size_map_info = fusion->current_map_sz; in megasas_get_ld_map_info()
1424 ci = (void *) fusion->ld_map[(instance->map_id & 1)]; in megasas_get_ld_map_info()
1425 ci_h = fusion->ld_map_phys[(instance->map_id & 1)]; in megasas_get_ld_map_info()
1433 memset(ci, 0, fusion->max_map_sz); in megasas_get_ld_map_info()
1465 struct fusion_context *fusion = instance->ctrl_context; in megasas_get_map_info() local
1467 fusion->fast_path_io = 0; in megasas_get_map_info()
1470 fusion->fast_path_io = 1; in megasas_get_map_info()
1492 struct fusion_context *fusion; in megasas_sync_map_info() local
1507 fusion = instance->ctrl_context; in megasas_sync_map_info()
1509 if (!fusion) { in megasas_sync_map_info()
1514 map = fusion->ld_drv_map[instance->map_id & 1]; in megasas_sync_map_info()
1523 fusion->ld_map[(instance->map_id - 1) & 1]; in megasas_sync_map_info()
1524 memset(ci, 0, fusion->max_map_sz); in megasas_sync_map_info()
1526 ci_h = fusion->ld_map_phys[(instance->map_id - 1) & 1]; in megasas_sync_map_info()
1536 size_map_info = fusion->current_map_sz; in megasas_sync_map_info()
1639 struct fusion_context *fusion; in megasas_allocate_raid_maps() local
1642 fusion = instance->ctrl_context; in megasas_allocate_raid_maps()
1644 fusion->drv_map_pages = get_order(fusion->drv_map_sz); in megasas_allocate_raid_maps()
1647 fusion->ld_map[i] = NULL; in megasas_allocate_raid_maps()
1649 fusion->ld_drv_map[i] = (void *) in megasas_allocate_raid_maps()
1651 fusion->drv_map_pages); in megasas_allocate_raid_maps()
1653 if (!fusion->ld_drv_map[i]) { in megasas_allocate_raid_maps()
1654 fusion->ld_drv_map[i] = vzalloc(fusion->drv_map_sz); in megasas_allocate_raid_maps()
1656 if (!fusion->ld_drv_map[i]) { in megasas_allocate_raid_maps()
1660 fusion->drv_map_sz); in megasas_allocate_raid_maps()
1667 fusion->ld_map[i] = dma_alloc_coherent(&instance->pdev->dev, in megasas_allocate_raid_maps()
1668 fusion->max_map_sz, in megasas_allocate_raid_maps()
1669 &fusion->ld_map_phys[i], in megasas_allocate_raid_maps()
1671 if (!fusion->ld_map[i]) { in megasas_allocate_raid_maps()
1683 if (fusion->ld_map[i]) in megasas_allocate_raid_maps()
1685 fusion->max_map_sz, in megasas_allocate_raid_maps()
1686 fusion->ld_map[i], in megasas_allocate_raid_maps()
1687 fusion->ld_map_phys[i]); in megasas_allocate_raid_maps()
1692 if (fusion->ld_drv_map[i]) { in megasas_allocate_raid_maps()
1693 if (is_vmalloc_addr(fusion->ld_drv_map[i])) in megasas_allocate_raid_maps()
1694 vfree(fusion->ld_drv_map[i]); in megasas_allocate_raid_maps()
1696 free_pages((ulong)fusion->ld_drv_map[i], in megasas_allocate_raid_maps()
1697 fusion->drv_map_pages); in megasas_allocate_raid_maps()
1714 struct fusion_context *fusion; in megasas_configure_queue_sizes() local
1717 fusion = instance->ctrl_context; in megasas_configure_queue_sizes()
1729 fusion->reply_q_depth = 2 * ((max_cmd + 1 + 15) / 16) * 16; in megasas_configure_queue_sizes()
1731 fusion->request_alloc_sz = sizeof(union MEGASAS_REQUEST_DESCRIPTOR_UNION) * in megasas_configure_queue_sizes()
1733 fusion->reply_alloc_sz = sizeof(union MPI2_REPLY_DESCRIPTORS_UNION) * in megasas_configure_queue_sizes()
1734 (fusion->reply_q_depth); in megasas_configure_queue_sizes()
1735 fusion->io_frames_alloc_sz = MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE + in megasas_configure_queue_sizes()
1742 struct fusion_context *fusion; in megasas_alloc_ioc_init_frame() local
1745 fusion = instance->ctrl_context; in megasas_alloc_ioc_init_frame()
1766 fusion->ioc_init_cmd = cmd; in megasas_alloc_ioc_init_frame()
1776 struct fusion_context *fusion; in megasas_free_ioc_init_cmd() local
1778 fusion = instance->ctrl_context; in megasas_free_ioc_init_cmd()
1780 if (fusion->ioc_init_cmd && fusion->ioc_init_cmd->frame) in megasas_free_ioc_init_cmd()
1783 fusion->ioc_init_cmd->frame, in megasas_free_ioc_init_cmd()
1784 fusion->ioc_init_cmd->frame_phys_addr); in megasas_free_ioc_init_cmd()
1786 kfree(fusion->ioc_init_cmd); in megasas_free_ioc_init_cmd()
1798 struct fusion_context *fusion; in megasas_init_adapter_fusion() local
1803 fusion = instance->ctrl_context; in megasas_init_adapter_fusion()
1839 fusion->max_sge_in_main_msg = in megasas_init_adapter_fusion()
1843 fusion->max_sge_in_chain = in megasas_init_adapter_fusion()
1848 rounddown_pow_of_two(fusion->max_sge_in_main_msg in megasas_init_adapter_fusion()
1849 + fusion->max_sge_in_chain - 2); in megasas_init_adapter_fusion()
1852 fusion->chain_offset_mfi_pthru = in megasas_init_adapter_fusion()
1855 fusion->chain_offset_io_request = in megasas_init_adapter_fusion()
1863 fusion->last_reply_idx[i] = 0; in megasas_init_adapter_fusion()
1866 * For fusion adapters, 3 commands for IOCTL and 8 commands in megasas_init_adapter_fusion()
1875 atomic_set(&fusion->busy_mq_poll[i], 0); in megasas_init_adapter_fusion()
1916 fusion->fast_path_io = 0; in megasas_init_adapter_fusion()
2022 * @fusion: fusion context
2030 map_cmd_status(struct fusion_context *fusion, in map_cmd_status() argument
2143 * @cmd: Fusion command frame
2280 struct fusion_context *fusion; in megasas_make_sgl_fusion() local
2282 fusion = instance->ctrl_context; in megasas_make_sgl_fusion()
2286 sgl_ptr_end += fusion->max_sge_in_main_msg - 1; in megasas_make_sgl_fusion()
2300 if ((sg_processed == (fusion->max_sge_in_main_msg - 1)) && in megasas_make_sgl_fusion()
2301 (sge_count > fusion->max_sge_in_main_msg)) { in megasas_make_sgl_fusion()
2309 fusion-> in megasas_make_sgl_fusion()
2315 fusion->chain_offset_io_request; in megasas_make_sgl_fusion()
2340 * @cmd: Fusion command pointer
2569 struct fusion_context *fusion = instance->ctrl_context; in megasas_stream_detect() local
2572 = fusion->stream_detect_by_ld[device_id]; in megasas_stream_detect()
2641 * @fusion: Fusion context
2650 megasas_set_raidflag_cpu_affinity(struct fusion_context *fusion, in megasas_set_raidflag_cpu_affinity() argument
2711 if ((fusion->pcie_bw_limitation) && (raid->level == 1) && (!is_read) && in megasas_set_raidflag_cpu_affinity()
2739 struct fusion_context *fusion; in megasas_build_ldio_fusion() local
2750 fusion = instance->ctrl_context; in megasas_build_ldio_fusion()
2826 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_ldio_fusion()
2832 if (!raid || (!fusion->fast_path_io)) { in megasas_build_ldio_fusion()
2859 } else if (fusion->pcie_bw_limitation && in megasas_build_ldio_fusion()
2886 megasas_set_raidflag_cpu_affinity(fusion, &io_request->RaidContext, in megasas_build_ldio_fusion()
2915 if (fusion->load_balance_info && in megasas_build_ldio_fusion()
2916 (fusion->load_balance_info[device_id].loadBalanceFlag) && in megasas_build_ldio_fusion()
2920 &fusion->load_balance_info[device_id], in megasas_build_ldio_fusion()
2992 struct fusion_context *fusion = instance->ctrl_context; in megasas_build_ld_nonrw_fusion() local
3002 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_ld_nonrw_fusion()
3011 if (fusion->fast_path_io && ( in megasas_build_ld_nonrw_fusion()
3088 struct fusion_context *fusion = instance->ctrl_context; in megasas_build_syspd_fusion() local
3089 pd_sync = (void *)fusion->pd_seq_sync[(instance->pd_seq_map_id - 1) & 1]; in megasas_build_syspd_fusion()
3150 if (fusion->fast_path_io) { in megasas_build_syspd_fusion()
3152 fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_syspd_fusion()
3308 struct fusion_context *fusion; in megasas_get_request_descriptor() local
3310 fusion = instance->ctrl_context; in megasas_get_request_descriptor()
3311 p = fusion->req_frames_desc + in megasas_get_request_descriptor()
3326 struct fusion_context *fusion; in megasas_prepare_secondRaid1_IO() local
3327 fusion = instance->ctrl_context; in megasas_prepare_secondRaid1_IO()
3333 (fusion->max_sge_in_main_msg * sizeof(union MPI2_SGE_IO_UNION))); in megasas_prepare_secondRaid1_IO()
3461 struct fusion_context *fusion; in megasas_complete_r1_command() local
3467 fusion = instance->ctrl_context; in megasas_complete_r1_command()
3470 r1_cmd = fusion->cmd_list[peer_smid - 1]; in megasas_complete_r1_command()
3490 map_cmd_status(fusion, scmd_local, status, ex_status, in megasas_complete_r1_command()
3553 struct fusion_context *fusion; in complete_cmd_fusion() local
3566 fusion = instance->ctrl_context; in complete_cmd_fusion()
3574 desc = fusion->reply_frames_desc[MSIxIndex] + in complete_cmd_fusion()
3575 fusion->last_reply_idx[MSIxIndex]; in complete_cmd_fusion()
3595 cmd_fusion = fusion->cmd_list[smid - 1]; in complete_cmd_fusion()
3618 if (fusion->load_balance_info && in complete_cmd_fusion()
3622 lbinfo = &fusion->load_balance_info[device_id]; in complete_cmd_fusion()
3631 map_cmd_status(fusion, scmd_local, status, in complete_cmd_fusion()
3658 fusion->last_reply_idx[MSIxIndex]++; in complete_cmd_fusion()
3659 if (fusion->last_reply_idx[MSIxIndex] >= in complete_cmd_fusion()
3660 fusion->reply_q_depth) in complete_cmd_fusion()
3661 fusion->last_reply_idx[MSIxIndex] = 0; in complete_cmd_fusion()
3668 if (!fusion->last_reply_idx[MSIxIndex]) in complete_cmd_fusion()
3669 desc = fusion->reply_frames_desc[MSIxIndex]; in complete_cmd_fusion()
3691 fusion->last_reply_idx[MSIxIndex], in complete_cmd_fusion()
3695 fusion->last_reply_idx[MSIxIndex], in complete_cmd_fusion()
3714 fusion->last_reply_idx[MSIxIndex], in complete_cmd_fusion()
3718 fusion->last_reply_idx[MSIxIndex], in complete_cmd_fusion()
3733 struct fusion_context *fusion; in megasas_blk_mq_poll() local
3737 fusion = instance->ctrl_context; in megasas_blk_mq_poll()
3741 if (!atomic_add_unless(&fusion->busy_mq_poll[queue_num], 1, 1)) in megasas_blk_mq_poll()
3745 atomic_dec(&fusion->busy_mq_poll[queue_num]); in megasas_blk_mq_poll()
3897 struct fusion_context *fusion; in build_mpt_mfi_pass_thru() local
3900 fusion = instance->ctrl_context; in build_mpt_mfi_pass_thru()
3922 sgl_ptr_end += fusion->max_sge_in_main_msg - 1; in build_mpt_mfi_pass_thru()
3932 io_req->ChainOffset = fusion->chain_offset_mfi_pthru; in build_mpt_mfi_pass_thru()
4170 /* This function waits for outstanding commands on fusion to complete */
4280 struct fusion_context *fusion; in megasas_reset_reply_desc() local
4283 fusion = instance->ctrl_context; in megasas_reset_reply_desc()
4288 fusion->last_reply_idx[i] = 0; in megasas_reset_reply_desc()
4289 reply_desc = fusion->reply_frames_desc[i]; in megasas_reset_reply_desc()
4290 for (j = 0 ; j < fusion->reply_q_depth; j++, reply_desc++) in megasas_reset_reply_desc()
4304 struct fusion_context *fusion; in megasas_refire_mgmt_cmd() local
4313 fusion = instance->ctrl_context; in megasas_refire_mgmt_cmd()
4319 cmd_fusion = fusion->cmd_list[j]; in megasas_refire_mgmt_cmd()
4404 struct fusion_context *fusion; in megasas_return_polled_cmds() local
4407 fusion = instance->ctrl_context; in megasas_return_polled_cmds()
4410 cmd_fusion = fusion->cmd_list[i]; in megasas_return_polled_cmds()
4439 struct fusion_context *fusion; in megasas_track_scsiio() local
4440 fusion = instance->ctrl_context; in megasas_track_scsiio()
4443 cmd_fusion = fusion->cmd_list[i]; in megasas_track_scsiio()
4539 struct fusion_context *fusion = NULL; in megasas_issue_tm() local
4545 fusion = instance->ctrl_context; in megasas_issue_tm()
4621 scsi_lookup = fusion->cmd_list[smid_task - 1]; in megasas_issue_tm()
4659 * megasas_fusion_smid_lookup : Look for fusion command corresponding to SCSI
4669 struct fusion_context *fusion; in megasas_fusion_smid_lookup() local
4673 fusion = instance->ctrl_context; in megasas_fusion_smid_lookup()
4676 cmd_fusion = fusion->cmd_list[i]; in megasas_fusion_smid_lookup()
4699 struct fusion_context *fusion; in megasas_get_tm_devhandle() local
4704 fusion = instance->ctrl_context; in megasas_get_tm_devhandle()
4710 pd_sync = (void *)fusion->pd_seq_sync in megasas_get_tm_devhandle()
4726 * megasas_task_abort_fusion : SCSI task abort function for fusion adapters
4806 * megasas_reset_target_fusion : target reset function for fusion adapters
4906 /* Core fusion reset function */
4912 struct fusion_context *fusion; in megasas_reset_fusion() local
4923 fusion = instance->ctrl_context; in megasas_reset_fusion()
4983 dev_warn(&instance->pdev->dev, "resetting fusion " in megasas_reset_fusion()
4993 cmd_fusion = fusion->cmd_list[i]; in megasas_reset_fusion()
4996 r1_cmd = fusion->cmd_list[i + instance->max_fw_cmds]; in megasas_reset_fusion()
5084 if (fusion->load_balance_info) in megasas_reset_fusion()
5085 memset(fusion->load_balance_info, 0, in megasas_reset_fusion()
5105 memset(fusion->stream_detect_by_ld[j], in megasas_reset_fusion()
5107 fusion->stream_detect_by_ld[j]->mru_bit_map in megasas_reset_fusion()
5198 /* Fusion Crash dump collection */
5282 /* Fusion OCR work queue */
5291 /* Allocate fusion context */
5295 struct fusion_context *fusion; in megasas_alloc_fusion_context() local
5305 fusion = instance->ctrl_context; in megasas_alloc_fusion_context()
5307 fusion->log_to_span_pages = get_order(MAX_LOGICAL_DRIVES_EXT * in megasas_alloc_fusion_context()
5309 fusion->log_to_span = in megasas_alloc_fusion_context()
5311 fusion->log_to_span_pages); in megasas_alloc_fusion_context()
5312 if (!fusion->log_to_span) { in megasas_alloc_fusion_context()
5313 fusion->log_to_span = in megasas_alloc_fusion_context()
5316 if (!fusion->log_to_span) { in megasas_alloc_fusion_context()
5323 fusion->load_balance_info_pages = get_order(MAX_LOGICAL_DRIVES_EXT * in megasas_alloc_fusion_context()
5325 fusion->load_balance_info = in megasas_alloc_fusion_context()
5327 fusion->load_balance_info_pages); in megasas_alloc_fusion_context()
5328 if (!fusion->load_balance_info) { in megasas_alloc_fusion_context()
5329 fusion->load_balance_info = in megasas_alloc_fusion_context()
5332 if (!fusion->load_balance_info) in megasas_alloc_fusion_context()
5343 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_fusion_context() local
5345 if (fusion) { in megasas_free_fusion_context()
5346 if (fusion->load_balance_info) { in megasas_free_fusion_context()
5347 if (is_vmalloc_addr(fusion->load_balance_info)) in megasas_free_fusion_context()
5348 vfree(fusion->load_balance_info); in megasas_free_fusion_context()
5350 free_pages((ulong)fusion->load_balance_info, in megasas_free_fusion_context()
5351 fusion->load_balance_info_pages); in megasas_free_fusion_context()
5354 if (fusion->log_to_span) { in megasas_free_fusion_context()
5355 if (is_vmalloc_addr(fusion->log_to_span)) in megasas_free_fusion_context()
5356 vfree(fusion->log_to_span); in megasas_free_fusion_context()
5358 free_pages((ulong)fusion->log_to_span, in megasas_free_fusion_context()
5359 fusion->log_to_span_pages); in megasas_free_fusion_context()
5362 kfree(fusion); in megasas_free_fusion_context()