Lines Matching refs:mrioc
22 static int mpi3mr_alloc_trace_buffer(struct mpi3mr_ioc *mrioc, u32 trace_size) in mpi3mr_alloc_trace_buffer() argument
24 struct diag_buffer_desc *diag_buffer = &mrioc->diag_buffers[0]; in mpi3mr_alloc_trace_buffer()
26 diag_buffer->addr = dma_alloc_coherent(&mrioc->pdev->dev, in mpi3mr_alloc_trace_buffer()
29 dprint_init(mrioc, "trace diag buffer is allocated successfully\n"); in mpi3mr_alloc_trace_buffer()
46 void mpi3mr_alloc_diag_bufs(struct mpi3mr_ioc *mrioc) in mpi3mr_alloc_diag_bufs() argument
56 if (mrioc->diag_buffers[0].addr || mrioc->diag_buffers[1].addr) in mpi3mr_alloc_diag_bufs()
59 retval = mpi3mr_cfg_get_driver_pg1(mrioc, &driver_pg1, pg_sz); in mpi3mr_alloc_diag_bufs()
61 ioc_warn(mrioc, in mpi3mr_alloc_diag_bufs()
76 dprint_init(mrioc, in mpi3mr_alloc_diag_bufs()
82 dprint_init(mrioc, in mpi3mr_alloc_diag_bufs()
94 diag_buffer = &mrioc->diag_buffers[0]; in mpi3mr_alloc_diag_bufs()
97 if ((mrioc->facts.diag_trace_sz < trace_size) && (trace_size >= in mpi3mr_alloc_diag_bufs()
100 dprint_init(mrioc, in mpi3mr_alloc_diag_bufs()
104 mpi3mr_alloc_trace_buffer(mrioc, trace_size)) { in mpi3mr_alloc_diag_bufs()
107 dprint_init(mrioc, "trace diag buffer allocation failed\n" in mpi3mr_alloc_diag_bufs()
117 diag_buffer = &mrioc->diag_buffers[1]; in mpi3mr_alloc_diag_bufs()
121 if ((mrioc->facts.diag_fw_sz < fw_size) && (fw_size >= fw_min_size)) { in mpi3mr_alloc_diag_bufs()
124 = dma_alloc_coherent(&mrioc->pdev->dev, fw_size, in mpi3mr_alloc_diag_bufs()
129 dprint_init(mrioc, in mpi3mr_alloc_diag_bufs()
133 dprint_init(mrioc, "%s:firmware diag buffer allocated successfully\n", in mpi3mr_alloc_diag_bufs()
139 dprint_init(mrioc, "%s:trace diag buffer allocation failed,\n" in mpi3mr_alloc_diag_bufs()
157 int mpi3mr_issue_diag_buf_post(struct mpi3mr_ioc *mrioc, in mpi3mr_issue_diag_buf_post() argument
165 mutex_lock(&mrioc->init_cmds.mutex); in mpi3mr_issue_diag_buf_post()
166 if (mrioc->init_cmds.state & MPI3MR_CMD_PENDING) { in mpi3mr_issue_diag_buf_post()
167 dprint_bsg_err(mrioc, "%s: command is in use\n", __func__); in mpi3mr_issue_diag_buf_post()
168 mutex_unlock(&mrioc->init_cmds.mutex); in mpi3mr_issue_diag_buf_post()
171 mrioc->init_cmds.state = MPI3MR_CMD_PENDING; in mpi3mr_issue_diag_buf_post()
172 mrioc->init_cmds.is_waiting = 1; in mpi3mr_issue_diag_buf_post()
173 mrioc->init_cmds.callback = NULL; in mpi3mr_issue_diag_buf_post()
180 dprint_bsg_info(mrioc, "%s: posting diag buffer type %d\n", __func__, in mpi3mr_issue_diag_buf_post()
184 init_completion(&mrioc->init_cmds.done); in mpi3mr_issue_diag_buf_post()
185 retval = mpi3mr_admin_request_post(mrioc, &diag_buf_post_req, in mpi3mr_issue_diag_buf_post()
188 dprint_bsg_err(mrioc, "%s: admin request post failed\n", in mpi3mr_issue_diag_buf_post()
192 wait_for_completion_timeout(&mrioc->init_cmds.done, in mpi3mr_issue_diag_buf_post()
194 if (!(mrioc->init_cmds.state & MPI3MR_CMD_COMPLETE)) { in mpi3mr_issue_diag_buf_post()
195 mrioc->init_cmds.is_waiting = 0; in mpi3mr_issue_diag_buf_post()
196 dprint_bsg_err(mrioc, "%s: command timedout\n", __func__); in mpi3mr_issue_diag_buf_post()
197 mpi3mr_check_rh_fault_ioc(mrioc, in mpi3mr_issue_diag_buf_post()
202 if ((mrioc->init_cmds.ioc_status & MPI3_IOCSTATUS_STATUS_MASK) in mpi3mr_issue_diag_buf_post()
204 dprint_bsg_err(mrioc, in mpi3mr_issue_diag_buf_post()
207 (mrioc->init_cmds.ioc_status & MPI3_IOCSTATUS_STATUS_MASK), in mpi3mr_issue_diag_buf_post()
208 mrioc->init_cmds.ioc_loginfo); in mpi3mr_issue_diag_buf_post()
212 dprint_bsg_info(mrioc, "%s: diag buffer type %d posted successfully\n", in mpi3mr_issue_diag_buf_post()
218 mrioc->init_cmds.state = MPI3MR_CMD_NOTUSED; in mpi3mr_issue_diag_buf_post()
219 mutex_unlock(&mrioc->init_cmds.mutex); in mpi3mr_issue_diag_buf_post()
232 int mpi3mr_post_diag_bufs(struct mpi3mr_ioc *mrioc) in mpi3mr_post_diag_bufs() argument
238 diag_buffer = &mrioc->diag_buffers[i]; in mpi3mr_post_diag_bufs()
241 if (mpi3mr_issue_diag_buf_post(mrioc, diag_buffer)) in mpi3mr_post_diag_bufs()
258 int mpi3mr_issue_diag_buf_release(struct mpi3mr_ioc *mrioc, in mpi3mr_issue_diag_buf_release() argument
269 mutex_lock(&mrioc->init_cmds.mutex); in mpi3mr_issue_diag_buf_release()
270 if (mrioc->init_cmds.state & MPI3MR_CMD_PENDING) { in mpi3mr_issue_diag_buf_release()
271 dprint_reset(mrioc, "%s: command is in use\n", __func__); in mpi3mr_issue_diag_buf_release()
272 mutex_unlock(&mrioc->init_cmds.mutex); in mpi3mr_issue_diag_buf_release()
275 mrioc->init_cmds.state = MPI3MR_CMD_PENDING; in mpi3mr_issue_diag_buf_release()
276 mrioc->init_cmds.is_waiting = 1; in mpi3mr_issue_diag_buf_release()
277 mrioc->init_cmds.callback = NULL; in mpi3mr_issue_diag_buf_release()
284 dprint_reset(mrioc, "%s: releasing diag buffer type %d\n", __func__, in mpi3mr_issue_diag_buf_release()
286 init_completion(&mrioc->init_cmds.done); in mpi3mr_issue_diag_buf_release()
287 retval = mpi3mr_admin_request_post(mrioc, &diag_buf_manage_req, in mpi3mr_issue_diag_buf_release()
290 dprint_reset(mrioc, "%s: admin request post failed\n", __func__); in mpi3mr_issue_diag_buf_release()
295 wait_for_completion_timeout(&mrioc->init_cmds.done, in mpi3mr_issue_diag_buf_release()
297 if (!(mrioc->init_cmds.state & MPI3MR_CMD_COMPLETE)) { in mpi3mr_issue_diag_buf_release()
298 mrioc->init_cmds.is_waiting = 0; in mpi3mr_issue_diag_buf_release()
299 dprint_reset(mrioc, "%s: command timedout\n", __func__); in mpi3mr_issue_diag_buf_release()
300 mpi3mr_check_rh_fault_ioc(mrioc, in mpi3mr_issue_diag_buf_release()
305 if ((mrioc->init_cmds.ioc_status & MPI3_IOCSTATUS_STATUS_MASK) in mpi3mr_issue_diag_buf_release()
307 dprint_reset(mrioc, in mpi3mr_issue_diag_buf_release()
310 (mrioc->init_cmds.ioc_status & MPI3_IOCSTATUS_STATUS_MASK), in mpi3mr_issue_diag_buf_release()
311 mrioc->init_cmds.ioc_loginfo); in mpi3mr_issue_diag_buf_release()
315 dprint_reset(mrioc, "%s: diag buffer type %d released successfully\n", in mpi3mr_issue_diag_buf_release()
319 mrioc->init_cmds.state = MPI3MR_CMD_NOTUSED; in mpi3mr_issue_diag_buf_release()
320 mutex_unlock(&mrioc->init_cmds.mutex); in mpi3mr_issue_diag_buf_release()
339 static void mpi3mr_process_trigger(struct mpi3mr_ioc *mrioc, u8 trigger_type, in mpi3mr_process_trigger() argument
347 trace_hdb = mpi3mr_diag_buffer_for_type(mrioc, in mpi3mr_process_trigger()
354 fw_hdb = mpi3mr_diag_buffer_for_type(mrioc, MPI3_DIAG_BUFFER_TYPE_FW); in mpi3mr_process_trigger()
361 if (mrioc->snapdump_trigger_active || (mrioc->fw_release_trigger_active in mpi3mr_process_trigger()
362 && mrioc->trace_release_trigger_active) || in mpi3mr_process_trigger()
363 (!trace_hdb && !fw_hdb) || (!mrioc->driver_pg2) || in mpi3mr_process_trigger()
365 && (!mrioc->driver_pg2->num_triggers))) in mpi3mr_process_trigger()
372 global_trigger = le64_to_cpu(mrioc->driver_pg2->global_trigger); in mpi3mr_process_trigger()
378 mrioc->snapdump_trigger_active = true; in mpi3mr_process_trigger()
382 (!mrioc->trace_release_trigger_active)) { in mpi3mr_process_trigger()
384 mrioc->trace_release_trigger_active = true; in mpi3mr_process_trigger()
388 (!mrioc->fw_release_trigger_active)) { in mpi3mr_process_trigger()
390 mrioc->fw_release_trigger_active = true; in mpi3mr_process_trigger()
395 (!mrioc->trace_release_trigger_active)) { in mpi3mr_process_trigger()
397 mrioc->trace_release_trigger_active = true; in mpi3mr_process_trigger()
401 (!mrioc->fw_release_trigger_active)) { in mpi3mr_process_trigger()
403 mrioc->fw_release_trigger_active = true; in mpi3mr_process_trigger()
408 mpi3mr_hdb_trigger_data_event(mrioc, &event_data); in mpi3mr_process_trigger()
422 void mpi3mr_global_trigger(struct mpi3mr_ioc *mrioc, u64 trigger_data) in mpi3mr_global_trigger() argument
427 spin_lock_irqsave(&mrioc->trigger_lock, flags); in mpi3mr_global_trigger()
428 if (le64_to_cpu(mrioc->driver_pg2->global_trigger) & trigger_data) { in mpi3mr_global_trigger()
432 mpi3mr_process_trigger(mrioc, MPI3MR_HDB_TRIGGER_TYPE_GLOBAL, in mpi3mr_global_trigger()
435 spin_unlock_irqrestore(&mrioc->trigger_lock, flags); in mpi3mr_global_trigger()
451 void mpi3mr_scsisense_trigger(struct mpi3mr_ioc *mrioc, u8 sensekey, u8 asc, in mpi3mr_scsisense_trigger() argument
459 if (mrioc->scsisense_trigger_present) { in mpi3mr_scsisense_trigger()
460 spin_lock_irqsave(&mrioc->trigger_lock, flags); in mpi3mr_scsisense_trigger()
462 mrioc->driver_pg2->trigger; in mpi3mr_scsisense_trigger()
463 num_triggers = mrioc->driver_pg2->num_triggers; in mpi3mr_scsisense_trigger()
481 mpi3mr_process_trigger(mrioc, in mpi3mr_scsisense_trigger()
487 spin_unlock_irqrestore(&mrioc->trigger_lock, flags); in mpi3mr_scsisense_trigger()
502 void mpi3mr_event_trigger(struct mpi3mr_ioc *mrioc, u8 event) in mpi3mr_event_trigger() argument
509 if (mrioc->event_trigger_present) { in mpi3mr_event_trigger()
510 spin_lock_irqsave(&mrioc->trigger_lock, flags); in mpi3mr_event_trigger()
512 mrioc->driver_pg2->trigger; in mpi3mr_event_trigger()
513 num_triggers = mrioc->driver_pg2->num_triggers; in mpi3mr_event_trigger()
522 mpi3mr_process_trigger(mrioc, in mpi3mr_event_trigger()
528 spin_unlock_irqrestore(&mrioc->trigger_lock, flags); in mpi3mr_event_trigger()
544 void mpi3mr_reply_trigger(struct mpi3mr_ioc *mrioc, u16 ioc_status, in mpi3mr_reply_trigger() argument
552 if (mrioc->reply_trigger_present) { in mpi3mr_reply_trigger()
553 spin_lock_irqsave(&mrioc->trigger_lock, flags); in mpi3mr_reply_trigger()
555 mrioc->driver_pg2->trigger; in mpi3mr_reply_trigger()
556 num_triggers = mrioc->driver_pg2->num_triggers; in mpi3mr_reply_trigger()
571 mpi3mr_process_trigger(mrioc, in mpi3mr_reply_trigger()
577 spin_unlock_irqrestore(&mrioc->trigger_lock, flags); in mpi3mr_reply_trigger()
592 static int mpi3mr_get_num_trigger(struct mpi3mr_ioc *mrioc, u8 *num_triggers, in mpi3mr_get_num_trigger() argument
600 retval = mpi3mr_cfg_get_driver_pg2(mrioc, &drvr_page2, in mpi3mr_get_num_trigger()
604 dprint_init(mrioc, "%s: driver page 2 read failed\n", __func__); in mpi3mr_get_num_trigger()
622 int mpi3mr_refresh_trigger(struct mpi3mr_ioc *mrioc, u8 page_action) in mpi3mr_refresh_trigger() argument
631 retval = mpi3mr_get_num_trigger(mrioc, &num_triggers, page_action); in mpi3mr_refresh_trigger()
644 retval = mpi3mr_cfg_get_driver_pg2(mrioc, drvr_page2, pg_sz, page_action); in mpi3mr_refresh_trigger()
646 dprint_init(mrioc, "%s: driver page 2 read failed\n", __func__); in mpi3mr_refresh_trigger()
650 spin_lock_irqsave(&mrioc->trigger_lock, flags); in mpi3mr_refresh_trigger()
651 kfree(mrioc->driver_pg2); in mpi3mr_refresh_trigger()
652 mrioc->driver_pg2 = drvr_page2; in mpi3mr_refresh_trigger()
653 mrioc->reply_trigger_present = false; in mpi3mr_refresh_trigger()
654 mrioc->event_trigger_present = false; in mpi3mr_refresh_trigger()
655 mrioc->scsisense_trigger_present = false; in mpi3mr_refresh_trigger()
657 for (i = 0; (i < mrioc->driver_pg2->num_triggers); i++) { in mpi3mr_refresh_trigger()
658 trigger_type = mrioc->driver_pg2->trigger[i].event.type; in mpi3mr_refresh_trigger()
661 mrioc->reply_trigger_present = true; in mpi3mr_refresh_trigger()
664 mrioc->event_trigger_present = true; in mpi3mr_refresh_trigger()
667 mrioc->scsisense_trigger_present = true; in mpi3mr_refresh_trigger()
673 spin_unlock_irqrestore(&mrioc->trigger_lock, flags); in mpi3mr_refresh_trigger()
688 void mpi3mr_release_diag_bufs(struct mpi3mr_ioc *mrioc, u8 skip_rel_action) in mpi3mr_release_diag_bufs() argument
694 diag_buffer = &mrioc->diag_buffers[i]; in mpi3mr_release_diag_bufs()
700 mpi3mr_issue_diag_buf_release(mrioc, diag_buffer); in mpi3mr_release_diag_bufs()
748 void mpi3mr_set_trigger_data_in_all_hdb(struct mpi3mr_ioc *mrioc, in mpi3mr_set_trigger_data_in_all_hdb() argument
753 hdb = mpi3mr_diag_buffer_for_type(mrioc, MPI3_DIAG_BUFFER_TYPE_TRACE); in mpi3mr_set_trigger_data_in_all_hdb()
756 hdb = mpi3mr_diag_buffer_for_type(mrioc, MPI3_DIAG_BUFFER_TYPE_FW); in mpi3mr_set_trigger_data_in_all_hdb()
770 void mpi3mr_hdbstatuschg_evt_th(struct mpi3mr_ioc *mrioc, in mpi3mr_hdbstatuschg_evt_th() argument
779 diag_buffer = mpi3mr_diag_buffer_for_type(mrioc, evtdata->type); in mpi3mr_hdbstatuschg_evt_th()
805 dprint_event_th(mrioc, "%s: unknown reason_code(%d)\n", in mpi3mr_hdbstatuschg_evt_th()
823 mpi3mr_diag_buffer_for_type(struct mpi3mr_ioc *mrioc, u8 buf_type) in mpi3mr_diag_buffer_for_type() argument
828 if (mrioc->diag_buffers[i].type == buf_type) in mpi3mr_diag_buffer_for_type()
829 return &mrioc->diag_buffers[i]; in mpi3mr_diag_buffer_for_type()
843 static int mpi3mr_bsg_pel_abort(struct mpi3mr_ioc *mrioc) in mpi3mr_bsg_pel_abort() argument
850 if (mrioc->reset_in_progress) { in mpi3mr_bsg_pel_abort()
851 dprint_bsg_err(mrioc, "%s: reset in progress\n", __func__); in mpi3mr_bsg_pel_abort()
854 if (mrioc->stop_bsgs || mrioc->block_on_pci_err) { in mpi3mr_bsg_pel_abort()
855 dprint_bsg_err(mrioc, "%s: bsgs are blocked\n", __func__); in mpi3mr_bsg_pel_abort()
860 mutex_lock(&mrioc->pel_abort_cmd.mutex); in mpi3mr_bsg_pel_abort()
861 if (mrioc->pel_abort_cmd.state & MPI3MR_CMD_PENDING) { in mpi3mr_bsg_pel_abort()
862 dprint_bsg_err(mrioc, "%s: command is in use\n", __func__); in mpi3mr_bsg_pel_abort()
863 mutex_unlock(&mrioc->pel_abort_cmd.mutex); in mpi3mr_bsg_pel_abort()
866 mrioc->pel_abort_cmd.state = MPI3MR_CMD_PENDING; in mpi3mr_bsg_pel_abort()
867 mrioc->pel_abort_cmd.is_waiting = 1; in mpi3mr_bsg_pel_abort()
868 mrioc->pel_abort_cmd.callback = NULL; in mpi3mr_bsg_pel_abort()
874 mrioc->pel_abort_requested = 1; in mpi3mr_bsg_pel_abort()
875 init_completion(&mrioc->pel_abort_cmd.done); in mpi3mr_bsg_pel_abort()
876 retval = mpi3mr_admin_request_post(mrioc, &pel_abort_req, in mpi3mr_bsg_pel_abort()
880 dprint_bsg_err(mrioc, "%s: admin request post failed\n", in mpi3mr_bsg_pel_abort()
882 mrioc->pel_abort_requested = 0; in mpi3mr_bsg_pel_abort()
886 wait_for_completion_timeout(&mrioc->pel_abort_cmd.done, in mpi3mr_bsg_pel_abort()
888 if (!(mrioc->pel_abort_cmd.state & MPI3MR_CMD_COMPLETE)) { in mpi3mr_bsg_pel_abort()
889 mrioc->pel_abort_cmd.is_waiting = 0; in mpi3mr_bsg_pel_abort()
890 dprint_bsg_err(mrioc, "%s: command timedout\n", __func__); in mpi3mr_bsg_pel_abort()
891 if (!(mrioc->pel_abort_cmd.state & MPI3MR_CMD_RESET)) in mpi3mr_bsg_pel_abort()
892 mpi3mr_soft_reset_handler(mrioc, in mpi3mr_bsg_pel_abort()
897 if ((mrioc->pel_abort_cmd.ioc_status & MPI3_IOCSTATUS_STATUS_MASK) in mpi3mr_bsg_pel_abort()
899 dprint_bsg_err(mrioc, in mpi3mr_bsg_pel_abort()
901 __func__, (mrioc->pel_abort_cmd.ioc_status & in mpi3mr_bsg_pel_abort()
903 mrioc->pel_abort_cmd.ioc_loginfo); in mpi3mr_bsg_pel_abort()
907 if (mrioc->pel_abort_cmd.state & MPI3MR_CMD_REPLY_VALID) { in mpi3mr_bsg_pel_abort()
908 pel_reply = (struct mpi3_pel_reply *)mrioc->pel_abort_cmd.reply; in mpi3mr_bsg_pel_abort()
911 dprint_bsg_err(mrioc, in mpi3mr_bsg_pel_abort()
919 mrioc->pel_abort_cmd.state = MPI3MR_CMD_NOTUSED; in mpi3mr_bsg_pel_abort()
920 mutex_unlock(&mrioc->pel_abort_cmd.mutex); in mpi3mr_bsg_pel_abort()
935 struct mpi3mr_ioc *mrioc = NULL; in mpi3mr_bsg_verify_adapter() local
938 list_for_each_entry(mrioc, &mrioc_list, list) { in mpi3mr_bsg_verify_adapter()
939 if (mrioc->id == ioc_number) { in mpi3mr_bsg_verify_adapter()
941 return mrioc; in mpi3mr_bsg_verify_adapter()
961 mpi3mr_bsg_refresh_hdb_triggers(struct mpi3mr_ioc *mrioc, in mpi3mr_bsg_refresh_hdb_triggers() argument
972 dprint_bsg_err(mrioc, "%s: invalid size argument\n", in mpi3mr_bsg_refresh_hdb_triggers()
977 if (mrioc->unrecoverable) { in mpi3mr_bsg_refresh_hdb_triggers()
978 dprint_bsg_err(mrioc, "%s: unrecoverable controller\n", in mpi3mr_bsg_refresh_hdb_triggers()
982 if (mrioc->reset_in_progress) { in mpi3mr_bsg_refresh_hdb_triggers()
983 dprint_bsg_err(mrioc, "%s: reset in progress\n", __func__); in mpi3mr_bsg_refresh_hdb_triggers()
1002 dprint_bsg_err(mrioc, in mpi3mr_bsg_refresh_hdb_triggers()
1007 rval = mpi3mr_refresh_trigger(mrioc, page_action); in mpi3mr_bsg_refresh_hdb_triggers()
1019 static long mpi3mr_bsg_upload_hdb(struct mpi3mr_ioc *mrioc, in mpi3mr_bsg_upload_hdb() argument
1031 dprint_bsg_err(mrioc, "%s: invalid size argument\n", in mpi3mr_bsg_upload_hdb()
1041 dprint_bsg_err(mrioc, "%s: invalid length argument\n", in mpi3mr_bsg_upload_hdb()
1045 diag_buffer = mpi3mr_diag_buffer_for_type(mrioc, upload_hdb.buf_type); in mpi3mr_bsg_upload_hdb()
1047 dprint_bsg_err(mrioc, "%s: invalid buffer type %d\n", in mpi3mr_bsg_upload_hdb()
1054 dprint_bsg_err(mrioc, in mpi3mr_bsg_upload_hdb()
1061 dprint_bsg_err(mrioc, in mpi3mr_bsg_upload_hdb()
1085 static long mpi3mr_bsg_repost_hdb(struct mpi3mr_ioc *mrioc, in mpi3mr_bsg_repost_hdb() argument
1095 dprint_bsg_err(mrioc, "%s: invalid size argument\n", in mpi3mr_bsg_repost_hdb()
1099 if (mrioc->unrecoverable) { in mpi3mr_bsg_repost_hdb()
1100 dprint_bsg_err(mrioc, "%s: unrecoverable controller\n", in mpi3mr_bsg_repost_hdb()
1104 if (mrioc->reset_in_progress) { in mpi3mr_bsg_repost_hdb()
1105 dprint_bsg_err(mrioc, "%s: reset in progress\n", __func__); in mpi3mr_bsg_repost_hdb()
1113 diag_buffer = mpi3mr_diag_buffer_for_type(mrioc, repost_hdb.buf_type); in mpi3mr_bsg_repost_hdb()
1115 dprint_bsg_err(mrioc, "%s: invalid buffer type %d\n", in mpi3mr_bsg_repost_hdb()
1121 dprint_bsg_err(mrioc, in mpi3mr_bsg_repost_hdb()
1127 if (mpi3mr_issue_diag_buf_post(mrioc, diag_buffer)) { in mpi3mr_bsg_repost_hdb()
1128 dprint_bsg_err(mrioc, "%s: post failed for type %d\n", in mpi3mr_bsg_repost_hdb()
1148 static long mpi3mr_bsg_query_hdb(struct mpi3mr_ioc *mrioc, in mpi3mr_bsg_query_hdb() argument
1170 diag_buffer = &mrioc->diag_buffers[i]; in mpi3mr_bsg_query_hdb()
1184 dprint_bsg_err(mrioc, "%s: invalid size passed\n", __func__); in mpi3mr_bsg_query_hdb()
1212 static long mpi3mr_enable_logdata(struct mpi3mr_ioc *mrioc, in mpi3mr_enable_logdata() argument
1217 if (!mrioc->logdata_buf) { in mpi3mr_enable_logdata()
1218 mrioc->logdata_entry_sz = in mpi3mr_enable_logdata()
1219 (mrioc->reply_sz - (sizeof(struct mpi3_event_notification_reply) - 4)) in mpi3mr_enable_logdata()
1221 mrioc->logdata_buf_idx = 0; in mpi3mr_enable_logdata()
1222 mrioc->logdata_buf = kcalloc(MPI3MR_BSG_LOGDATA_MAX_ENTRIES, in mpi3mr_enable_logdata()
1223 mrioc->logdata_entry_sz, GFP_KERNEL); in mpi3mr_enable_logdata()
1225 if (!mrioc->logdata_buf) in mpi3mr_enable_logdata()
1250 static long mpi3mr_get_logdata(struct mpi3mr_ioc *mrioc, in mpi3mr_get_logdata() argument
1253 u16 num_entries, sz, entry_sz = mrioc->logdata_entry_sz; in mpi3mr_get_logdata()
1255 if ((!mrioc->logdata_buf) || (job->request_payload.payload_len < entry_sz)) in mpi3mr_get_logdata()
1266 mrioc->logdata_buf, sz); in mpi3mr_get_logdata()
1284 static long mpi3mr_bsg_pel_enable(struct mpi3mr_ioc *mrioc, in mpi3mr_bsg_pel_enable() argument
1294 dprint_bsg_err(mrioc, "%s: invalid size argument\n", in mpi3mr_bsg_pel_enable()
1299 if (mrioc->unrecoverable) { in mpi3mr_bsg_pel_enable()
1300 dprint_bsg_err(mrioc, "%s: unrecoverable controller\n", in mpi3mr_bsg_pel_enable()
1305 if (mrioc->reset_in_progress) { in mpi3mr_bsg_pel_enable()
1306 dprint_bsg_err(mrioc, "%s: reset in progress\n", __func__); in mpi3mr_bsg_pel_enable()
1310 if (mrioc->stop_bsgs) { in mpi3mr_bsg_pel_enable()
1311 dprint_bsg_err(mrioc, "%s: bsgs are blocked\n", __func__); in mpi3mr_bsg_pel_enable()
1320 dprint_bsg_err(mrioc, "%s: out of range class %d sent\n", in mpi3mr_bsg_pel_enable()
1325 if (!mrioc->pel_enabled) in mpi3mr_bsg_pel_enable()
1328 if ((mrioc->pel_class <= pel_enable.pel_class) && in mpi3mr_bsg_pel_enable()
1329 !((mrioc->pel_locale & pel_enable.pel_locale) ^ in mpi3mr_bsg_pel_enable()
1334 pel_enable.pel_locale |= mrioc->pel_locale; in mpi3mr_bsg_pel_enable()
1336 if (mrioc->pel_class < pel_enable.pel_class) in mpi3mr_bsg_pel_enable()
1337 pel_enable.pel_class = mrioc->pel_class; in mpi3mr_bsg_pel_enable()
1339 rval = mpi3mr_bsg_pel_abort(mrioc); in mpi3mr_bsg_pel_enable()
1341 dprint_bsg_err(mrioc, in mpi3mr_bsg_pel_enable()
1350 tmp_class = mrioc->pel_class; in mpi3mr_bsg_pel_enable()
1351 tmp_locale = mrioc->pel_locale; in mpi3mr_bsg_pel_enable()
1352 mrioc->pel_class = pel_enable.pel_class; in mpi3mr_bsg_pel_enable()
1353 mrioc->pel_locale = pel_enable.pel_locale; in mpi3mr_bsg_pel_enable()
1354 mrioc->pel_enabled = 1; in mpi3mr_bsg_pel_enable()
1355 rval = mpi3mr_pel_get_seqnum_post(mrioc, NULL); in mpi3mr_bsg_pel_enable()
1357 mrioc->pel_class = tmp_class; in mpi3mr_bsg_pel_enable()
1358 mrioc->pel_locale = tmp_locale; in mpi3mr_bsg_pel_enable()
1359 mrioc->pel_enabled = 0; in mpi3mr_bsg_pel_enable()
1360 dprint_bsg_err(mrioc, in mpi3mr_bsg_pel_enable()
1382 static long mpi3mr_get_all_tgt_info(struct mpi3mr_ioc *mrioc, in mpi3mr_get_all_tgt_info() argument
1393 dprint_bsg_err(mrioc, "%s: invalid size argument\n", in mpi3mr_get_all_tgt_info()
1398 spin_lock_irqsave(&mrioc->tgtdev_lock, flags); in mpi3mr_get_all_tgt_info()
1399 list_for_each_entry(tgtdev, &mrioc->tgtdev_list, list) in mpi3mr_get_all_tgt_info()
1401 spin_unlock_irqrestore(&mrioc->tgtdev_lock, flags); in mpi3mr_get_all_tgt_info()
1404 list_empty(&mrioc->tgtdev_list)) { in mpi3mr_get_all_tgt_info()
1419 spin_lock_irqsave(&mrioc->tgtdev_lock, flags); in mpi3mr_get_all_tgt_info()
1420 list_for_each_entry(tgtdev, &mrioc->tgtdev_list, list) { in mpi3mr_get_all_tgt_info()
1433 spin_unlock_irqrestore(&mrioc->tgtdev_lock, flags); in mpi3mr_get_all_tgt_info()
1459 static long mpi3mr_get_change_count(struct mpi3mr_ioc *mrioc, in mpi3mr_get_change_count() argument
1465 chgcnt.change_count = mrioc->change_count; in mpi3mr_get_change_count()
1486 static long mpi3mr_bsg_adp_reset(struct mpi3mr_ioc *mrioc, in mpi3mr_bsg_adp_reset() argument
1495 dprint_bsg_err(mrioc, "%s: invalid size argument\n", in mpi3mr_bsg_adp_reset()
1500 if (mrioc->unrecoverable || mrioc->block_on_pci_err) in mpi3mr_bsg_adp_reset()
1515 dprint_bsg_err(mrioc, "%s: unknown reset_type(%d)\n", in mpi3mr_bsg_adp_reset()
1520 rval = mpi3mr_soft_reset_handler(mrioc, MPI3MR_RESET_FROM_APP, in mpi3mr_bsg_adp_reset()
1524 dprint_bsg_err(mrioc, in mpi3mr_bsg_adp_reset()
1541 static long mpi3mr_bsg_populate_adpinfo(struct mpi3mr_ioc *mrioc, in mpi3mr_bsg_populate_adpinfo() argument
1549 adpinfo.pci_dev_id = mrioc->pdev->device; in mpi3mr_bsg_populate_adpinfo()
1550 adpinfo.pci_dev_hw_rev = mrioc->pdev->revision; in mpi3mr_bsg_populate_adpinfo()
1551 adpinfo.pci_subsys_dev_id = mrioc->pdev->subsystem_device; in mpi3mr_bsg_populate_adpinfo()
1552 adpinfo.pci_subsys_ven_id = mrioc->pdev->subsystem_vendor; in mpi3mr_bsg_populate_adpinfo()
1553 adpinfo.pci_bus = mrioc->pdev->bus->number; in mpi3mr_bsg_populate_adpinfo()
1554 adpinfo.pci_dev = PCI_SLOT(mrioc->pdev->devfn); in mpi3mr_bsg_populate_adpinfo()
1555 adpinfo.pci_func = PCI_FUNC(mrioc->pdev->devfn); in mpi3mr_bsg_populate_adpinfo()
1556 adpinfo.pci_seg_id = pci_domain_nr(mrioc->pdev->bus); in mpi3mr_bsg_populate_adpinfo()
1559 ioc_state = mpi3mr_get_iocstate(mrioc); in mpi3mr_bsg_populate_adpinfo()
1562 else if ((mrioc->reset_in_progress) || (mrioc->stop_bsgs)) in mpi3mr_bsg_populate_adpinfo()
1569 memcpy((u8 *)&adpinfo.driver_info, (u8 *)&mrioc->driver_info, in mpi3mr_bsg_populate_adpinfo()
1594 struct mpi3mr_ioc *mrioc = NULL; in mpi3mr_bsg_process_drv_cmds() local
1601 mrioc = mpi3mr_bsg_verify_adapter(drvrcmd->mrioc_id); in mpi3mr_bsg_process_drv_cmds()
1602 if (!mrioc) in mpi3mr_bsg_process_drv_cmds()
1606 rval = mpi3mr_bsg_populate_adpinfo(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1610 if (mutex_lock_interruptible(&mrioc->bsg_cmds.mutex)) in mpi3mr_bsg_process_drv_cmds()
1615 rval = mpi3mr_bsg_adp_reset(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1618 rval = mpi3mr_get_all_tgt_info(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1621 rval = mpi3mr_get_change_count(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1624 rval = mpi3mr_enable_logdata(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1627 rval = mpi3mr_get_logdata(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1630 rval = mpi3mr_bsg_pel_enable(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1633 rval = mpi3mr_bsg_query_hdb(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1636 rval = mpi3mr_bsg_repost_hdb(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1639 rval = mpi3mr_bsg_upload_hdb(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1642 rval = mpi3mr_bsg_refresh_hdb_triggers(mrioc, job); in mpi3mr_bsg_process_drv_cmds()
1650 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_drv_cmds()
1698 static int mpi3mr_bsg_build_sgl(struct mpi3mr_ioc *mrioc, u8 *mpi_req, in mpi3mr_bsg_build_sgl() argument
1825 available_sges = mrioc->ioctl_chain_sge.size / sge_element_size; in mpi3mr_bsg_build_sgl()
1830 mrioc->ioctl_chain_sge.dma_addr); in mpi3mr_bsg_build_sgl()
1831 memset(mrioc->ioctl_chain_sge.addr, 0, mrioc->ioctl_chain_sge.size); in mpi3mr_bsg_build_sgl()
1832 sgl = (u8 *)mrioc->ioctl_chain_sge.addr; in mpi3mr_bsg_build_sgl()
1869 static int mpi3mr_build_nvme_sgl(struct mpi3mr_ioc *mrioc, in mpi3mr_build_nvme_sgl() argument
1880 u64 sgemod_mask = ((u64)((mrioc->facts.sge_mod_mask) << in mpi3mr_build_nvme_sgl()
1881 mrioc->facts.sge_mod_shift) << 32); in mpi3mr_build_nvme_sgl()
1882 u64 sgemod_val = ((u64)(mrioc->facts.sge_mod_value) << in mpi3mr_build_nvme_sgl()
1883 mrioc->facts.sge_mod_shift) << 32; in mpi3mr_build_nvme_sgl()
1907 sgl_dma = cpu_to_le64(mrioc->ioctl_chain_sge.dma_addr); in mpi3mr_build_nvme_sgl()
1909 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_sgl()
1918 memset(mrioc->ioctl_chain_sge.addr, 0, mrioc->ioctl_chain_sge.size); in mpi3mr_build_nvme_sgl()
1919 available_sges = mrioc->ioctl_chain_sge.size / sge_element_size; in mpi3mr_build_nvme_sgl()
1927 nvme_sgl = (struct mpi3mr_nvme_pt_sge *)mrioc->ioctl_chain_sge.addr; in mpi3mr_build_nvme_sgl()
1933 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_sgl()
1966 static int mpi3mr_build_nvme_prp(struct mpi3mr_ioc *mrioc, in mpi3mr_build_nvme_prp() argument
1979 u64 sgemod_mask = ((u64)((mrioc->facts.sge_mod_mask) << in mpi3mr_build_nvme_prp()
1980 mrioc->facts.sge_mod_shift) << 32); in mpi3mr_build_nvme_prp()
1981 u64 sgemod_val = ((u64)(mrioc->facts.sge_mod_value) << in mpi3mr_build_nvme_prp()
1982 mrioc->facts.sge_mod_shift) << 32; in mpi3mr_build_nvme_prp()
1987 tgtdev = mpi3mr_get_tgtdev_by_handle(mrioc, dev_handle); in mpi3mr_build_nvme_prp()
1989 dprint_bsg_err(mrioc, "%s: invalid device handle 0x%04x\n", in mpi3mr_build_nvme_prp()
1995 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2007 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2014 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2037 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2047 mrioc->prp_sz = 0; in mpi3mr_build_nvme_prp()
2048 mrioc->prp_list_virt = dma_alloc_coherent(&mrioc->pdev->dev, in mpi3mr_build_nvme_prp()
2049 dev_pgsz, &mrioc->prp_list_dma, GFP_KERNEL); in mpi3mr_build_nvme_prp()
2051 if (!mrioc->prp_list_virt) in mpi3mr_build_nvme_prp()
2053 mrioc->prp_sz = dev_pgsz; in mpi3mr_build_nvme_prp()
2069 prp_page = (__le64 *)mrioc->prp_list_virt; in mpi3mr_build_nvme_prp()
2070 prp_page_dma = mrioc->prp_list_dma; in mpi3mr_build_nvme_prp()
2078 dprint_bsg_err(mrioc, "%s: PRP page is not page aligned\n", in mpi3mr_build_nvme_prp()
2094 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2111 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2139 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2160 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2178 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2200 dprint_bsg_err(mrioc, in mpi3mr_build_nvme_prp()
2216 if (mrioc->prp_list_virt) { in mpi3mr_build_nvme_prp()
2217 dma_free_coherent(&mrioc->pdev->dev, mrioc->prp_sz, in mpi3mr_build_nvme_prp()
2218 mrioc->prp_list_virt, mrioc->prp_list_dma); in mpi3mr_build_nvme_prp()
2219 mrioc->prp_list_virt = NULL; in mpi3mr_build_nvme_prp()
2240 static int mpi3mr_map_data_buffer_dma(struct mpi3mr_ioc *mrioc, in mpi3mr_map_data_buffer_dma() argument
2250 dprint_bsg_err(mrioc, "%s: DMA descriptor mapping error %d:%d:%d\n", in mpi3mr_map_data_buffer_dma()
2259 drv_buf->dma_desc[i].addr = mrioc->ioctl_sge[desc_count].addr; in mpi3mr_map_data_buffer_dma()
2261 mrioc->ioctl_sge[desc_count].dma_addr; in mpi3mr_map_data_buffer_dma()
2262 if (buf_len < mrioc->ioctl_sge[desc_count].size) in mpi3mr_map_data_buffer_dma()
2266 mrioc->ioctl_sge[desc_count].size; in mpi3mr_map_data_buffer_dma()
2269 mrioc->ioctl_sge[desc_count].size); in mpi3mr_map_data_buffer_dma()
2301 struct mpi3mr_ioc *mrioc = NULL; in mpi3mr_bsg_process_mpt_cmds() local
2328 mrioc = mpi3mr_bsg_verify_adapter(karg->mrioc_id); in mpi3mr_bsg_process_mpt_cmds()
2329 if (!mrioc) in mpi3mr_bsg_process_mpt_cmds()
2332 if (mutex_lock_interruptible(&mrioc->bsg_cmds.mutex)) in mpi3mr_bsg_process_mpt_cmds()
2335 if (mrioc->bsg_cmds.state & MPI3MR_CMD_PENDING) { in mpi3mr_bsg_process_mpt_cmds()
2336 dprint_bsg_err(mrioc, "%s: command is in use\n", __func__); in mpi3mr_bsg_process_mpt_cmds()
2337 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2341 if (!mrioc->ioctl_sges_allocated) { in mpi3mr_bsg_process_mpt_cmds()
2342 dprint_bsg_err(mrioc, "%s: DMA memory was not allocated\n", in mpi3mr_bsg_process_mpt_cmds()
2352 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2360 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2368 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2376 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2450 dprint_bsg_err(mrioc, "%s: invalid MPI message size\n", in mpi3mr_bsg_process_mpt_cmds()
2452 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2463 dprint_bsg_err(mrioc, "%s: invalid buffer entries passed\n", in mpi3mr_bsg_process_mpt_cmds()
2465 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2471 dprint_bsg_err(mrioc, "%s: data_out buffer length mismatch\n", in mpi3mr_bsg_process_mpt_cmds()
2473 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2478 dprint_bsg_err(mrioc, "%s: data_in buffer length mismatch\n", in mpi3mr_bsg_process_mpt_cmds()
2480 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2490 …dprint_bsg_err(mrioc, "%s:%d: invalid data transfer size passed for function 0x%x din_size = %d, d… in mpi3mr_bsg_process_mpt_cmds()
2493 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2499 dprint_bsg_err(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2502 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2507 dprint_bsg_err(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2510 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2518 dprint_bsg_err(mrioc, "%s:%d: invalid message size passed:%d:%d:%d:%d\n", in mpi3mr_bsg_process_mpt_cmds()
2521 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2535 mrioc->ioctl_chain_sge.size; in mpi3mr_bsg_process_mpt_cmds()
2537 mrioc->ioctl_chain_sge.addr; in mpi3mr_bsg_process_mpt_cmds()
2539 mrioc->ioctl_chain_sge.dma_addr; in mpi3mr_bsg_process_mpt_cmds()
2550 mrioc->ioctl_resp_sge.size; in mpi3mr_bsg_process_mpt_cmds()
2552 mrioc->ioctl_resp_sge.addr; in mpi3mr_bsg_process_mpt_cmds()
2554 mrioc->ioctl_resp_sge.dma_addr; in mpi3mr_bsg_process_mpt_cmds()
2567 if (mpi3mr_map_data_buffer_dma(mrioc, drv_buf_iter, desc_count)) { in mpi3mr_bsg_process_mpt_cmds()
2569 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2570 dprint_bsg_err(mrioc, "%s:%d: mapping data buffers failed\n", in mpi3mr_bsg_process_mpt_cmds()
2582 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2587 if (mrioc->unrecoverable) { in mpi3mr_bsg_process_mpt_cmds()
2588 dprint_bsg_err(mrioc, "%s: unrecoverable controller\n", in mpi3mr_bsg_process_mpt_cmds()
2591 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2594 if (mrioc->reset_in_progress) { in mpi3mr_bsg_process_mpt_cmds()
2595 dprint_bsg_err(mrioc, "%s: reset in progress\n", __func__); in mpi3mr_bsg_process_mpt_cmds()
2597 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2600 if (mrioc->stop_bsgs || mrioc->block_on_pci_err) { in mpi3mr_bsg_process_mpt_cmds()
2601 dprint_bsg_err(mrioc, "%s: bsgs are blocked\n", __func__); in mpi3mr_bsg_process_mpt_cmds()
2603 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2611 if (mpi3mr_build_nvme_prp(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2615 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2620 if (mpi3mr_build_nvme_sgl(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2624 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2628 dprint_bsg_err(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2631 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2635 if (mpi3mr_bsg_build_sgl(mrioc, mpi_req, mpi_msg_size, in mpi3mr_bsg_process_mpt_cmds()
2638 dprint_bsg_err(mrioc, "%s: sgl build failed\n", __func__); in mpi3mr_bsg_process_mpt_cmds()
2640 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2654 tgtdev = mpi3mr_get_tgtdev_by_handle(mrioc, dev_handle); in mpi3mr_bsg_process_mpt_cmds()
2663 mrioc->bsg_cmds.state = MPI3MR_CMD_PENDING; in mpi3mr_bsg_process_mpt_cmds()
2664 mrioc->bsg_cmds.is_waiting = 1; in mpi3mr_bsg_process_mpt_cmds()
2665 mrioc->bsg_cmds.callback = NULL; in mpi3mr_bsg_process_mpt_cmds()
2666 mrioc->bsg_cmds.is_sense = 0; in mpi3mr_bsg_process_mpt_cmds()
2667 mrioc->bsg_cmds.sensebuf = sense_buff_k; in mpi3mr_bsg_process_mpt_cmds()
2668 memset(mrioc->bsg_cmds.reply, 0, mrioc->reply_sz); in mpi3mr_bsg_process_mpt_cmds()
2670 if (mrioc->logging_level & MPI3_DEBUG_BSG_INFO) { in mpi3mr_bsg_process_mpt_cmds()
2671 dprint_bsg_info(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2682 init_completion(&mrioc->bsg_cmds.done); in mpi3mr_bsg_process_mpt_cmds()
2683 rval = mpi3mr_admin_request_post(mrioc, mpi_req, in mpi3mr_bsg_process_mpt_cmds()
2688 mrioc->bsg_cmds.is_waiting = 0; in mpi3mr_bsg_process_mpt_cmds()
2689 dprint_bsg_err(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2694 wait_for_completion_timeout(&mrioc->bsg_cmds.done, in mpi3mr_bsg_process_mpt_cmds()
2698 if (!(mrioc->bsg_cmds.state & MPI3MR_CMD_COMPLETE)) { in mpi3mr_bsg_process_mpt_cmds()
2699 mrioc->bsg_cmds.is_waiting = 0; in mpi3mr_bsg_process_mpt_cmds()
2701 if (mrioc->bsg_cmds.state & MPI3MR_CMD_RESET) in mpi3mr_bsg_process_mpt_cmds()
2705 || (mrioc->logging_level & MPI3_DEBUG_BSG_ERROR)) { in mpi3mr_bsg_process_mpt_cmds()
2706 ioc_info(mrioc, "%s: bsg request timedout after %d seconds\n", in mpi3mr_bsg_process_mpt_cmds()
2708 if (!(mrioc->logging_level & MPI3_DEBUG_BSG_INFO)) { in mpi3mr_bsg_process_mpt_cmds()
2721 dprint_bsg_err(mrioc, "%s: bsg request timedout after %d seconds,\n" in mpi3mr_bsg_process_mpt_cmds()
2724 mpi3mr_issue_tm(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2728 &mrioc->host_tm_cmds, &resp_code, NULL); in mpi3mr_bsg_process_mpt_cmds()
2730 if (!(mrioc->bsg_cmds.state & MPI3MR_CMD_COMPLETE) && in mpi3mr_bsg_process_mpt_cmds()
2731 !(mrioc->bsg_cmds.state & MPI3MR_CMD_RESET)) in mpi3mr_bsg_process_mpt_cmds()
2732 mpi3mr_soft_reset_handler(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2736 dprint_bsg_info(mrioc, "%s: bsg request is completed\n", __func__); in mpi3mr_bsg_process_mpt_cmds()
2738 if (mrioc->prp_list_virt) { in mpi3mr_bsg_process_mpt_cmds()
2739 dma_free_coherent(&mrioc->pdev->dev, mrioc->prp_sz, in mpi3mr_bsg_process_mpt_cmds()
2740 mrioc->prp_list_virt, mrioc->prp_list_dma); in mpi3mr_bsg_process_mpt_cmds()
2741 mrioc->prp_list_virt = NULL; in mpi3mr_bsg_process_mpt_cmds()
2744 if ((mrioc->bsg_cmds.ioc_status & MPI3_IOCSTATUS_STATUS_MASK) in mpi3mr_bsg_process_mpt_cmds()
2746 dprint_bsg_info(mrioc, in mpi3mr_bsg_process_mpt_cmds()
2749 (mrioc->bsg_cmds.ioc_status & MPI3_IOCSTATUS_STATUS_MASK), in mpi3mr_bsg_process_mpt_cmds()
2750 mrioc->bsg_cmds.ioc_loginfo); in mpi3mr_bsg_process_mpt_cmds()
2757 mrioc->reply_sz); in mpi3mr_bsg_process_mpt_cmds()
2764 if (mrioc->bsg_cmds.state & MPI3MR_CMD_REPLY_VALID) { in mpi3mr_bsg_process_mpt_cmds()
2768 mrioc->bsg_cmds.reply, mrioc->reply_sz); in mpi3mr_bsg_process_mpt_cmds()
2774 status_desc->ioc_status = mrioc->bsg_cmds.ioc_status; in mpi3mr_bsg_process_mpt_cmds()
2775 status_desc->ioc_log_info = mrioc->bsg_cmds.ioc_loginfo; in mpi3mr_bsg_process_mpt_cmds()
2782 if (erb_offset != 0xFF && mrioc->bsg_cmds.sensebuf && in mpi3mr_bsg_process_mpt_cmds()
2783 mrioc->bsg_cmds.is_sense) { in mpi3mr_bsg_process_mpt_cmds()
2818 mrioc->bsg_cmds.is_sense = 0; in mpi3mr_bsg_process_mpt_cmds()
2819 mrioc->bsg_cmds.sensebuf = NULL; in mpi3mr_bsg_process_mpt_cmds()
2820 mrioc->bsg_cmds.state = MPI3MR_CMD_NOTUSED; in mpi3mr_bsg_process_mpt_cmds()
2821 mutex_unlock(&mrioc->bsg_cmds.mutex); in mpi3mr_bsg_process_mpt_cmds()
2850 void mpi3mr_app_save_logdata(struct mpi3mr_ioc *mrioc, char *event_data, in mpi3mr_app_save_logdata() argument
2853 u32 index = mrioc->logdata_buf_idx, sz; in mpi3mr_app_save_logdata()
2856 if (!(mrioc->logdata_buf)) in mpi3mr_app_save_logdata()
2860 (mrioc->logdata_buf + (index * mrioc->logdata_entry_sz)); in mpi3mr_app_save_logdata()
2862 sz = min(mrioc->logdata_entry_sz, event_data_size); in mpi3mr_app_save_logdata()
2864 mrioc->logdata_buf_idx = in mpi3mr_app_save_logdata()
2911 void mpi3mr_bsg_exit(struct mpi3mr_ioc *mrioc) in mpi3mr_bsg_exit() argument
2913 struct device *bsg_dev = &mrioc->bsg_dev; in mpi3mr_bsg_exit()
2914 if (!mrioc->bsg_queue) in mpi3mr_bsg_exit()
2917 bsg_remove_queue(mrioc->bsg_queue); in mpi3mr_bsg_exit()
2918 mrioc->bsg_queue = NULL; in mpi3mr_bsg_exit()
2946 void mpi3mr_bsg_init(struct mpi3mr_ioc *mrioc) in mpi3mr_bsg_init() argument
2948 struct device *bsg_dev = &mrioc->bsg_dev; in mpi3mr_bsg_init()
2949 struct device *parent = &mrioc->shost->shost_gendev; in mpi3mr_bsg_init()
2961 dev_set_name(bsg_dev, "mpi3mrctl%u", mrioc->id); in mpi3mr_bsg_init()
2964 ioc_err(mrioc, "%s: bsg device add failed\n", in mpi3mr_bsg_init()
2973 ioc_err(mrioc, "%s: bsg registration failed\n", in mpi3mr_bsg_init()
2980 mrioc->bsg_queue = q; in mpi3mr_bsg_init()
2996 struct mpi3mr_ioc *mrioc = shost_priv(shost); in version_fw_show() local
2997 struct mpi3mr_compimg_ver *fwver = &mrioc->facts.fw_ver; in version_fw_show()
3018 struct mpi3mr_ioc *mrioc = shost_priv(shost); in fw_queue_depth_show() local
3020 return sysfs_emit(buf, "%d\n", mrioc->facts.max_reqs); in fw_queue_depth_show()
3037 struct mpi3mr_ioc *mrioc = shost_priv(shost); in op_req_q_count_show() local
3039 return sysfs_emit(buf, "%d\n", mrioc->num_op_req_q); in op_req_q_count_show()
3056 struct mpi3mr_ioc *mrioc = shost_priv(shost); in reply_queue_count_show() local
3058 return sysfs_emit(buf, "%d\n", mrioc->num_op_reply_q); in reply_queue_count_show()
3081 struct mpi3mr_ioc *mrioc = shost_priv(shost); in logging_level_show() local
3083 return sysfs_emit(buf, "%08xh\n", mrioc->logging_level); in logging_level_show()
3105 struct mpi3mr_ioc *mrioc = shost_priv(shost); in logging_level_store() local
3111 mrioc->logging_level = val; in logging_level_store()
3112 ioc_info(mrioc, "logging_level=%08xh\n", mrioc->logging_level); in logging_level_store()
3130 struct mpi3mr_ioc *mrioc = shost_priv(shost); in adp_state_show() local
3134 ioc_state = mpi3mr_get_iocstate(mrioc); in adp_state_show()
3137 else if (mrioc->reset_in_progress || mrioc->stop_bsgs || in adp_state_show()
3138 mrioc->block_on_pci_err) in adp_state_show()