Lines Matching defs:mpt

96 static void mptsas_ioc_event_cmdq_add(mptsas_t *mpt, m_event_struct_t *cmd);
97 static void mptsas_ioc_event_cmdq_delete(mptsas_t *mpt, m_event_struct_t *cmd);
98 static m_event_struct_t *mptsas_ioc_event_find_by_cmd(mptsas_t *mpt,
105 mptsas_ioc_event_cmdq_add(mptsas_t *mpt, m_event_struct_t *cmd)
107 if ((cmd->m_event_linkp = mpt->m_ioc_event_cmdq) == NULL) {
108 mpt->m_ioc_event_cmdtail = &cmd->m_event_linkp;
109 mpt->m_ioc_event_cmdq = cmd;
112 *(mpt->m_ioc_event_cmdtail) = cmd;
113 mpt->m_ioc_event_cmdtail = &cmd->m_event_linkp;
121 mptsas_ioc_event_cmdq_delete(mptsas_t *mpt, m_event_struct_t *cmd)
123 m_event_struct_t *prev = mpt->m_ioc_event_cmdq;
125 if ((mpt->m_ioc_event_cmdq = cmd->m_event_linkp) == NULL) {
126 mpt->m_ioc_event_cmdtail = &mpt->m_ioc_event_cmdq;
135 mpt->m_ioc_event_cmdtail = &prev->m_event_linkp;
146 mptsas_ioc_event_find_by_cmd(mptsas_t *mpt, struct mptsas_cmd *cmd)
150 ioc_cmd = mpt->m_ioc_event_cmdq;
162 mptsas_destroy_ioc_event_cmd(mptsas_t *mpt)
166 ioc_cmd = mpt->m_ioc_event_cmdq;
179 if ((mpt->m_ioc_event_cmdq =
181 mpt->m_ioc_event_cmdtail =
182 &mpt->m_ioc_event_cmdq;
199 mptsas_start_config_page_access(mptsas_t *mpt, mptsas_cmd_t *cmd)
209 ASSERT(mutex_owned(&mpt->m_mutex));
215 request = (pMpi2ConfigRequest_t)(mpt->m_req_frame +
216 (mpt->m_req_frame_size * cmd->cmd_slot));
217 bzero(request, mpt->m_req_frame_size);
222 ddi_put8(mpt->m_acc_req_frame_hdl, &request->Function,
224 ddi_put8(mpt->m_acc_req_frame_hdl, &request->Action, config->action);
230 ddi_put8(mpt->m_acc_req_frame_hdl,
233 ddi_put8(mpt->m_acc_req_frame_hdl,
236 ddi_put8(mpt->m_acc_req_frame_hdl,
240 ddi_put8(mpt->m_acc_req_frame_hdl, &request->ExtPageType,
242 ddi_put16(mpt->m_acc_req_frame_hdl, &request->ExtPageLength,
244 ddi_put8(mpt->m_acc_req_frame_hdl, &request->Header.PageType,
246 ddi_put8(mpt->m_acc_req_frame_hdl, &request->Header.PageLength,
248 ddi_put8(mpt->m_acc_req_frame_hdl,
260 ddi_put32(mpt->m_acc_req_frame_hdl, &sge->Address.Low,
262 ddi_put32(mpt->m_acc_req_frame_hdl, &sge->Address.High,
265 ddi_put8(mpt->m_acc_req_frame_hdl, &request->Header.PageNumber,
267 ddi_put32(mpt->m_acc_req_frame_hdl, &request->PageAddress,
277 ddi_put32(mpt->m_acc_req_frame_hdl, &sge->FlagsLength, flagslength);
279 (void) ddi_dma_sync(mpt->m_dma_req_frame_hdl, 0, 0,
284 MPTSAS_START_CMD(mpt, request_desc);
285 if ((mptsas_check_dma_handle(mpt->m_dma_req_frame_hdl) !=
287 (mptsas_check_acc_handle(mpt->m_acc_req_frame_hdl) !=
289 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
294 mptsas_access_config_page(mptsas_t *mpt, uint8_t action, uint8_t page_type,
314 ASSERT(mutex_owned(&mpt->m_mutex));
319 if ((rval = (mptsas_request_from_pool(mpt, &cmd, &pkt))) == -1) {
320 mptsas_log(mpt, CE_NOTE, "command pool is full for config "
352 if (mptsas_save_cmd(mpt, cmd) == TRUE) {
354 mptsas_start_config_page_access(mpt, cmd);
356 mptsas_waitq_add(mpt, cmd);
369 (void) mptsas_poll(mpt, cmd, pkt->pkt_time * 1000);
372 cv_wait(&mpt->m_config_cv, &mpt->m_mutex);
380 mptsas_log(mpt, CE_WARN, "config header request timeout");
391 (void) ddi_dma_sync(mpt->m_dma_reply_frame_hdl, 0, 0,
393 reply = (pMpi2ConfigReply_t)(mpt->m_reply_frame + (cmd->cmd_rfm
394 - (mpt->m_reply_frame_dma_addr & 0xffffffffu)));
395 config.page_type = ddi_get8(mpt->m_acc_reply_frame_hdl,
397 config.page_number = ddi_get8(mpt->m_acc_reply_frame_hdl,
399 config.page_length = ddi_get8(mpt->m_acc_reply_frame_hdl,
401 config.page_version = ddi_get8(mpt->m_acc_reply_frame_hdl,
403 config.ext_page_type = ddi_get8(mpt->m_acc_reply_frame_hdl,
405 config.ext_page_length = ddi_get16(mpt->m_acc_reply_frame_hdl,
408 iocstatus = ddi_get16(mpt->m_acc_reply_frame_hdl,
410 iocloginfo = ddi_get32(mpt->m_acc_reply_frame_hdl,
430 mptsas_log(mpt, CE_WARN, "ioc reset abort config header "
442 ddi_put32(mpt->m_acc_free_queue_hdl,
443 &((uint32_t *)(void *)mpt->m_free_queue)[mpt->m_free_index],
445 (void) ddi_dma_sync(mpt->m_dma_free_queue_hdl, 0, 0,
447 if (++mpt->m_free_index == mpt->m_free_queue_depth) {
448 mpt->m_free_index = 0;
450 ddi_put32(mpt->m_datap, &mpt->m_reg->ReplyFreeHostIndex,
451 mpt->m_free_index);
461 attrs = mpt->m_msg_dma_attr;
465 if (mptsas_dma_addr_create(mpt, attrs,
469 mptsas_log(mpt, CE_WARN,
499 mptsas_start_config_page_access(mpt, cmd);
511 (void) mptsas_poll(mpt, cmd, pkt->pkt_time * 1000);
514 cv_wait(&mpt->m_config_cv, &mpt->m_mutex);
522 mptsas_log(mpt, CE_WARN, "config page request timeout");
534 (void) ddi_dma_sync(mpt->m_dma_reply_frame_hdl, 0, 0,
538 reply = (pMpi2ConfigReply_t)(mpt->m_reply_frame + (cmd->cmd_rfm
539 - (mpt->m_reply_frame_dma_addr & 0xffffffffu)));
540 iocstatus = ddi_get16(mpt->m_acc_reply_frame_hdl,
543 iocloginfo = ddi_get32(mpt->m_acc_reply_frame_hdl,
547 if (callback(mpt, page_memp, accessp, iocstatus, iocloginfo, ap)) {
552 mptsas_fma_check(mpt, cmd);
558 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
563 mptsas_log(mpt, CE_WARN, "config fma error");
568 mptsas_log(mpt, CE_WARN, "ioc reset abort config request");
581 ddi_put32(mpt->m_acc_free_queue_hdl,
582 &((uint32_t *)(void *)mpt->m_free_queue)[mpt->m_free_index],
584 (void) ddi_dma_sync(mpt->m_dma_free_queue_hdl, 0, 0,
586 if (++mpt->m_free_index == mpt->m_free_queue_depth) {
587 mpt->m_free_index = 0;
589 ddi_put32(mpt->m_datap, &mpt->m_reg->ReplyFreeHostIndex,
590 mpt->m_free_index);
597 mptsas_remove_cmd(mpt, cmd);
601 mptsas_return_to_pool(mpt, cmd);
604 mpt->m_softstate &= ~MPTSAS_SS_MSG_UNIT_RESET;
605 if ((mptsas_restart_ioc(mpt)) == DDI_FAILURE) {
606 mptsas_log(mpt, CE_WARN, "mptsas_restart_ioc failed");
614 mptsas_send_config_request_msg(mptsas_t *mpt, uint8_t action, uint8_t pagetype,
621 bzero(mpt->m_hshk_memp, sizeof (MPI2_CONFIG_REQUEST));
622 config = (pMpi2ConfigRequest_t)mpt->m_hshk_memp;
623 ddi_put8(mpt->m_hshk_acc_hdl, &config->Function, MPI2_FUNCTION_CONFIG);
624 ddi_put8(mpt->m_hshk_acc_hdl, &config->Action, action);
625 ddi_put8(mpt->m_hshk_acc_hdl, &config->Header.PageNumber, pagenumber);
626 ddi_put8(mpt->m_hshk_acc_hdl, &config->Header.PageType, pagetype);
627 ddi_put32(mpt->m_hshk_acc_hdl, &config->PageAddress, pageaddress);
628 ddi_put8(mpt->m_hshk_acc_hdl, &config->Header.PageVersion, pageversion);
629 ddi_put8(mpt->m_hshk_acc_hdl, &config->Header.PageLength, pagelength);
630 ddi_put32(mpt->m_hshk_acc_hdl,
632 ddi_put32(mpt->m_hshk_acc_hdl,
634 ddi_put32(mpt->m_hshk_acc_hdl,
642 if (mptsas_send_handshake_msg(mpt, (caddr_t)config, send_numbytes,
643 mpt->m_hshk_acc_hdl)) {
650 mptsas_send_extended_config_request_msg(mptsas_t *mpt, uint8_t action,
658 bzero(mpt->m_hshk_memp, sizeof (MPI2_CONFIG_REQUEST));
659 config = (pMpi2ConfigRequest_t)mpt->m_hshk_memp;
660 ddi_put8(mpt->m_hshk_acc_hdl, &config->Function, MPI2_FUNCTION_CONFIG);
661 ddi_put8(mpt->m_hshk_acc_hdl, &config->Action, action);
662 ddi_put8(mpt->m_hshk_acc_hdl, &config->Header.PageNumber, pagenumber);
663 ddi_put8(mpt->m_hshk_acc_hdl, &config->Header.PageType,
665 ddi_put8(mpt->m_hshk_acc_hdl, &config->ExtPageType, extpagetype);
666 ddi_put32(mpt->m_hshk_acc_hdl, &config->PageAddress, pageaddress);
667 ddi_put8(mpt->m_hshk_acc_hdl, &config->Header.PageVersion, pageversion);
668 ddi_put16(mpt->m_hshk_acc_hdl, &config->ExtPageLength, extpagelength);
669 ddi_put32(mpt->m_hshk_acc_hdl,
671 ddi_put32(mpt->m_hshk_acc_hdl,
673 ddi_put32(mpt->m_hshk_acc_hdl,
681 if (mptsas_send_handshake_msg(mpt, (caddr_t)config, send_numbytes,
682 mpt->m_hshk_acc_hdl)) {
689 mptsas_ioc_wait_for_response(mptsas_t *mpt)
693 while ((ddi_get32(mpt->m_datap,
694 &mpt->m_reg->HostInterruptStatus) & MPI2_HIS_IOP_DOORBELL_STATUS)) {
704 mptsas_ioc_wait_for_doorbell(mptsas_t *mpt)
708 while ((ddi_get32(mpt->m_datap,
709 &mpt->m_reg->HostInterruptStatus) & MPI2_HIM_DIM) == 0) {
719 mptsas_send_handshake_msg(mptsas_t *mpt, caddr_t memp, int numbytes,
727 ddi_put32(mpt->m_datap, &mpt->m_reg->HostInterruptStatus, 0);
728 ddi_put32(mpt->m_datap, &mpt->m_reg->Doorbell,
732 if (mptsas_ioc_wait_for_doorbell(mpt)) {
740 ddi_put32(mpt->m_datap, &mpt->m_reg->HostInterruptStatus, 0);
742 if (mptsas_ioc_wait_for_response(mpt)) {
752 ddi_put32(mpt->m_datap, &mpt->m_reg->Doorbell,
754 if (mptsas_ioc_wait_for_response(mpt)) {
761 if (mptsas_check_acc_handle(mpt->m_datap) != DDI_SUCCESS) {
762 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
763 ddi_fm_acc_err_clear(mpt->m_datap, DDI_FME_VER0);
771 mptsas_get_handshake_msg(mptsas_t *mpt, caddr_t memp, int numbytes,
780 if (mptsas_ioc_wait_for_doorbell(mpt)) {
790 val = (ddi_get32(mpt->m_datap,
791 &mpt->m_reg->Doorbell) & MPI2_DOORBELL_DATA_MASK);
792 ddi_put32(mpt->m_datap, &mpt->m_reg->HostInterruptStatus, 0);
793 if (mptsas_ioc_wait_for_doorbell(mpt)) {
819 val = (ddi_get32(mpt->m_datap,
820 &mpt->m_reg->Doorbell) & MPI2_DOORBELL_DATA_MASK);
821 ddi_put32(mpt->m_datap, &mpt->m_reg->HostInterruptStatus, 0);
822 if (mptsas_ioc_wait_for_doorbell(mpt)) {
838 val = (ddi_get32(mpt->m_datap,
839 &mpt->m_reg->Doorbell) &
841 ddi_put32(mpt->m_datap,
842 &mpt->m_reg->HostInterruptStatus, 0);
843 if (mptsas_ioc_wait_for_doorbell(mpt)) {
851 ddi_put32(mpt->m_datap, &mpt->m_reg->HostInterruptStatus, 0);
853 if (mptsas_check_acc_handle(mpt->m_datap) != DDI_SUCCESS) {
854 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
855 ddi_fm_acc_err_clear(mpt->m_datap, DDI_FME_VER0);
863 mptsas_kick_start(mptsas_t *mpt)
871 MPTSAS_ENABLE_DRWE(mpt);
877 diag_reg = ddi_get32(mpt->m_datap, &mpt->m_reg->HostDiagnostic);
878 saved_HCB_size = ddi_get32(mpt->m_datap, &mpt->m_reg->HCBSize);
884 ddi_put32(mpt->m_datap, &mpt->m_reg->HostDiagnostic, diag_reg);
893 diag_reg = ddi_get32(mpt->m_datap,
894 &mpt->m_reg->HostDiagnostic);
896 mptsas_fm_ereport(mpt, DDI_FM_DEVICE_NO_RESPONSE);
897 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_LOST);
906 mptsas_fm_ereport(mpt, DDI_FM_DEVICE_NO_RESPONSE);
907 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_LOST);
919 ddi_put32(mpt->m_datap, &mpt->m_reg->HostDiagnostic, diag_reg);
924 ddi_put32(mpt->m_datap, &mpt->m_reg->HCBSize,
932 ddi_put32(mpt->m_datap, &mpt->m_reg->HostDiagnostic, diag_reg);
937 ddi_put32(mpt->m_datap, &mpt->m_reg->WriteSequence,
944 ioc_state = ddi_get32(mpt->m_datap, &mpt->m_reg->Doorbell);
946 mptsas_fm_ereport(mpt, DDI_FM_DEVICE_NO_RESPONSE);
947 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_LOST);
957 mptsas_fm_ereport(mpt, DDI_FM_DEVICE_NO_RESPONSE);
958 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_LOST);
965 mptsas_destroy_ioc_event_cmd(mpt);
971 mptsas_ioc_reset(mptsas_t *mpt, int first_time)
977 ioc_state = ddi_get32(mpt->m_datap, &mpt->m_reg->Doorbell);
997 if ((first_time || mpt->m_event_replay) &&
998 (mpt->m_softstate & MPTSAS_SS_MSG_UNIT_RESET)) {
999 mpt->m_softstate &= ~MPTSAS_SS_MSG_UNIT_RESET;
1001 ddi_put32(mpt->m_datap, &mpt->m_reg->Doorbell,
1003 if (mptsas_ioc_wait_for_response(mpt)) {
1013 while ((ddi_get32(mpt->m_datap, &mpt->m_reg->Doorbell) &
1025 mpt->m_softstate |= MPTSAS_DID_MSG_UNIT_RESET;
1032 mptsas_destroy_ioc_event_cmd(mpt);
1037 mpt->m_softstate &= ~MPTSAS_DID_MSG_UNIT_RESET;
1038 if (mptsas_kick_start(mpt) == DDI_FAILURE) {
1039 mptsas_fm_ereport(mpt, DDI_FM_DEVICE_NO_RESPONSE);
1040 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_LOST);
1048 mptsas_request_from_pool(mptsas_t *mpt, mptsas_cmd_t **cmd,
1058 mptsas_ioc_event_cmdq_add(mpt, ioc_cmd);
1066 mptsas_return_to_pool(mptsas_t *mpt, mptsas_cmd_t *cmd)
1070 ioc_cmd = mptsas_ioc_event_find_by_cmd(mpt, cmd);
1075 mptsas_ioc_event_cmdq_delete(mpt, ioc_cmd);
1088 mptsas_ioc_task_management(mptsas_t *mpt, int task_type, uint16_t dev_handle,
1102 mptsas_slots_t *slots = mpt->m_active;
1109 if (slots->m_slot[MPTSAS_TM_SLOT(mpt)] != NULL) {
1110 mptsas_log(mpt, CE_WARN, "Can only start 1 task management"
1115 cmd = &(mpt->m_event_task_mgmt.m_event_cmd);
1116 pkt = &(mpt->m_event_task_mgmt.m_event_pkt);
1131 cmd->cmd_slot = MPTSAS_TM_SLOT(mpt);
1133 slots->m_slot[MPTSAS_TM_SLOT(mpt)] = cmd;
1139 task = (pMpi2SCSITaskManagementRequest_t)(mpt->m_req_frame +
1140 (mpt->m_req_frame_size * cmd->cmd_slot));
1141 bzero(task, mpt->m_req_frame_size);
1146 mptsas_init_std_hdr(mpt->m_acc_req_frame_hdl, task, dev_handle, lun, 0,
1152 ddi_put8(mpt->m_acc_req_frame_hdl, &task->TaskType, task_type);
1157 (void) ddi_dma_sync(mpt->m_dma_req_frame_hdl, 0, 0,
1161 MPTSAS_START_CMD(mpt, request_desc);
1162 rval = mptsas_poll(mpt, cmd, MPTSAS_POLL_TIME);
1173 (void) ddi_dma_sync(mpt->m_dma_reply_frame_hdl, 0, 0,
1176 (mpt->m_reply_frame + (cmd->cmd_rfm -
1177 (mpt->m_reply_frame_dma_addr & 0xffffffffu)));
1181 mutex_exit(&mpt->m_mutex);
1185 mptsas_log(mpt, CE_WARN, "failed to copy out "
1190 mutex_enter(&mpt->m_mutex);
1196 slots->m_slot[MPTSAS_TM_SLOT(mpt)] = NULL;
1203 mptsas_log(mpt, CE_WARN, "mptsas_ioc_task_management failed "
1205 mpt->m_softstate &= ~MPTSAS_SS_MSG_UNIT_RESET;
1206 if (mptsas_restart_ioc(mpt)) {
1207 mptsas_log(mpt, CE_WARN, "mptsas_restart_ioc failed");
1293 mptsas_update_flash(mptsas_t *mpt, caddr_t ptrbuffer, uint32_t size,
1315 if (mpt->m_MPI25 && !mptsas_enable_mpi25_flashupdate) {
1320 mptsas_log(mpt, CE_WARN, "mptsas_update_flash(): "
1327 if ((rvalue = (mptsas_request_from_pool(mpt, &cmd, &pkt))) == -1) {
1328 mptsas_log(mpt, CE_WARN, "mptsas_update_flash(): allocation "
1341 flsh_dma_attrs = mpt->m_msg_dma_attr;
1344 if (mptsas_dma_addr_create(mpt, flsh_dma_attrs, &flsh_dma_handle,
1346 mptsas_log(mpt, CE_WARN,
1348 mptsas_return_to_pool(mpt, cmd);
1374 if (mptsas_save_cmd(mpt, cmd) == FALSE) {
1376 mptsas_return_to_pool(mpt, cmd);
1384 memp = mpt->m_req_frame + (mpt->m_req_frame_size * cmd->cmd_slot);
1385 bzero(memp, mpt->m_req_frame_size);
1387 if (mpt->m_MPI25)
1389 mpt->m_acc_req_frame_hdl, size, type, flsh_cookie);
1392 mpt->m_acc_req_frame_hdl, size, type, flsh_cookie);
1397 (void) ddi_dma_sync(mpt->m_dma_req_frame_hdl, 0, 0,
1402 MPTSAS_START_CMD(mpt, request_desc);
1405 (void) cv_reltimedwait(&mpt->m_fw_cv, &mpt->m_mutex,
1408 mpt->m_softstate &= ~MPTSAS_SS_MSG_UNIT_RESET;
1409 if ((mptsas_restart_ioc(mpt)) == DDI_FAILURE) {
1410 mptsas_log(mpt, CE_WARN, "mptsas_restart_ioc failed");
1414 mptsas_remove_cmd(mpt, cmd);
1421 mptsas_sasdevpage_0_cb(mptsas_t *mpt, caddr_t page_memp,
1441 mptsas_log(mpt, CE_WARN, "mptsas_get_sas_device_page0 "
1457 mpt->m_done_traverse_dev = 1;
1493 mptsas_log(mpt, CE_CONT,
1508 mptsas_get_sas_device_page0(mptsas_t *mpt, uint32_t page_address,
1515 ASSERT(mutex_owned(&mpt->m_mutex));
1521 rval = mptsas_access_config_page(mpt,
1532 mptsas_sasexpdpage_0_cb(mptsas_t *mpt, caddr_t page_memp,
1552 mptsas_log(mpt, CE_WARN, "mptsas_get_sas_expander_page0 "
1568 mpt->m_done_traverse_smp = 1;
1582 *phymask = mptsas_physport_to_phymask(mpt, physport);
1599 mptsas_get_sas_expander_page0(mptsas_t *mpt, uint32_t page_address,
1604 ASSERT(mutex_owned(&mpt->m_mutex));
1610 rval = mptsas_access_config_page(mpt,
1620 mptsas_sasportpage_0_cb(mptsas_t *mpt, caddr_t page_memp,
1635 mptsas_log(mpt, CE_WARN, "mptsas_get_sas_port_page0 "
1660 mptsas_get_sas_port_page0(mptsas_t *mpt, uint32_t page_address,
1665 ASSERT(mutex_owned(&mpt->m_mutex));
1671 rval = mptsas_access_config_page(mpt,
1680 mptsas_sasiou_page_0_cb(mptsas_t *mpt, caddr_t page_memp,
1694 mptsas_log(mpt, CE_WARN, "mptsas_get_sas_io_unit_page0 "
1711 ASSERT(num_phys == mpt->m_num_phys);
1718 mpt->m_phy_info[i].port_num =
1721 mpt->m_phy_info[i].ctrl_devhdl =
1724 mpt->m_phy_info[i].attached_devhdl =
1727 mpt->m_phy_info[i].phy_device_type = cpdi[i];
1728 mpt->m_phy_info[i].port_flags = port_flags;
1749 mptsas_sasiou_page_1_cb(mptsas_t *mpt, caddr_t page_memp,
1763 mptsas_log(mpt, CE_WARN, "mptsas_get_sas_io_unit_page1 "
1777 ASSERT(num_phys == mpt->m_num_phys);
1783 mpt->m_phy_info[i].port_num =
1786 mpt->m_phy_info[i].port_flags = port_flags;
1787 mpt->m_phy_info[i].phy_device_type = cpdi[i];
1798 mptsas_get_sas_io_unit_page(mptsas_t *mpt)
1803 ASSERT(mutex_owned(&mpt->m_mutex));
1814 rval = mptsas_access_config_page(mpt,
1820 rval = mptsas_access_config_page(mpt,
1837 mptsas_log(mpt, CE_WARN,
1870 mptsas_biospage_3_cb(mptsas_t *mpt, caddr_t page_memp,
1883 mptsas_log(mpt, CE_WARN, "mptsas_get_bios_page3 header: "
1900 mptsas_get_bios_page3(mptsas_t *mpt, uint32_t *bios_version)
1904 ASSERT(mutex_owned(&mpt->m_mutex));
1910 rval = mptsas_access_config_page(mpt,
1923 mptsas_get_sas_io_unit_page_hndshk(mptsas_t *mpt)
1958 ASSERT(mutex_owned(&mpt->m_mutex));
1963 * that describes mpt's config reply page request structure.
1965 recv_dma_attrs = mpt->m_msg_dma_attr;
1969 if (mptsas_dma_addr_create(mpt, recv_dma_attrs,
1972 mptsas_log(mpt, CE_WARN,
1979 page_dma_attrs = mpt->m_msg_dma_attr;
1983 if (mptsas_dma_addr_create(mpt, page_dma_attrs,
1986 mptsas_log(mpt, CE_WARN,
2044 if (mptsas_send_extended_config_request_msg(mpt,
2051 if (mptsas_get_handshake_msg(mpt, recv_memp, recv_numbytes,
2060 mptsas_log(mpt, CE_WARN,
2070 if (mptsas_send_extended_config_request_msg(mpt, action,
2078 if (mptsas_get_handshake_msg(mpt, recv_memp, recv_numbytes,
2087 mptsas_log(mpt, CE_WARN,
2103 ASSERT(num_phys == mpt->m_num_phys);
2105 mptsas_log(mpt, CE_WARN, "Number of phys "
2120 mpt->m_phy_info[i].port_num =
2123 mpt->m_phy_info[i].ctrl_devhdl =
2126 mpt->m_phy_info[i].attached_devhdl =
2129 mpt->m_phy_info[i].phy_device_type = cpdi[i];
2130 mpt->m_phy_info[i].port_flags = port_flags;
2158 mptsas_log(mpt, CE_WARN,
2184 ASSERT(num_phys == mpt->m_num_phys);
2186 mptsas_log(mpt, CE_WARN, "Number of phys "
2200 mpt->m_phy_info[i].port_num =
2203 mpt->m_phy_info[i].port_flags = port_flags;
2204 mpt->m_phy_info[i].phy_device_type = cpdi[i];
2215 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
2221 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
2232 mptsas_fm_ereport(mpt, DDI_FM_DEVICE_NO_RESPONSE);
2233 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_LOST);
2245 mptsas_get_manufacture_page5(mptsas_t *mpt)
2260 MPTSAS_DISABLE_INTR(mpt);
2262 if (mptsas_send_config_request_msg(mpt, MPI2_CONFIG_ACTION_PAGE_HEADER,
2272 recv_dma_attrs = mpt->m_msg_dma_attr;
2276 if (mptsas_dma_addr_create(mpt, recv_dma_attrs,
2292 if (mptsas_get_handshake_msg(mpt, recv_memp, recv_numbytes,
2299 mptsas_log(mpt, CE_WARN, "mptsas_get_manufacture_page5 update: "
2309 page_dma_attrs = mpt->m_msg_dma_attr;
2313 if (mptsas_dma_addr_create(mpt, page_dma_attrs, &page_dma_handle,
2339 if (mptsas_send_config_request_msg(mpt,
2352 if (mptsas_get_handshake_msg(mpt, recv_memp, recv_numbytes,
2359 mptsas_log(mpt, CE_WARN, "mptsas_get_manufacture_page5 config: "
2371 mpt->un.sasaddr.m_base_wwid_lo =
2373 mpt->un.sasaddr.m_base_wwid_hi =
2376 if (ddi_prop_update_int64(DDI_DEV_T_NONE, mpt->m_dip,
2377 "base-wwid", mpt->un.m_base_wwid) != DDI_PROP_SUCCESS) {
2379 ddi_driver_name(mpt->m_dip), ddi_get_instance(mpt->m_dip)));
2385 mpt->m_num_phys = ddi_get8(page_accessp, (uint8_t *)&m5->NumPhys);
2387 if (ddi_prop_update_int(DDI_DEV_T_NONE, mpt->m_dip,
2388 "num-phys", mpt->m_num_phys) != DDI_PROP_SUCCESS) {
2390 ddi_driver_name(mpt->m_dip), ddi_get_instance(mpt->m_dip)));
2393 mptsas_log(mpt, CE_NOTE, "!mpt%d: Initiator WWNs: 0x%016llx-0x%016llx",
2394 mpt->m_instance, (unsigned long long)mpt->un.m_base_wwid,
2395 (unsigned long long)mpt->un.m_base_wwid + mpt->m_num_phys - 1);
2399 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
2405 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
2416 MPTSAS_ENABLE_INTR(mpt);
2422 mptsas_sasphypage_0_cb(mptsas_t *mpt, caddr_t page_memp,
2443 mptsas_log(mpt, CE_WARN, "mptsas_get_sas_expander_page0 "
2459 mpt->m_done_traverse_smp = 1;
2503 mptsas_get_sas_phy_page0(mptsas_t *mpt, uint32_t page_address,
2508 ASSERT(mutex_owned(&mpt->m_mutex));
2514 rval = mptsas_access_config_page(mpt,
2527 mptsas_sasphypage_1_cb(mptsas_t *mpt, caddr_t page_memp,
2545 mptsas_log(mpt, CE_WARN, "mptsas_get_sas_expander_page1 "
2561 mpt->m_done_traverse_smp = 1;
2591 mptsas_get_sas_phy_page1(mptsas_t *mpt, uint32_t page_address,
2596 ASSERT(mutex_owned(&mpt->m_mutex));
2602 rval = mptsas_access_config_page(mpt,
2622 mptsas_get_manufacture_page0(mptsas_t *mpt)
2638 MPTSAS_DISABLE_INTR(mpt);
2640 if (mptsas_send_config_request_msg(mpt, MPI2_CONFIG_ACTION_PAGE_HEADER,
2650 recv_dma_attrs = mpt->m_msg_dma_attr;
2654 if (mptsas_dma_addr_create(mpt, recv_dma_attrs, &recv_dma_handle,
2670 if (mptsas_get_handshake_msg(mpt, recv_memp, recv_numbytes,
2677 mptsas_log(mpt, CE_WARN, "mptsas_get_manufacture_page5 update: "
2687 page_dma_attrs = mpt->m_msg_dma_attr;
2691 if (mptsas_dma_addr_create(mpt, page_dma_attrs, &page_dma_handle,
2715 if (mptsas_send_config_request_msg(mpt,
2728 if (mptsas_get_handshake_msg(mpt, recv_memp, recv_numbytes,
2735 mptsas_log(mpt, CE_WARN, "mptsas_get_manufacture_page0 config: "
2749 mpt->m_MANU_page0.ChipName[i] =
2755 mpt->m_MANU_page0.ChipRevision[i] =
2761 mpt->m_MANU_page0.BoardName[i] =
2767 mpt->m_MANU_page0.BoardAssembly[i] =
2773 mpt->m_MANU_page0.BoardTracerNumber[i] =
2780 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
2786 ddi_fm_service_impact(mpt->m_dip, DDI_SERVICE_UNAFFECTED);
2797 MPTSAS_ENABLE_INTR(mpt);