Lines Matching refs:instance

58 extern int mrsas_complete_pending_cmds(struct mrsas_instance *instance);
81 destroy_mfi_mpi_frame_pool(struct mrsas_instance *instance) in destroy_mfi_mpi_frame_pool() argument
89 cmd = instance->cmd_list[i]; in destroy_mfi_mpi_frame_pool()
91 (void) mrsas_free_dma_obj(instance, in destroy_mfi_mpi_frame_pool()
102 destroy_mpi2_frame_pool(struct mrsas_instance *instance) in destroy_mpi2_frame_pool() argument
105 if (instance->mpi2_frame_pool_dma_obj.status == DMA_OBJ_ALLOCATED) { in destroy_mpi2_frame_pool()
106 (void) mrsas_free_dma_obj(instance, in destroy_mpi2_frame_pool()
107 instance->mpi2_frame_pool_dma_obj); in destroy_mpi2_frame_pool()
108 instance->mpi2_frame_pool_dma_obj.status |= DMA_OBJ_FREED; in destroy_mpi2_frame_pool()
117 mrsas_tbolt_free_additional_dma_buffer(struct mrsas_instance *instance) in mrsas_tbolt_free_additional_dma_buffer() argument
121 if (instance->mfi_internal_dma_obj.status == DMA_OBJ_ALLOCATED) { in mrsas_tbolt_free_additional_dma_buffer()
122 (void) mrsas_free_dma_obj(instance, in mrsas_tbolt_free_additional_dma_buffer()
123 instance->mfi_internal_dma_obj); in mrsas_tbolt_free_additional_dma_buffer()
124 instance->mfi_internal_dma_obj.status = DMA_OBJ_FREED; in mrsas_tbolt_free_additional_dma_buffer()
126 if (instance->mfi_evt_detail_obj.status == DMA_OBJ_ALLOCATED) { in mrsas_tbolt_free_additional_dma_buffer()
127 (void) mrsas_free_dma_obj(instance, in mrsas_tbolt_free_additional_dma_buffer()
128 instance->mfi_evt_detail_obj); in mrsas_tbolt_free_additional_dma_buffer()
129 instance->mfi_evt_detail_obj.status = DMA_OBJ_FREED; in mrsas_tbolt_free_additional_dma_buffer()
133 if (instance->ld_map_obj[i].status == DMA_OBJ_ALLOCATED) { in mrsas_tbolt_free_additional_dma_buffer()
134 (void) mrsas_free_dma_obj(instance, in mrsas_tbolt_free_additional_dma_buffer()
135 instance->ld_map_obj[i]); in mrsas_tbolt_free_additional_dma_buffer()
136 instance->ld_map_obj[i].status = DMA_OBJ_FREED; in mrsas_tbolt_free_additional_dma_buffer()
146 free_req_rep_desc_pool(struct mrsas_instance *instance) in free_req_rep_desc_pool() argument
148 if (instance->request_desc_dma_obj.status == DMA_OBJ_ALLOCATED) { in free_req_rep_desc_pool()
149 (void) mrsas_free_dma_obj(instance, in free_req_rep_desc_pool()
150 instance->request_desc_dma_obj); in free_req_rep_desc_pool()
151 instance->request_desc_dma_obj.status = DMA_OBJ_FREED; in free_req_rep_desc_pool()
154 if (instance->reply_desc_dma_obj.status == DMA_OBJ_ALLOCATED) { in free_req_rep_desc_pool()
155 (void) mrsas_free_dma_obj(instance, in free_req_rep_desc_pool()
156 instance->reply_desc_dma_obj); in free_req_rep_desc_pool()
157 instance->reply_desc_dma_obj.status = DMA_OBJ_FREED; in free_req_rep_desc_pool()
168 create_mpi2_frame_pool(struct mrsas_instance *instance) in create_mpi2_frame_pool() argument
180 max_cmd = instance->max_fw_cmds; in create_mpi2_frame_pool()
203 instance->mpi2_frame_pool_dma_obj.size = total_size; in create_mpi2_frame_pool()
204 instance->mpi2_frame_pool_dma_obj.dma_attr = mrsas_generic_dma_attr; in create_mpi2_frame_pool()
205 instance->mpi2_frame_pool_dma_obj.dma_attr.dma_attr_addr_hi = in create_mpi2_frame_pool()
207 instance->mpi2_frame_pool_dma_obj.dma_attr.dma_attr_count_max = in create_mpi2_frame_pool()
209 instance->mpi2_frame_pool_dma_obj.dma_attr.dma_attr_sgllen = 1; in create_mpi2_frame_pool()
210 instance->mpi2_frame_pool_dma_obj.dma_attr.dma_attr_align = 256; in create_mpi2_frame_pool()
212 if (mrsas_alloc_dma_obj(instance, &instance->mpi2_frame_pool_dma_obj, in create_mpi2_frame_pool()
214 dev_err(instance->dip, CE_WARN, in create_mpi2_frame_pool()
219 bzero(instance->mpi2_frame_pool_dma_obj.buffer, total_size); in create_mpi2_frame_pool()
220 instance->mpi2_frame_pool_dma_obj.status |= DMA_OBJ_ALLOCATED; in create_mpi2_frame_pool()
222 instance->io_request_frames = in create_mpi2_frame_pool()
223 (uint8_t *)instance->mpi2_frame_pool_dma_obj.buffer; in create_mpi2_frame_pool()
224 instance->io_request_frames_phy = in create_mpi2_frame_pool()
226 instance->mpi2_frame_pool_dma_obj.dma_cookie[0].dmac_address; in create_mpi2_frame_pool()
229 (void *)instance->io_request_frames)); in create_mpi2_frame_pool()
232 instance->io_request_frames_phy)); in create_mpi2_frame_pool()
234 io_req_base = (uint8_t *)instance->io_request_frames + in create_mpi2_frame_pool()
236 io_req_base_phys = instance->io_request_frames_phy + in create_mpi2_frame_pool()
243 cmd = instance->cmd_list[i]; in create_mpi2_frame_pool()
296 mrsas_tbolt_alloc_additional_dma_buffer(struct mrsas_instance *instance) in mrsas_tbolt_alloc_additional_dma_buffer() argument
302 instance->mfi_internal_dma_obj.status = DMA_OBJ_FREED; in mrsas_tbolt_alloc_additional_dma_buffer()
303 instance->mfi_evt_detail_obj.status = DMA_OBJ_FREED; in mrsas_tbolt_alloc_additional_dma_buffer()
304 instance->ld_map_obj[0].status = DMA_OBJ_FREED; in mrsas_tbolt_alloc_additional_dma_buffer()
305 instance->ld_map_obj[1].status = DMA_OBJ_FREED; in mrsas_tbolt_alloc_additional_dma_buffer()
308 instance->mfi_internal_dma_obj.size = internal_buf_size; in mrsas_tbolt_alloc_additional_dma_buffer()
309 instance->mfi_internal_dma_obj.dma_attr = mrsas_generic_dma_attr; in mrsas_tbolt_alloc_additional_dma_buffer()
310 instance->mfi_internal_dma_obj.dma_attr.dma_attr_addr_hi = 0xFFFFFFFFU; in mrsas_tbolt_alloc_additional_dma_buffer()
311 instance->mfi_internal_dma_obj.dma_attr.dma_attr_count_max = in mrsas_tbolt_alloc_additional_dma_buffer()
313 instance->mfi_internal_dma_obj.dma_attr.dma_attr_sgllen = 1; in mrsas_tbolt_alloc_additional_dma_buffer()
315 if (mrsas_alloc_dma_obj(instance, &instance->mfi_internal_dma_obj, in mrsas_tbolt_alloc_additional_dma_buffer()
317 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_alloc_additional_dma_buffer()
322 bzero(instance->mfi_internal_dma_obj.buffer, internal_buf_size); in mrsas_tbolt_alloc_additional_dma_buffer()
324 instance->mfi_internal_dma_obj.status |= DMA_OBJ_ALLOCATED; in mrsas_tbolt_alloc_additional_dma_buffer()
325 instance->internal_buf = in mrsas_tbolt_alloc_additional_dma_buffer()
326 (caddr_t)(((unsigned long)instance->mfi_internal_dma_obj.buffer)); in mrsas_tbolt_alloc_additional_dma_buffer()
327 instance->internal_buf_dmac_add = in mrsas_tbolt_alloc_additional_dma_buffer()
328 instance->mfi_internal_dma_obj.dma_cookie[0].dmac_address; in mrsas_tbolt_alloc_additional_dma_buffer()
329 instance->internal_buf_size = internal_buf_size; in mrsas_tbolt_alloc_additional_dma_buffer()
332 instance->mfi_evt_detail_obj.size = sizeof (struct mrsas_evt_detail); in mrsas_tbolt_alloc_additional_dma_buffer()
333 instance->mfi_evt_detail_obj.dma_attr = mrsas_generic_dma_attr; in mrsas_tbolt_alloc_additional_dma_buffer()
334 instance->mfi_evt_detail_obj.dma_attr.dma_attr_addr_hi = 0xFFFFFFFFU; in mrsas_tbolt_alloc_additional_dma_buffer()
335 instance->mfi_evt_detail_obj.dma_attr.dma_attr_count_max = 0xFFFFFFFFU; in mrsas_tbolt_alloc_additional_dma_buffer()
336 instance->mfi_evt_detail_obj.dma_attr.dma_attr_sgllen = 1; in mrsas_tbolt_alloc_additional_dma_buffer()
337 instance->mfi_evt_detail_obj.dma_attr.dma_attr_align = 8; in mrsas_tbolt_alloc_additional_dma_buffer()
339 if (mrsas_alloc_dma_obj(instance, &instance->mfi_evt_detail_obj, in mrsas_tbolt_alloc_additional_dma_buffer()
341 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_alloc_additional_dma_buffer()
347 bzero(instance->mfi_evt_detail_obj.buffer, in mrsas_tbolt_alloc_additional_dma_buffer()
350 instance->mfi_evt_detail_obj.status |= DMA_OBJ_ALLOCATED; in mrsas_tbolt_alloc_additional_dma_buffer()
352 instance->size_map_info = sizeof (MR_FW_RAID_MAP) + in mrsas_tbolt_alloc_additional_dma_buffer()
357 instance->ld_map_obj[i].size = instance->size_map_info; in mrsas_tbolt_alloc_additional_dma_buffer()
358 instance->ld_map_obj[i].dma_attr = mrsas_generic_dma_attr; in mrsas_tbolt_alloc_additional_dma_buffer()
359 instance->ld_map_obj[i].dma_attr.dma_attr_addr_hi = 0xFFFFFFFFU; in mrsas_tbolt_alloc_additional_dma_buffer()
360 instance->ld_map_obj[i].dma_attr.dma_attr_count_max = in mrsas_tbolt_alloc_additional_dma_buffer()
362 instance->ld_map_obj[i].dma_attr.dma_attr_sgllen = 1; in mrsas_tbolt_alloc_additional_dma_buffer()
363 instance->ld_map_obj[i].dma_attr.dma_attr_align = 1; in mrsas_tbolt_alloc_additional_dma_buffer()
365 if (mrsas_alloc_dma_obj(instance, &instance->ld_map_obj[i], in mrsas_tbolt_alloc_additional_dma_buffer()
367 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_alloc_additional_dma_buffer()
372 instance->ld_map_obj[i].status |= DMA_OBJ_ALLOCATED; in mrsas_tbolt_alloc_additional_dma_buffer()
374 bzero(instance->ld_map_obj[i].buffer, instance->size_map_info); in mrsas_tbolt_alloc_additional_dma_buffer()
376 instance->ld_map[i] = in mrsas_tbolt_alloc_additional_dma_buffer()
377 (MR_FW_RAID_MAP_ALL *)instance->ld_map_obj[i].buffer; in mrsas_tbolt_alloc_additional_dma_buffer()
378 instance->ld_map_phy[i] = (uint32_t)instance-> in mrsas_tbolt_alloc_additional_dma_buffer()
382 "ld_map Addr Phys 0x%x", instance->ld_map_phy[i])); in mrsas_tbolt_alloc_additional_dma_buffer()
385 "size_map_info 0x%x", instance->size_map_info)); in mrsas_tbolt_alloc_additional_dma_buffer()
391 mrsas_tbolt_free_additional_dma_buffer(instance); in mrsas_tbolt_alloc_additional_dma_buffer()
397 mr_sas_get_request_descriptor(struct mrsas_instance *instance, uint16_t index) in mr_sas_get_request_descriptor() argument
401 if (index > instance->max_fw_cmds) { in mr_sas_get_request_descriptor()
405 "max_fw_cmds : 0x%x", instance->max_fw_cmds)); in mr_sas_get_request_descriptor()
410 ((char *)instance->request_message_pool + in mr_sas_get_request_descriptor()
418 (unsigned long)instance->request_message_pool_phy)); in mr_sas_get_request_descriptor()
428 alloc_req_rep_desc(struct mrsas_instance *instance) in alloc_req_rep_desc() argument
446 max_reply_q_sz = ((instance->max_fw_cmds + 1 + 15)/16)*16; in alloc_req_rep_desc()
454 instance->reply_desc_dma_obj.size = reply_q_sz; in alloc_req_rep_desc()
455 instance->reply_desc_dma_obj.dma_attr = mrsas_generic_dma_attr; in alloc_req_rep_desc()
456 instance->reply_desc_dma_obj.dma_attr.dma_attr_addr_hi = 0xFFFFFFFFU; in alloc_req_rep_desc()
457 instance->reply_desc_dma_obj.dma_attr.dma_attr_count_max = 0xFFFFFFFFU; in alloc_req_rep_desc()
458 instance->reply_desc_dma_obj.dma_attr.dma_attr_sgllen = 1; in alloc_req_rep_desc()
459 instance->reply_desc_dma_obj.dma_attr.dma_attr_align = 16; in alloc_req_rep_desc()
461 if (mrsas_alloc_dma_obj(instance, &instance->reply_desc_dma_obj, in alloc_req_rep_desc()
463 dev_err(instance->dip, CE_WARN, "could not alloc reply queue"); in alloc_req_rep_desc()
467 bzero(instance->reply_desc_dma_obj.buffer, reply_q_sz); in alloc_req_rep_desc()
468 instance->reply_desc_dma_obj.status |= DMA_OBJ_ALLOCATED; in alloc_req_rep_desc()
471 instance->reply_frame_pool = (MPI2_REPLY_DESCRIPTORS_UNION *)( in alloc_req_rep_desc()
472 instance->reply_desc_dma_obj.buffer); in alloc_req_rep_desc()
474 instance->reply_q_depth = max_reply_q_sz; in alloc_req_rep_desc()
477 instance->reply_q_depth)); in alloc_req_rep_desc()
480 (void *)instance->reply_frame_pool)); in alloc_req_rep_desc()
483 reply_desc = instance->reply_frame_pool; in alloc_req_rep_desc()
485 for (i = 0; i < instance->reply_q_depth; i++) { in alloc_req_rep_desc()
491 instance->reply_frame_pool_phy = in alloc_req_rep_desc()
492 (uint32_t)instance->reply_desc_dma_obj.dma_cookie[0].dmac_address; in alloc_req_rep_desc()
495 "[reply queue phys addr]0x%x", instance->reply_frame_pool_phy)); in alloc_req_rep_desc()
498 instance->reply_pool_limit_phy = (instance->reply_frame_pool_phy + in alloc_req_rep_desc()
502 instance->reply_pool_limit_phy)); in alloc_req_rep_desc()
513 (instance->max_fw_cmds); in alloc_req_rep_desc()
515 instance->request_desc_dma_obj.size = request_q_sz; in alloc_req_rep_desc()
516 instance->request_desc_dma_obj.dma_attr = mrsas_generic_dma_attr; in alloc_req_rep_desc()
517 instance->request_desc_dma_obj.dma_attr.dma_attr_addr_hi = 0xFFFFFFFFU; in alloc_req_rep_desc()
518 instance->request_desc_dma_obj.dma_attr.dma_attr_count_max = in alloc_req_rep_desc()
520 instance->request_desc_dma_obj.dma_attr.dma_attr_sgllen = 1; in alloc_req_rep_desc()
521 instance->request_desc_dma_obj.dma_attr.dma_attr_align = 16; in alloc_req_rep_desc()
523 if (mrsas_alloc_dma_obj(instance, &instance->request_desc_dma_obj, in alloc_req_rep_desc()
525 dev_err(instance->dip, CE_WARN, in alloc_req_rep_desc()
530 bzero(instance->request_desc_dma_obj.buffer, request_q_sz); in alloc_req_rep_desc()
531 instance->request_desc_dma_obj.status |= DMA_OBJ_ALLOCATED; in alloc_req_rep_desc()
534 instance->request_message_pool = (MRSAS_REQUEST_DESCRIPTOR_UNION *) in alloc_req_rep_desc()
535 (instance->request_desc_dma_obj.buffer); in alloc_req_rep_desc()
537 instance->request_message_pool_phy = in alloc_req_rep_desc()
538 (uint32_t)instance->request_desc_dma_obj.dma_cookie[0].dmac_address; in alloc_req_rep_desc()
543 if (instance->reply_desc_dma_obj.status == DMA_OBJ_ALLOCATED) { in alloc_req_rep_desc()
544 (void) mrsas_free_dma_obj(instance, in alloc_req_rep_desc()
545 instance->reply_desc_dma_obj); in alloc_req_rep_desc()
546 instance->reply_desc_dma_obj.status = DMA_OBJ_FREED; in alloc_req_rep_desc()
559 mrsas_alloc_cmd_pool_tbolt(struct mrsas_instance *instance) in mrsas_alloc_cmd_pool_tbolt() argument
569 max_cmd = instance->max_fw_cmds; in mrsas_alloc_cmd_pool_tbolt()
581 instance->cmd_list = kmem_zalloc(sz, KM_SLEEP); in mrsas_alloc_cmd_pool_tbolt()
585 instance->cmd_list[count] = in mrsas_alloc_cmd_pool_tbolt()
591 INIT_LIST_HEAD(&instance->cmd_pool_list); in mrsas_alloc_cmd_pool_tbolt()
592 INIT_LIST_HEAD(&instance->cmd_pend_list); in mrsas_alloc_cmd_pool_tbolt()
593 INIT_LIST_HEAD(&instance->cmd_app_pool_list); in mrsas_alloc_cmd_pool_tbolt()
599 cmd = instance->cmd_list[i]; in mrsas_alloc_cmd_pool_tbolt()
601 mlist_add_tail(&cmd->list, &instance->cmd_app_pool_list); in mrsas_alloc_cmd_pool_tbolt()
606 cmd = instance->cmd_list[i]; in mrsas_alloc_cmd_pool_tbolt()
608 mlist_add_tail(&cmd->list, &instance->cmd_pool_list); in mrsas_alloc_cmd_pool_tbolt()
617 if (instance->cmd_list[i] != NULL) { in mrsas_alloc_cmd_pool_tbolt()
618 kmem_free(instance->cmd_list[i], in mrsas_alloc_cmd_pool_tbolt()
621 instance->cmd_list[i] = NULL; in mrsas_alloc_cmd_pool_tbolt()
626 if (instance->cmd_list != NULL) in mrsas_alloc_cmd_pool_tbolt()
627 kmem_free(instance->cmd_list, sz); in mrsas_alloc_cmd_pool_tbolt()
628 instance->cmd_list = NULL; in mrsas_alloc_cmd_pool_tbolt()
638 free_space_for_mpi2(struct mrsas_instance *instance) in free_space_for_mpi2() argument
641 if (instance->cmd_list == NULL) { in free_space_for_mpi2()
646 mrsas_tbolt_free_additional_dma_buffer(instance); in free_space_for_mpi2()
649 free_req_rep_desc_pool(instance); in free_space_for_mpi2()
652 destroy_mpi2_frame_pool(instance); in free_space_for_mpi2()
655 destroy_mfi_frame_pool(instance); in free_space_for_mpi2()
659 mrsas_free_cmd_pool(instance); in free_space_for_mpi2()
667 alloc_space_for_mpi2(struct mrsas_instance *instance) in alloc_space_for_mpi2() argument
670 if (mrsas_alloc_cmd_pool_tbolt(instance)) { in alloc_space_for_mpi2()
671 dev_err(instance->dip, CE_WARN, "Error creating cmd pool"); in alloc_space_for_mpi2()
676 instance->reply_size = MRSAS_THUNDERBOLT_REPLY_SIZE; in alloc_space_for_mpi2()
677 instance->raid_io_msg_size = MRSAS_THUNDERBOLT_MSG_SIZE; in alloc_space_for_mpi2()
679 instance->max_sge_in_main_msg = (MRSAS_THUNDERBOLT_MSG_SIZE - in alloc_space_for_mpi2()
682 instance->max_sge_in_chain = (MR_COMMAND_SIZE - in alloc_space_for_mpi2()
686 instance->max_num_sge = (instance->max_sge_in_main_msg + in alloc_space_for_mpi2()
687 instance->max_sge_in_chain - 2); in alloc_space_for_mpi2()
688 instance->chain_offset_mpt_msg = in alloc_space_for_mpi2()
690 instance->chain_offset_io_req = (MRSAS_THUNDERBOLT_MSG_SIZE - in alloc_space_for_mpi2()
692 instance->reply_read_index = 0; in alloc_space_for_mpi2()
697 if (alloc_req_rep_desc(instance)) { in alloc_space_for_mpi2()
698 dev_err(instance->dip, CE_WARN, in alloc_space_for_mpi2()
703 instance->request_message_pool_phy)); in alloc_space_for_mpi2()
707 if (create_mfi_frame_pool(instance)) { in alloc_space_for_mpi2()
708 dev_err(instance->dip, CE_WARN, in alloc_space_for_mpi2()
720 if (create_mpi2_frame_pool(instance)) { in alloc_space_for_mpi2()
721 dev_err(instance->dip, CE_WARN, in alloc_space_for_mpi2()
728 instance->max_sge_in_main_msg)); in alloc_space_for_mpi2()
730 instance->max_sge_in_chain)); in alloc_space_for_mpi2()
732 "[max_sge]0x%x", instance->max_num_sge)); in alloc_space_for_mpi2()
734 instance->chain_offset_mpt_msg)); in alloc_space_for_mpi2()
736 instance->chain_offset_io_req)); in alloc_space_for_mpi2()
741 if (mrsas_tbolt_alloc_additional_dma_buffer(instance)) { in alloc_space_for_mpi2()
742 dev_err(instance->dip, CE_WARN, in alloc_space_for_mpi2()
750 destroy_mpi2_frame_pool(instance); in alloc_space_for_mpi2()
753 destroy_mfi_frame_pool(instance); in alloc_space_for_mpi2()
756 free_req_rep_desc_pool(instance); in alloc_space_for_mpi2()
759 mrsas_free_cmd_pool(instance); in alloc_space_for_mpi2()
769 mrsas_init_adapter_tbolt(struct mrsas_instance *instance) in mrsas_init_adapter_tbolt() argument
778 if (instance->max_fw_cmds > 1008) { in mrsas_init_adapter_tbolt()
779 instance->max_fw_cmds = 1008; in mrsas_init_adapter_tbolt()
780 instance->max_fw_cmds = instance->max_fw_cmds-1; in mrsas_init_adapter_tbolt()
784 "instance->max_fw_cmds 0x%X.", instance->max_fw_cmds)); in mrsas_init_adapter_tbolt()
788 if (alloc_space_for_mpi2(instance) != DDI_SUCCESS) { in mrsas_init_adapter_tbolt()
789 dev_err(instance->dip, CE_WARN, in mrsas_init_adapter_tbolt()
797 if (mrsas_issue_init_mpi2(instance) != DDI_SUCCESS) { in mrsas_init_adapter_tbolt()
798 dev_err(instance->dip, CE_WARN, in mrsas_init_adapter_tbolt()
804 instance->unroll.alloc_space_mpi2 = 1; in mrsas_init_adapter_tbolt()
812 free_space_for_mpi2(instance); in mrsas_init_adapter_tbolt()
823 mrsas_issue_init_mpi2(struct mrsas_instance *instance) in mrsas_issue_init_mpi2() argument
836 if (mrsas_alloc_dma_obj(instance, &init2_dma_obj, in mrsas_issue_init_mpi2()
838 dev_err(instance->dip, CE_WARN, "mr_sas_issue_init_mpi2 " in mrsas_issue_init_mpi2()
850 ret_val = mrsas_tbolt_ioc_init(instance, &init2_dma_obj); in mrsas_issue_init_mpi2()
858 if (mrsas_free_dma_obj(instance, init2_dma_obj) in mrsas_issue_init_mpi2()
866 instance->map_id = 0; in mrsas_issue_init_mpi2()
867 if (mrsas_tbolt_check_map_info(instance) == DDI_SUCCESS) in mrsas_issue_init_mpi2()
868 (void) mrsas_tbolt_sync_map_info(instance); in mrsas_issue_init_mpi2()
872 if (mrsas_common_check(instance, NULL) != DDI_SUCCESS) in mrsas_issue_init_mpi2()
881 (void) mrsas_free_dma_obj(instance, init2_dma_obj); in mrsas_issue_init_mpi2()
887 mrsas_tbolt_ioc_init(struct mrsas_instance *instance, dma_obj_t *mpi2_dma_obj) in mrsas_tbolt_ioc_init() argument
930 instance->raid_io_msg_size / 4); in mrsas_tbolt_ioc_init()
937 instance->reply_q_depth); in mrsas_tbolt_ioc_init()
949 instance->io_request_frames_phy); in mrsas_tbolt_ioc_init()
953 instance->reply_frame_pool_phy); in mrsas_tbolt_ioc_init()
958 cmd = instance->cmd_list[0]; in mrsas_tbolt_ioc_init()
984 ddi_put8(instance->mpi2_frame_pool_dma_obj.acc_handle, in mrsas_tbolt_ioc_init()
989 ddi_put8(instance->mpi2_frame_pool_dma_obj.acc_handle, in mrsas_tbolt_ioc_init()
995 ddi_put32(instance->mpi2_frame_pool_dma_obj.acc_handle, in mrsas_tbolt_ioc_init()
999 ddi_put32(instance->mpi2_frame_pool_dma_obj.acc_handle, in mrsas_tbolt_ioc_init()
1010 instance->drv_ver_dma_obj.size = sizeof (drv_ver_info.drv_ver); in mrsas_tbolt_ioc_init()
1011 instance->drv_ver_dma_obj.dma_attr = mrsas_generic_dma_attr; in mrsas_tbolt_ioc_init()
1012 instance->drv_ver_dma_obj.dma_attr.dma_attr_addr_hi = 0xFFFFFFFFU; in mrsas_tbolt_ioc_init()
1013 instance->drv_ver_dma_obj.dma_attr.dma_attr_count_max = 0xFFFFFFFFU; in mrsas_tbolt_ioc_init()
1014 instance->drv_ver_dma_obj.dma_attr.dma_attr_sgllen = 1; in mrsas_tbolt_ioc_init()
1015 instance->drv_ver_dma_obj.dma_attr.dma_attr_align = 1; in mrsas_tbolt_ioc_init()
1017 if (mrsas_alloc_dma_obj(instance, &instance->drv_ver_dma_obj, in mrsas_tbolt_ioc_init()
1019 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_ioc_init()
1024 bzero(instance->drv_ver_dma_obj.buffer, sizeof (drv_ver_info.drv_ver)); in mrsas_tbolt_ioc_init()
1027 (uint8_t *)instance->drv_ver_dma_obj.buffer, in mrsas_tbolt_ioc_init()
1032 instance->drv_ver_dma_obj.dma_cookie[0].dmac_address); in mrsas_tbolt_ioc_init()
1045 instance->func_ptr->disable_intr(instance); in mrsas_tbolt_ioc_init()
1055 mutex_enter(&instance->reg_write_mtx); in mrsas_tbolt_ioc_init()
1056 WR_IB_LOW_QPORT((uint32_t)(req_desc.Words), instance); in mrsas_tbolt_ioc_init()
1057 WR_IB_HIGH_QPORT((uint32_t)(req_desc.Words >> 32), instance); in mrsas_tbolt_ioc_init()
1058 mutex_exit(&instance->reg_write_mtx); in mrsas_tbolt_ioc_init()
1073 if (ddi_get8(instance->mpi2_frame_pool_dma_obj.acc_handle, in mrsas_tbolt_ioc_init()
1078 mrsas_dump_reply_desc(instance); in mrsas_tbolt_ioc_init()
1082 mrsas_dump_reply_desc(instance); in mrsas_tbolt_ioc_init()
1084 instance->unroll.verBuff = 1; in mrsas_tbolt_ioc_init()
1093 (void) mrsas_free_dma_obj(instance, instance->drv_ver_dma_obj); in mrsas_tbolt_ioc_init()
1099 wait_for_outstanding_poll_io(struct mrsas_instance *instance) in wait_for_outstanding_poll_io() argument
1108 if (instance->fw_outstanding <= 2) { in wait_for_outstanding_poll_io()
1113 (void) mr_sas_tbolt_process_outstanding_cmd(instance); in wait_for_outstanding_poll_io()
1115 if (instance->fw_outstanding > 2) { in wait_for_outstanding_poll_io()
1129 struct mrsas_instance *instance = ADDR2MR(ap); in mrsas_tbolt_tran_start() local
1135 if (instance->deadadapter == 1) { in mrsas_tbolt_tran_start()
1136 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_tran_start()
1145 if (instance->adapterresetinprogress) { in mrsas_tbolt_tran_start()
1152 cmd = mrsas_tbolt_build_cmd(instance, ap, pkt, &cmd_done); in mrsas_tbolt_tran_start()
1177 if (instance->fw_outstanding > instance->max_fw_cmds) { in mrsas_tbolt_tran_start()
1178 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_tran_start()
1181 uint16_t, instance->fw_outstanding, in mrsas_tbolt_tran_start()
1182 uint16_t, instance->max_fw_cmds); in mrsas_tbolt_tran_start()
1183 return_raid_msg_pkt(instance, cmd); in mrsas_tbolt_tran_start()
1195 instance->func_ptr->issue_cmd(cmd, instance); in mrsas_tbolt_tran_start()
1197 instance->func_ptr->issue_cmd(cmd, instance); in mrsas_tbolt_tran_start()
1198 (void) wait_for_outstanding_poll_io(instance); in mrsas_tbolt_tran_start()
1199 (void) mrsas_common_check(instance, cmd); in mrsas_tbolt_tran_start()
1238 mr_sas_tbolt_build_sgl(struct mrsas_instance *instance, in mr_sas_tbolt_build_sgl() argument
1251 instance->mpi2_frame_pool_dma_obj.acc_handle; in mr_sas_tbolt_build_sgl()
1260 MaxSGEs = instance->max_sge_in_main_msg; in mr_sas_tbolt_build_sgl()
1279 if (numElements > instance->max_num_sge) { in mr_sas_tbolt_build_sgl()
1295 if (instance->gen3) { in mr_sas_tbolt_build_sgl()
1297 sgl_ptr_end += instance->max_sge_in_main_msg - 1; in mr_sas_tbolt_build_sgl()
1311 if (instance->gen3) { in mr_sas_tbolt_build_sgl()
1339 if (instance->gen3) { in mr_sas_tbolt_build_sgl()
1347 (U8)instance->chain_offset_io_req); in mr_sas_tbolt_build_sgl()
1354 (U8)instance->chain_offset_io_req); in mr_sas_tbolt_build_sgl()
1362 if (instance->gen3) { in mr_sas_tbolt_build_sgl()
1397 if (instance->gen3) { in mr_sas_tbolt_build_sgl()
1429 mrsas_tbolt_build_cmd(struct mrsas_instance *instance, struct scsi_address *ap, in mrsas_tbolt_build_cmd() argument
1438 instance->mpi2_frame_pool_dma_obj.acc_handle; in mrsas_tbolt_build_cmd()
1453 acmd->device_id = MAP_DEVICE_ID(instance, ap); in mrsas_tbolt_build_cmd()
1458 if (!(cmd = get_raid_msg_pkt(instance))) { in mrsas_tbolt_build_cmd()
1460 instance->fw_outstanding, uint16_t, instance->max_fw_cmds); in mrsas_tbolt_build_cmd()
1465 ReqDescUnion = mr_sas_get_request_descriptor(instance, index); in mrsas_tbolt_build_cmd()
1597 if (instance->tbolt && in mrsas_tbolt_build_cmd()
1599 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_build_cmd()
1618 mutex_enter(&instance->sync_map_mtx); in mrsas_tbolt_build_cmd()
1621 instance->ld_map[(instance->map_id & 1)]; in mrsas_tbolt_build_cmd()
1625 MAX_LOGICAL_DRIVES) || !instance->fast_path_io) { in mrsas_tbolt_build_cmd()
1626 dev_err(instance->dip, CE_NOTE, in mrsas_tbolt_build_cmd()
1636 if (MR_BuildRaidContext(instance, &io_info, in mrsas_tbolt_build_cmd()
1646 enable_fp, instance->fast_path_io, fp_possible)); in mrsas_tbolt_build_cmd()
1653 mrsas_tbolt_prepare_cdb(instance, in mrsas_tbolt_build_cmd()
1672 if (instance->gen3) { in mrsas_tbolt_build_cmd()
1702 if ((instance->load_balance_info[ in mrsas_tbolt_build_cmd()
1706 get_updated_dev_handle(&instance-> in mrsas_tbolt_build_cmd()
1736 if (instance->gen3) { in mrsas_tbolt_build_cmd()
1761 mutex_exit(&instance->sync_map_mtx); in mrsas_tbolt_build_cmd()
1766 return_raid_msg_pkt(instance, cmd); in mrsas_tbolt_build_cmd()
1782 return_raid_msg_pkt(instance, cmd); in mrsas_tbolt_build_cmd()
1805 mutex_enter(&instance->sync_map_mtx); in mrsas_tbolt_build_cmd()
1807 local_map_ptr = instance->ld_map[instance->map_id & 1]; in mrsas_tbolt_build_cmd()
1840 if (instance->fast_path_io && instance->gen3) { in mrsas_tbolt_build_cmd()
1851 mutex_exit(&instance->sync_map_mtx); in mrsas_tbolt_build_cmd()
1863 (void) mr_sas_tbolt_build_sgl(instance, acmd, cmd, in mrsas_tbolt_build_cmd()
1882 tbolt_read_fw_status_reg(struct mrsas_instance *instance) in tbolt_read_fw_status_reg() argument
1884 return ((uint32_t)RD_OB_SCRATCH_PAD_0(instance)); in tbolt_read_fw_status_reg()
1888 tbolt_issue_cmd(struct mrsas_cmd *cmd, struct mrsas_instance *instance) in tbolt_issue_cmd() argument
1891 atomic_inc_16(&instance->fw_outstanding); in tbolt_issue_cmd()
1911 gethrtime(), (void *)cmd, (void *)instance, in tbolt_issue_cmd()
1913 if (instance->adapterresetinprogress) { in tbolt_issue_cmd()
1918 push_pending_mfi_pkt(instance, cmd); in tbolt_issue_cmd()
1924 "(NO PKT)\n", gethrtime(), (void *)cmd, (void *)instance)); in tbolt_issue_cmd()
1928 mutex_enter(&instance->reg_write_mtx); in tbolt_issue_cmd()
1929 WR_IB_LOW_QPORT((uint32_t)(req_desc->Words), instance); in tbolt_issue_cmd()
1930 WR_IB_HIGH_QPORT((uint32_t)(req_desc->Words >> 32), instance); in tbolt_issue_cmd()
1931 mutex_exit(&instance->reg_write_mtx); in tbolt_issue_cmd()
1938 tbolt_issue_cmd_in_sync_mode(struct mrsas_instance *instance, in tbolt_issue_cmd_in_sync_mode() argument
1953 if (instance->adapterresetinprogress) { in tbolt_issue_cmd_in_sync_mode()
1961 mutex_enter(&instance->reg_write_mtx); in tbolt_issue_cmd_in_sync_mode()
1962 WR_IB_LOW_QPORT((uint32_t)(req_desc->Words), instance); in tbolt_issue_cmd_in_sync_mode()
1963 WR_IB_HIGH_QPORT((uint32_t)(req_desc->Words >> 32), instance); in tbolt_issue_cmd_in_sync_mode()
1964 mutex_exit(&instance->reg_write_mtx); in tbolt_issue_cmd_in_sync_mode()
1970 push_pending_mfi_pkt(instance, cmd); in tbolt_issue_cmd_in_sync_mode()
1975 (void *)((uintptr_t)(instance)->regmap + IB_HIGH_QPORT))); in tbolt_issue_cmd_in_sync_mode()
1978 (void *)((uintptr_t)(instance)->regmap + IB_LOW_QPORT))); in tbolt_issue_cmd_in_sync_mode()
1984 mutex_enter(&instance->reg_write_mtx); in tbolt_issue_cmd_in_sync_mode()
1985 WR_IB_LOW_QPORT((uint32_t)(req_desc->Words), instance); in tbolt_issue_cmd_in_sync_mode()
1986 WR_IB_HIGH_QPORT((uint32_t)(req_desc->Words >> 32), instance); in tbolt_issue_cmd_in_sync_mode()
1987 mutex_exit(&instance->reg_write_mtx); in tbolt_issue_cmd_in_sync_mode()
1994 mutex_enter(&instance->int_cmd_mtx); in tbolt_issue_cmd_in_sync_mode()
1996 cv_wait(&instance->int_cmd_cv, &instance->int_cmd_mtx); in tbolt_issue_cmd_in_sync_mode()
1998 mutex_exit(&instance->int_cmd_mtx); in tbolt_issue_cmd_in_sync_mode()
2012 tbolt_issue_cmd_in_poll_mode(struct mrsas_instance *instance, in tbolt_issue_cmd_in_poll_mode() argument
2039 mutex_enter(&instance->reg_write_mtx); in tbolt_issue_cmd_in_poll_mode()
2040 WR_IB_LOW_QPORT((uint32_t)(req_desc->Words), instance); in tbolt_issue_cmd_in_poll_mode()
2041 WR_IB_HIGH_QPORT((uint32_t)(req_desc->Words >> 32), instance); in tbolt_issue_cmd_in_poll_mode()
2042 mutex_exit(&instance->reg_write_mtx); in tbolt_issue_cmd_in_poll_mode()
2064 tbolt_enable_intr(struct mrsas_instance *instance) in tbolt_enable_intr() argument
2070 WR_OB_INTR_MASK(~(MFI_FUSION_ENABLE_INTERRUPT_MASK), instance); in tbolt_enable_intr()
2073 (void) RD_OB_INTR_MASK(instance); in tbolt_enable_intr()
2078 tbolt_disable_intr(struct mrsas_instance *instance) in tbolt_disable_intr() argument
2082 WR_OB_INTR_MASK(mask, instance); in tbolt_disable_intr()
2086 (void) RD_OB_INTR_MASK(instance); in tbolt_disable_intr()
2091 tbolt_intr_ack(struct mrsas_instance *instance) in tbolt_intr_ack() argument
2096 status = RD_OB_INTR_STATUS(instance); in tbolt_intr_ack()
2104 if (mrsas_check_acc_handle(instance->regmap_handle) != DDI_SUCCESS) { in tbolt_intr_ack()
2105 ddi_fm_service_impact(instance->dip, DDI_SERVICE_LOST); in tbolt_intr_ack()
2111 WR_OB_INTR_STATUS(status, instance); in tbolt_intr_ack()
2113 (void) RD_OB_INTR_STATUS(instance); in tbolt_intr_ack()
2130 get_raid_msg_pkt(struct mrsas_instance *instance) in get_raid_msg_pkt() argument
2132 mlist_t *head = &instance->cmd_pool_list; in get_raid_msg_pkt()
2135 mutex_enter(&instance->cmd_pool_mtx); in get_raid_msg_pkt()
2136 ASSERT(mutex_owned(&instance->cmd_pool_mtx)); in get_raid_msg_pkt()
2148 mutex_exit(&instance->cmd_pool_mtx); in get_raid_msg_pkt()
2157 get_raid_msg_mfi_pkt(struct mrsas_instance *instance) in get_raid_msg_mfi_pkt() argument
2159 mlist_t *head = &instance->cmd_app_pool_list; in get_raid_msg_mfi_pkt()
2162 mutex_enter(&instance->cmd_app_pool_mtx); in get_raid_msg_mfi_pkt()
2163 ASSERT(mutex_owned(&instance->cmd_app_pool_mtx)); in get_raid_msg_mfi_pkt()
2177 mutex_exit(&instance->cmd_app_pool_mtx); in get_raid_msg_mfi_pkt()
2191 return_raid_msg_pkt(struct mrsas_instance *instance, struct mrsas_cmd *cmd) in return_raid_msg_pkt() argument
2193 mutex_enter(&instance->cmd_pool_mtx); in return_raid_msg_pkt()
2194 ASSERT(mutex_owned(&instance->cmd_pool_mtx)); in return_raid_msg_pkt()
2197 mlist_add_tail(&cmd->list, &instance->cmd_pool_list); in return_raid_msg_pkt()
2199 mutex_exit(&instance->cmd_pool_mtx); in return_raid_msg_pkt()
2203 return_raid_msg_mfi_pkt(struct mrsas_instance *instance, struct mrsas_cmd *cmd) in return_raid_msg_mfi_pkt() argument
2205 mutex_enter(&instance->cmd_app_pool_mtx); in return_raid_msg_mfi_pkt()
2206 ASSERT(mutex_owned(&instance->cmd_app_pool_mtx)); in return_raid_msg_mfi_pkt()
2208 mlist_add_tail(&cmd->list, &instance->cmd_app_pool_list); in return_raid_msg_mfi_pkt()
2210 mutex_exit(&instance->cmd_app_pool_mtx); in return_raid_msg_mfi_pkt()
2215 mr_sas_tbolt_build_mfi_cmd(struct mrsas_instance *instance, in mr_sas_tbolt_build_mfi_cmd() argument
2223 instance->mpi2_frame_pool_dma_obj.acc_handle; in mr_sas_tbolt_build_mfi_cmd()
2225 if (!instance->tbolt) { in mr_sas_tbolt_build_mfi_cmd()
2232 ReqDescUnion = mr_sas_get_request_descriptor(instance, index); in mr_sas_tbolt_build_mfi_cmd()
2254 if (instance->gen3) { in mr_sas_tbolt_build_mfi_cmd()
2257 sgl_ptr_end += instance->max_sge_in_main_msg - 1; in mr_sas_tbolt_build_mfi_cmd()
2297 tbolt_complete_cmd(struct mrsas_instance *instance, in tbolt_complete_cmd() argument
2310 instance->mpi2_frame_pool_dma_obj.acc_handle; in tbolt_complete_cmd()
2338 lbinfo = &instance->load_balance_info[acmd->device_id]; in tbolt_complete_cmd()
2407 dev_err(instance->dip, CE_WARN, in tbolt_complete_cmd()
2445 dev_err(instance->dip, CE_WARN, in tbolt_complete_cmd()
2495 dev_err(instance->dip, CE_WARN, in tbolt_complete_cmd()
2502 atomic_add_16(&instance->fw_outstanding, (-1)); in tbolt_complete_cmd()
2504 (void) mrsas_common_check(instance, cmd); in tbolt_complete_cmd()
2508 ddi_fm_service_impact(instance->dip, in tbolt_complete_cmd()
2525 return_raid_msg_pkt(instance, cmd); in tbolt_complete_cmd()
2533 mutex_enter(&instance->sync_map_mtx); in tbolt_complete_cmd()
2539 dev_err(instance->dip, CE_WARN, in tbolt_complete_cmd()
2543 instance->map_id++; in tbolt_complete_cmd()
2546 PRIu64, instance->map_id)); in tbolt_complete_cmd()
2550 instance->ld_map[instance->map_id & 1], in tbolt_complete_cmd()
2551 instance->load_balance_info)) { in tbolt_complete_cmd()
2552 instance->fast_path_io = 1; in tbolt_complete_cmd()
2554 instance->fast_path_io = 0; in tbolt_complete_cmd()
2559 instance->fast_path_io)); in tbolt_complete_cmd()
2561 instance->unroll.syncCmd = 0; in tbolt_complete_cmd()
2563 if (instance->map_update_cmd == cmd) { in tbolt_complete_cmd()
2564 return_raid_msg_pkt(instance, cmd); in tbolt_complete_cmd()
2565 atomic_add_16(&instance->fw_outstanding, (-1)); in tbolt_complete_cmd()
2566 (void) mrsas_tbolt_sync_map_info(instance); in tbolt_complete_cmd()
2571 instance->ld_map[instance->map_id & 1] in tbolt_complete_cmd()
2573 mutex_exit(&instance->sync_map_mtx); in tbolt_complete_cmd()
2581 if ((instance->aen_cmd == cmd) && in tbolt_complete_cmd()
2582 (instance->aen_cmd->abort_aen)) { in tbolt_complete_cmd()
2586 atomic_add_16(&instance->fw_outstanding, (-1)); in tbolt_complete_cmd()
2587 service_mfi_aen(instance, cmd); in tbolt_complete_cmd()
2596 tbolt_complete_cmd_in_sync_mode(instance, cmd); in tbolt_complete_cmd()
2604 mrsas_fm_ereport(instance, DDI_FM_DEVICE_NO_RESPONSE); in tbolt_complete_cmd()
2605 ddi_fm_service_impact(instance->dip, DDI_SERVICE_LOST); in tbolt_complete_cmd()
2615 mr_sas_tbolt_process_outstanding_cmd(struct mrsas_instance *instance) in mr_sas_tbolt_process_outstanding_cmd() argument
2627 (void) ddi_dma_sync(instance->reply_desc_dma_obj.dma_handle, in mr_sas_tbolt_process_outstanding_cmd()
2630 (void) ddi_dma_sync(instance->reply_desc_dma_obj.dma_handle, in mr_sas_tbolt_process_outstanding_cmd()
2633 desc = instance->reply_frame_pool; in mr_sas_tbolt_process_outstanding_cmd()
2634 desc += instance->reply_read_index; in mr_sas_tbolt_process_outstanding_cmd()
2643 if (mrsas_check_dma_handle(instance->mfi_internal_dma_obj.dma_handle) in mr_sas_tbolt_process_outstanding_cmd()
2645 mrsas_fm_ereport(instance, DDI_FM_DEVICE_NO_RESPONSE); in mr_sas_tbolt_process_outstanding_cmd()
2646 ddi_fm_service_impact(instance->dip, DDI_SERVICE_LOST); in mr_sas_tbolt_process_outstanding_cmd()
2663 (void) ddi_dma_sync(instance->reply_desc_dma_obj.dma_handle, in mr_sas_tbolt_process_outstanding_cmd()
2668 if (!smid || smid > instance->max_fw_cmds + 1) { in mr_sas_tbolt_process_outstanding_cmd()
2675 cmd = instance->cmd_list[smid - 1]; in mr_sas_tbolt_process_outstanding_cmd()
2681 mutex_enter(&instance->cmd_pend_mtx); in mr_sas_tbolt_process_outstanding_cmd()
2700 mutex_exit(&instance->cmd_pend_mtx); in mr_sas_tbolt_process_outstanding_cmd()
2702 tbolt_complete_cmd(instance, cmd); in mr_sas_tbolt_process_outstanding_cmd()
2707 instance->reply_read_index++; in mr_sas_tbolt_process_outstanding_cmd()
2709 if (instance->reply_read_index >= (instance->reply_q_depth)) { in mr_sas_tbolt_process_outstanding_cmd()
2711 instance->reply_read_index = 0; in mr_sas_tbolt_process_outstanding_cmd()
2715 if (!instance->reply_read_index) in mr_sas_tbolt_process_outstanding_cmd()
2716 desc = instance->reply_frame_pool; in mr_sas_tbolt_process_outstanding_cmd()
2737 WR_MPI2_REPLY_POST_INDEX(instance->reply_read_index, instance); in mr_sas_tbolt_process_outstanding_cmd()
2740 (void) ddi_dma_sync(instance->reply_desc_dma_obj.dma_handle, in mr_sas_tbolt_process_outstanding_cmd()
2743 (void) ddi_dma_sync(instance->reply_desc_dma_obj.dma_handle, in mr_sas_tbolt_process_outstanding_cmd()
2761 tbolt_complete_cmd_in_sync_mode(struct mrsas_instance *instance, in tbolt_complete_cmd_in_sync_mode() argument
2770 mutex_enter(&instance->int_cmd_mtx); in tbolt_complete_cmd_in_sync_mode()
2774 cv_broadcast(&instance->int_cmd_cv); in tbolt_complete_cmd_in_sync_mode()
2775 mutex_exit(&instance->int_cmd_mtx); in tbolt_complete_cmd_in_sync_mode()
2788 mrsas_tbolt_get_ld_map_info(struct mrsas_instance *instance) in mrsas_tbolt_get_ld_map_info() argument
2797 cmd = get_raid_msg_pkt(instance); in mrsas_tbolt_get_ld_map_info()
2800 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_get_ld_map_info()
2814 ci = instance->ld_map[instance->map_id & 1]; in mrsas_tbolt_get_ld_map_info()
2815 ci_h = instance->ld_map_phy[instance->map_id & 1]; in mrsas_tbolt_get_ld_map_info()
2818 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_get_ld_map_info()
2820 return_raid_msg_pkt(instance, cmd); in mrsas_tbolt_get_ld_map_info()
2839 mr_sas_tbolt_build_mfi_cmd(instance, cmd); in mrsas_tbolt_get_ld_map_info()
2841 if (!instance->func_ptr->issue_cmd_in_poll_mode(instance, cmd)) { in mrsas_tbolt_get_ld_map_info()
2845 dev_err(instance->dip, CE_WARN, "Get LD Map Info failed"); in mrsas_tbolt_get_ld_map_info()
2849 return_raid_msg_pkt(instance, cmd); in mrsas_tbolt_get_ld_map_info()
2855 mrsas_dump_reply_desc(struct mrsas_instance *instance) in mrsas_dump_reply_desc() argument
2861 reply_desc = instance->reply_frame_pool; in mrsas_dump_reply_desc()
2863 for (i = 0; i < instance->reply_q_depth; i++, reply_desc++) { in mrsas_dump_reply_desc()
2879 mrsas_tbolt_prepare_cdb(struct mrsas_instance *instance, U8 cdb[], in mrsas_tbolt_prepare_cdb() argument
2886 instance->mpi2_frame_pool_dma_obj.acc_handle; in mrsas_tbolt_prepare_cdb()
3111 mrsas_tbolt_check_map_info(struct mrsas_instance *instance) in mrsas_tbolt_check_map_info() argument
3115 if (!mrsas_tbolt_get_ld_map_info(instance)) { in mrsas_tbolt_check_map_info()
3117 ld_map = instance->ld_map[instance->map_id & 1]; in mrsas_tbolt_check_map_info()
3123 instance->ld_map[instance->map_id & 1], in mrsas_tbolt_check_map_info()
3124 instance->load_balance_info)) { in mrsas_tbolt_check_map_info()
3128 instance->fast_path_io = 1; in mrsas_tbolt_check_map_info()
3131 instance->fast_path_io)); in mrsas_tbolt_check_map_info()
3138 instance->fast_path_io = 0; in mrsas_tbolt_check_map_info()
3139 dev_err(instance->dip, CE_WARN, "MR_ValidateMapInfo failed"); in mrsas_tbolt_check_map_info()
3141 "instance->fast_path_io %d", instance->fast_path_io)); in mrsas_tbolt_check_map_info()
3153 mrsas_tbolt_kill_adapter(struct mrsas_instance *instance) in mrsas_tbolt_kill_adapter() argument
3155 dev_err(instance->dip, CE_NOTE, "TBOLT Kill adapter called"); in mrsas_tbolt_kill_adapter()
3157 if (instance->deadadapter == 1) in mrsas_tbolt_kill_adapter()
3162 mutex_enter(&instance->ocr_flags_mtx); in mrsas_tbolt_kill_adapter()
3163 instance->deadadapter = 1; in mrsas_tbolt_kill_adapter()
3164 mutex_exit(&instance->ocr_flags_mtx); in mrsas_tbolt_kill_adapter()
3165 instance->func_ptr->disable_intr(instance); in mrsas_tbolt_kill_adapter()
3166 WR_RESERVED0_REGISTER(MFI_STOP_ADP, instance); in mrsas_tbolt_kill_adapter()
3168 (void) RD_RESERVED0_REGISTER(instance); in mrsas_tbolt_kill_adapter()
3170 (void) mrsas_print_pending_cmds(instance); in mrsas_tbolt_kill_adapter()
3171 (void) mrsas_complete_pending_cmds(instance); in mrsas_tbolt_kill_adapter()
3175 mrsas_reset_reply_desc(struct mrsas_instance *instance) in mrsas_reset_reply_desc() argument
3179 instance->reply_read_index = 0; in mrsas_reset_reply_desc()
3182 reply_desc = instance->reply_frame_pool; in mrsas_reset_reply_desc()
3184 for (i = 0; i < instance->reply_q_depth; i++) { in mrsas_reset_reply_desc()
3191 mrsas_tbolt_reset_ppc(struct mrsas_instance *instance) in mrsas_tbolt_reset_ppc() argument
3200 if (instance->deadadapter == 1) { in mrsas_tbolt_reset_ppc()
3201 dev_err(instance->dip, CE_WARN, "mrsas_tbolt_reset_ppc: " in mrsas_tbolt_reset_ppc()
3206 mutex_enter(&instance->ocr_flags_mtx); in mrsas_tbolt_reset_ppc()
3207 instance->adapterresetinprogress = 1; in mrsas_tbolt_reset_ppc()
3208 mutex_exit(&instance->ocr_flags_mtx); in mrsas_tbolt_reset_ppc()
3210 instance->func_ptr->disable_intr(instance); in mrsas_tbolt_reset_ppc()
3216 instance->reply_read_index = 0; in mrsas_tbolt_reset_ppc()
3222 WR_TBOLT_IB_WRITE_SEQ(0x0, instance); in mrsas_tbolt_reset_ppc()
3224 WR_TBOLT_IB_WRITE_SEQ(0xF, instance); in mrsas_tbolt_reset_ppc()
3225 WR_TBOLT_IB_WRITE_SEQ(0x4, instance); in mrsas_tbolt_reset_ppc()
3226 WR_TBOLT_IB_WRITE_SEQ(0xb, instance); in mrsas_tbolt_reset_ppc()
3227 WR_TBOLT_IB_WRITE_SEQ(0x2, instance); in mrsas_tbolt_reset_ppc()
3228 WR_TBOLT_IB_WRITE_SEQ(0x7, instance); in mrsas_tbolt_reset_ppc()
3229 WR_TBOLT_IB_WRITE_SEQ(0xd, instance); in mrsas_tbolt_reset_ppc()
3237 status = RD_TBOLT_HOST_DIAG(instance); in mrsas_tbolt_reset_ppc()
3240 status = RD_TBOLT_HOST_DIAG(instance); in mrsas_tbolt_reset_ppc()
3242 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_reset_ppc()
3249 WR_TBOLT_HOST_DIAG(status | DIAG_TBOLT_RESET_ADAPTER, instance); in mrsas_tbolt_reset_ppc()
3254 status = RD_TBOLT_HOST_DIAG(instance); in mrsas_tbolt_reset_ppc()
3257 status = RD_TBOLT_HOST_DIAG(instance); in mrsas_tbolt_reset_ppc()
3262 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_reset_ppc()
3271 abs_state = instance->func_ptr->read_fw_status_reg(instance); in mrsas_tbolt_reset_ppc()
3275 abs_state = instance->func_ptr->read_fw_status_reg(instance); in mrsas_tbolt_reset_ppc()
3278 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_reset_ppc()
3285 if (mfi_state_transition_to_ready(instance) || in mrsas_tbolt_reset_ppc()
3288 instance->func_ptr->read_fw_status_reg(instance); in mrsas_tbolt_reset_ppc()
3303 instance->fw_fault_count_after_ocr++; in mrsas_tbolt_reset_ppc()
3304 if (instance->fw_fault_count_after_ocr in mrsas_tbolt_reset_ppc()
3306 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_reset_ppc()
3310 instance->fw_fault_count_after_ocr); in mrsas_tbolt_reset_ppc()
3314 dev_err(instance->dip, CE_WARN, "%s:" in mrsas_tbolt_reset_ppc()
3319 mrsas_tbolt_kill_adapter(instance); in mrsas_tbolt_reset_ppc()
3326 instance->fw_fault_count_after_ocr = 0; in mrsas_tbolt_reset_ppc()
3328 mrsas_reset_reply_desc(instance); in mrsas_tbolt_reset_ppc()
3330 abs_state = mrsas_issue_init_mpi2(instance); in mrsas_tbolt_reset_ppc()
3332 dev_err(instance->dip, CE_WARN, "mrsas_tbolt_reset_ppc: " in mrsas_tbolt_reset_ppc()
3337 (void) mrsas_print_pending_cmds(instance); in mrsas_tbolt_reset_ppc()
3339 instance->func_ptr->enable_intr(instance); in mrsas_tbolt_reset_ppc()
3340 instance->fw_outstanding = 0; in mrsas_tbolt_reset_ppc()
3342 (void) mrsas_issue_pending_cmds(instance); in mrsas_tbolt_reset_ppc()
3344 instance->aen_cmd->retry_count_for_ocr = 0; in mrsas_tbolt_reset_ppc()
3345 instance->aen_cmd->drv_pkt_time = 0; in mrsas_tbolt_reset_ppc()
3347 instance->func_ptr->issue_cmd(instance->aen_cmd, instance); in mrsas_tbolt_reset_ppc()
3349 mutex_enter(&instance->ocr_flags_mtx); in mrsas_tbolt_reset_ppc()
3350 instance->adapterresetinprogress = 0; in mrsas_tbolt_reset_ppc()
3351 mutex_exit(&instance->ocr_flags_mtx); in mrsas_tbolt_reset_ppc()
3353 dev_err(instance->dip, CE_NOTE, "TBOLT adapter reset successfully"); in mrsas_tbolt_reset_ppc()
3368 mrsas_tbolt_sync_map_info(struct mrsas_instance *instance) in mrsas_tbolt_sync_map_info() argument
3381 cmd = get_raid_msg_pkt(instance); in mrsas_tbolt_sync_map_info()
3384 dev_err(instance->dip, CE_WARN, in mrsas_tbolt_sync_map_info()
3397 map = instance->ld_map[instance->map_id & 1]; in mrsas_tbolt_sync_map_info()
3408 ci = (LD_TARGET_SYNC *)instance->ld_map[(instance->map_id - 1) & 1]; in mrsas_tbolt_sync_map_info()
3411 ci_h = instance->ld_map_phy[(instance->map_id - 1) & 1]; in mrsas_tbolt_sync_map_info()
3451 instance->map_update_cmd = cmd; in mrsas_tbolt_sync_map_info()
3452 mr_sas_tbolt_build_mfi_cmd(instance, cmd); in mrsas_tbolt_sync_map_info()
3454 instance->func_ptr->issue_cmd(cmd, instance); in mrsas_tbolt_sync_map_info()
3456 instance->unroll.syncCmd = 1; in mrsas_tbolt_sync_map_info()
3466 abort_syncmap_cmd(struct mrsas_instance *instance, in abort_syncmap_cmd() argument
3476 cmd = get_raid_msg_mfi_pkt(instance); in abort_syncmap_cmd()
3479 dev_err(instance->dip, CE_WARN, in abort_syncmap_cmd()
3505 mr_sas_tbolt_build_mfi_cmd(instance, cmd); in abort_syncmap_cmd()
3507 if (instance->func_ptr->issue_cmd_in_poll_mode(instance, cmd)) { in abort_syncmap_cmd()
3515 return_raid_msg_mfi_pkt(instance, cmd); in abort_syncmap_cmd()
3517 atomic_add_16(&instance->fw_outstanding, (-1)); in abort_syncmap_cmd()
3531 mrsas_tbolt_config_pd(struct mrsas_instance *instance, uint16_t tgt, in mrsas_tbolt_config_pd() argument
3542 if ((child = mrsas_find_child(instance, tgt, lun)) != NULL) { in mrsas_tbolt_config_pd()
3546 if (instance->mr_tbolt_pd_list[tgt].flag != MRDRV_TGT_VALID) { in mrsas_tbolt_config_pd()
3547 rval = mrsas_service_evt(instance, tgt, 1, in mrsas_tbolt_config_pd()
3559 mrsas_tbolt_get_pd_info(instance, pds, tgt); in mrsas_tbolt_config_pd()
3570 sd->sd_address.a_hba_tran = instance->tran; in mrsas_tbolt_config_pd()
3575 rval = mrsas_config_scsi_device(instance, sd, ldip); in mrsas_tbolt_config_pd()
3576 dev_err(instance->dip, CE_CONT, in mrsas_tbolt_config_pd()
3606 mrsas_tbolt_get_pd_info(struct mrsas_instance *instance, in mrsas_tbolt_get_pd_info() argument
3613 ASSERT(instance->tbolt || instance->skinny); in mrsas_tbolt_get_pd_info()
3615 if (instance->tbolt) in mrsas_tbolt_get_pd_info()
3616 cmd = get_raid_msg_pkt(instance); in mrsas_tbolt_get_pd_info()
3618 cmd = mrsas_get_mfi_pkt(instance); in mrsas_tbolt_get_pd_info()
3640 (void) mrsas_alloc_dma_obj(instance, &dcmd_dma_obj, in mrsas_tbolt_get_pd_info()
3663 if (instance->tbolt) in mrsas_tbolt_get_pd_info()
3664 mr_sas_tbolt_build_mfi_cmd(instance, cmd); in mrsas_tbolt_get_pd_info()
3666 instance->func_ptr->issue_cmd_in_sync_mode(instance, cmd); in mrsas_tbolt_get_pd_info()
3671 (void) mrsas_free_dma_obj(instance, dcmd_dma_obj); in mrsas_tbolt_get_pd_info()
3673 if (instance->tbolt) in mrsas_tbolt_get_pd_info()
3674 return_raid_msg_pkt(instance, cmd); in mrsas_tbolt_get_pd_info()
3676 mrsas_return_mfi_pkt(instance, cmd); in mrsas_tbolt_get_pd_info()