Lines Matching defs:fusion

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