Lines Matching refs:hba

33 static void emlxs_sli3_issue_iocb(emlxs_hba_t *hba, RING *rp, IOCBQ *iocbq);
34 static void emlxs_sli3_handle_link_event(emlxs_hba_t *hba);
35 static void emlxs_sli3_handle_ring_event(emlxs_hba_t *hba, int32_t ring_no,
45 static int emlxs_sli3_map_hdw(emlxs_hba_t *hba);
47 static void emlxs_sli3_unmap_hdw(emlxs_hba_t *hba);
49 static int32_t emlxs_sli3_online(emlxs_hba_t *hba);
51 static void emlxs_sli3_offline(emlxs_hba_t *hba,
54 static uint32_t emlxs_sli3_hba_reset(emlxs_hba_t *hba,
58 static void emlxs_sli3_hba_kill(emlxs_hba_t *hba);
59 static void emlxs_sli3_hba_kill4quiesce(emlxs_hba_t *hba);
60 static uint32_t emlxs_sli3_hba_init(emlxs_hba_t *hba);
72 static void emlxs_sli3_issue_iocb_cmd(emlxs_hba_t *hba,
76 static uint32_t emlxs_sli3_issue_mbox_cmd(emlxs_hba_t *hba,
101 static void emlxs_sli3_poll_intr(emlxs_hba_t *hba);
108 static void emlxs_sli3_enable_intr(emlxs_hba_t *hba);
110 static void emlxs_sli3_disable_intr(emlxs_hba_t *hba,
114 static void emlxs_handle_ff_error(emlxs_hba_t *hba);
116 static uint32_t emlxs_handle_mb_event(emlxs_hba_t *hba);
118 static void emlxs_sli3_timer_check_mbox(emlxs_hba_t *hba);
120 static uint32_t emlxs_mb_config_port(emlxs_hba_t *hba,
123 static void emlxs_enable_latt(emlxs_hba_t *hba);
125 static uint32_t emlxs_check_attention(emlxs_hba_t *hba);
127 static uint32_t emlxs_get_attention(emlxs_hba_t *hba,
129 static void emlxs_proc_attention(emlxs_hba_t *hba,
137 static uint32_t emlxs_hbq_setup(emlxs_hba_t *hba,
139 static void emlxs_sli3_timer(emlxs_hba_t *hba);
141 static void emlxs_sli3_poll_erratt(emlxs_hba_t *hba);
189 emlxs_sli3_online(emlxs_hba_t *hba) in emlxs_sli3_online() argument
222 hba->chan_count = MAX_RINGS; in emlxs_sli3_online()
224 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_online()
225 (void) READ_SBUS_CSR_REG(hba, FC_SHS_REG(hba)); in emlxs_sli3_online()
232 (hba->fw_flag & FW_UPDATE_KERNEL)) { in emlxs_sli3_online()
236 hba->mbox_queue_flag = 0; in emlxs_sli3_online()
237 hba->sli.sli3.hc_copy = 0; in emlxs_sli3_online()
238 hba->fc_edtov = FF_DEF_EDTOV; in emlxs_sli3_online()
239 hba->fc_ratov = FF_DEF_RATOV; in emlxs_sli3_online()
240 hba->fc_altov = FF_DEF_ALTOV; in emlxs_sli3_online()
241 hba->fc_arbtov = FF_DEF_ARBTOV; in emlxs_sli3_online()
265 if (hba->model_info.sli_mask & EMLXS_SLI3_MASK) { in emlxs_sli3_online()
268 } else if (hba->model_info.sli_mask & EMLXS_SLI2_MASK) { in emlxs_sli3_online()
280 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_online()
287 if (emlxs_sli3_hba_init(hba)) { in emlxs_sli3_online()
297 if ((emlxs_fm_check_acc_handle(hba, hba->pci_acc_handle) in emlxs_sli3_online()
299 (emlxs_fm_check_acc_handle(hba, hba->sli.sli3.slim_acc_handle) in emlxs_sli3_online()
301 (emlxs_fm_check_acc_handle(hba, hba->sli.sli3.csr_acc_handle) in emlxs_sli3_online()
313 if (hba->model_info.vendor_id == PCI_VENDOR_ID_EMULEX && in emlxs_sli3_online()
314 hba->model_info.device_id == PCI_DEVICE_ID_PEGASUS) { in emlxs_sli3_online()
316 if (emlxs_get_max_sram(hba, &MaxRbusSize, &MaxIbusSize) == 0) { in emlxs_sli3_online()
322 &hba->model_info, in emlxs_sli3_online()
327 } else if (hba->model_info.id != LP9802) { in emlxs_sli3_online()
332 &hba->model_info, in emlxs_sli3_online()
365 if (hba->model_info.sli_mask & EMLXS_SLI4_MASK) { in emlxs_sli3_online()
368 hba->model_info.sli_mask); in emlxs_sli3_online()
374 EMLXS_STATE_CHANGE(hba, FC_INIT_REV); in emlxs_sli3_online()
375 emlxs_mb_read_rev(hba, mbq, 0); in emlxs_sli3_online()
376 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli3_online()
423 EMLXS_STATE_CHANGE(hba, FC_INIT_REV); in emlxs_sli3_online()
428 emlxs_mb_read_rev(hba, mbq, 1); in emlxs_sli3_online()
430 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli3_online()
471 if (!(hba->model_info.sli_mask & sli_mode_mask)) { in emlxs_sli3_online()
522 key = emlxs_get_key(hba, mbq); in emlxs_sli3_online()
533 emlxs_mb_dump_vpd(hba, mbq, offset); in emlxs_sli3_online()
534 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli3_online()
609 (void) emlxs_parse_vpd(hba, (uint8_t *)vpd_data, offset); in emlxs_sli3_online()
624 (strcmp(&vpd->model[0], hba->model_info.model) != 0)) { in emlxs_sli3_online()
632 &hba->model_info, in emlxs_sli3_online()
641 (strcmp(&vpd->part_num[0], hba->model_info.model) != 0)) { in emlxs_sli3_online()
649 &hba->model_info, in emlxs_sli3_online()
665 (void) strncpy(hba->model_info.model_desc, in emlxs_sli3_online()
667 (sizeof (hba->model_info.model_desc)-1)); in emlxs_sli3_online()
672 (void) strncpy(hba->model_info.model, vpd->model, in emlxs_sli3_online()
673 (sizeof (hba->model_info.model)-1)); in emlxs_sli3_online()
678 emlxs_parse_prog_types(hba, vpd->prog_types); in emlxs_sli3_online()
686 if (hba->model_info.flags & EMLXS_NOT_SUPPORTED) { in emlxs_sli3_online()
690 "Model:%s", hba->model_info.id, hba->model_info.vendor_id, in emlxs_sli3_online()
691 hba->model_info.device_id, hba->model_info.ssdid, in emlxs_sli3_online()
692 hba->model_info.model); in emlxs_sli3_online()
699 (void) emlxs_read_wakeup_parms(hba, &hba->wakeup_parms, 1); in emlxs_sli3_online()
700 emlxs_decode_version(hba->wakeup_parms.u0.boot_bios_wd[0], in emlxs_sli3_online()
704 emlxs_get_fcode_version(hba); in emlxs_sli3_online()
721 hba->fw_flag = 0; in emlxs_sli3_online()
722 hba->fw_timer = 0; in emlxs_sli3_online()
725 (hba->model_info.flags & EMLXS_ORACLE_BRANDED) && in emlxs_sli3_online()
726 hba->model_info.fwid) || ((fw_check & 0x2) && in emlxs_sli3_online()
727 hba->model_info.fwid)) { in emlxs_sli3_online()
733 if (emlxs_fw_table[i].id == hba->model_info.fwid) { in emlxs_sli3_online()
748 hba->fw_flag |= FW_UPDATE_NEEDED; in emlxs_sli3_online()
760 hba->model_info.id, hba->model_info.fwid); in emlxs_sli3_online()
769 emlxs_fw_load(hba, fw); in emlxs_sli3_online()
775 rc = emlxs_fw_download(hba, in emlxs_sli3_online()
782 hba->fw_flag |= in emlxs_sli3_online()
790 emlxs_fw_unload(hba, fw); in emlxs_sli3_online()
798 hba->fw_flag |= FW_UPDATE_NEEDED; in emlxs_sli3_online()
816 hba->model_info.id, hba->model_info.fwid); in emlxs_sli3_online()
825 if (EMLXS_INTR_ADD(hba) != DDI_SUCCESS) { in emlxs_sli3_online()
833 EMLXS_STATE_CHANGE(hba, FC_INIT_CFGPORT); in emlxs_sli3_online()
838 (void) emlxs_mb_config_port(hba, mbq, sli_mode, key); in emlxs_sli3_online()
839 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli3_online()
847 if (hba->model_info.sli_mask & in emlxs_sli3_online()
860 hba->flag &= ~FC_SLIM2_MODE; in emlxs_sli3_online()
871 hba->flag |= FC_NPIV_ENABLED; in emlxs_sli3_online()
873 if (hba->model_info.chip >= EMLXS_SATURN_CHIP) { in emlxs_sli3_online()
874 hba->vpi_max = in emlxs_sli3_online()
878 hba->vpi_max = in emlxs_sli3_online()
885 hba->fca_tran->fca_num_npivports = in emlxs_sli3_online()
886 (cfg[CFG_NPIV_ENABLE].current) ? hba->vpi_max : 0; in emlxs_sli3_online()
890 hba->flag |= FC_HBQ_ENABLED; in emlxs_sli3_online()
894 "SLI3 mode: flag=%x vpi_max=%d", hba->flag, hba->vpi_max); in emlxs_sli3_online()
897 "SLI2 mode: flag=%x", hba->flag); in emlxs_sli3_online()
900 hba->sli_mode = sli_mode; in emlxs_sli3_online()
902 hba->fca_tran->fca_num_npivports = 0; in emlxs_sli3_online()
908 emlxs_decode_firmware_rev(hba, vpd); in emlxs_sli3_online()
910 emlxs_pcix_mxr_update(hba, 0); in emlxs_sli3_online()
915 emlxs_mb_read_config(hba, mbq); in emlxs_sli3_online()
916 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli3_online()
927 emlxs_process_link_speed(hba); in emlxs_sli3_online()
931 hba->max_nodes = in emlxs_sli3_online()
935 hba->max_nodes = mb->un.varRdConfig.max_rpi; in emlxs_sli3_online()
939 hba->io_throttle = mb->un.varRdConfig.max_xri - IO_THROTTLE_RESERVE; in emlxs_sli3_online()
943 hba->max_iotag = (uint16_t)cfg[CFG_NUM_IOTAGS].current; in emlxs_sli3_online()
945 hba->max_iotag = mb->un.varRdConfig.max_xri; in emlxs_sli3_online()
949 hba->fc_oor_iotag = hba->max_iotag; in emlxs_sli3_online()
954 if (emlxs_mem_alloc_buffer(hba) == 0) { in emlxs_sli3_online()
958 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli3_online()
965 if (((mp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BUF)) == 0) || in emlxs_sli3_online()
966 ((mp1 = (MATCHMAP *)emlxs_mem_get(hba, MEM_BUF)) == 0)) { in emlxs_sli3_online()
986 (void) emlxs_mb_run_biu_diag(hba, mbq, mp->phys, mp1->phys); in emlxs_sli3_online()
988 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli3_online()
1002 if (emlxs_fm_check_dma_handle(hba, mp->dma_handle) in emlxs_sli3_online()
1014 if (emlxs_fm_check_dma_handle(hba, mp1->dma_handle) in emlxs_sli3_online()
1045 emlxs_mem_put(hba, MEM_BUF, (void *)mp); in emlxs_sli3_online()
1047 emlxs_mem_put(hba, MEM_BUF, (void *)mp1); in emlxs_sli3_online()
1050 hba->channel_fcp = FC_FCP_RING; in emlxs_sli3_online()
1051 hba->channel_els = FC_ELS_RING; in emlxs_sli3_online()
1052 hba->channel_ip = FC_IP_RING; in emlxs_sli3_online()
1053 hba->channel_ct = FC_CT_RING; in emlxs_sli3_online()
1054 hba->sli.sli3.ring_count = MAX_RINGS; in emlxs_sli3_online()
1056 hba->channel_tx_count = 0; in emlxs_sli3_online()
1057 hba->io_count = 0; in emlxs_sli3_online()
1058 hba->fc_iotag = 1; in emlxs_sli3_online()
1060 for (i = 0; i < hba->chan_count; i++) { in emlxs_sli3_online()
1061 cp = &hba->chan[i]; in emlxs_sli3_online()
1064 cp->iopath = (void *)&hba->sli.sli3.ring[i]; in emlxs_sli3_online()
1066 cp->hba = hba; in emlxs_sli3_online()
1073 for (i = 0; i < (uint32_t)hba->sli.sli3.ring_count; i++) { in emlxs_sli3_online()
1077 rp = &hba->sli.sli3.ring[i]; in emlxs_sli3_online()
1080 rp->channelp = &hba->chan[i]; in emlxs_sli3_online()
1082 rp->hba = hba; in emlxs_sli3_online()
1087 EMLXS_STATE_CHANGE(hba, FC_INIT_CFGRING); in emlxs_sli3_online()
1092 emlxs_mb_config_ring(hba, i, mbq); in emlxs_sli3_online()
1093 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli3_online()
1108 EMLXS_STATE_CHANGE(hba, FC_INIT_INITLINK); in emlxs_sli3_online()
1113 emlxs_mb_config_link(hba, mbq); in emlxs_sli3_online()
1114 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli3_online()
1130 emlxs_mb_set_var(hba, (MAILBOX *)mbq, 0x00060412, in emlxs_sli3_online()
1133 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli3_online()
1152 (void) emlxs_mb_read_sparam(hba, mbq); in emlxs_sli3_online()
1154 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli3_online()
1164 emlxs_mem_put(hba, MEM_BUF, (void *)mp); in emlxs_sli3_online()
1169 outptr = (uint8_t *)&hba->wwpn.IEEE[0]; in emlxs_sli3_online()
1207 (hba->model_info.chip >= EMLXS_THOR_CHIP)) { in emlxs_sli3_online()
1217 buffer = ddi_get_name_addr(hba->dip); in emlxs_sli3_online()
1239 p_dip = ddi_get_parent(hba->dip); in emlxs_sli3_online()
1243 while (c_dip && (hba->dip != c_dip)) { in emlxs_sli3_online()
1250 if (hba->model_info.channels == EMLXS_MULTI_CHANNEL) { in emlxs_sli3_online()
1258 (void) strncpy(vpd->id, hba->model_info.model_desc, in emlxs_sli3_online()
1263 (void) strncpy(vpd->manufacturer, hba->model_info.manufacturer, in emlxs_sli3_online()
1268 (void) strncpy(vpd->part_num, hba->model_info.model, in emlxs_sli3_online()
1273 (void) strncpy(vpd->model_desc, hba->model_info.model_desc, in emlxs_sli3_online()
1278 (void) strncpy(vpd->model, hba->model_info.model, in emlxs_sli3_online()
1283 emlxs_build_prog_types(hba, vpd); in emlxs_sli3_online()
1287 (void) snprintf(hba->snn, (sizeof (hba->snn)-1), in emlxs_sli3_online()
1289 hba->model_info.manufacturer, hba->model_info.model, in emlxs_sli3_online()
1290 hba->vpd.fw_version, emlxs_version, in emlxs_sli3_online()
1293 (void) snprintf(hba->spn, (sizeof (hba->spn)-1), in emlxs_sli3_online()
1295 hba->model_info.manufacturer, in emlxs_sli3_online()
1296 hba->wwpn.nameType, hba->wwpn.IEEEextMsn, hba->wwpn.IEEEextLsb, in emlxs_sli3_online()
1297 hba->wwpn.IEEE[0], hba->wwpn.IEEE[1], hba->wwpn.IEEE[2], in emlxs_sli3_online()
1298 hba->wwpn.IEEE[3], hba->wwpn.IEEE[4], hba->wwpn.IEEE[5]); in emlxs_sli3_online()
1301 if ((hba->sparam.portName.nameType != NAME_IEEE) || in emlxs_sli3_online()
1302 (hba->sparam.portName.IEEEextMsn != 0) || in emlxs_sli3_online()
1303 (hba->sparam.portName.IEEEextLsb != 0)) { in emlxs_sli3_online()
1308 hba->sparam.portName.nameType); in emlxs_sli3_online()
1319 emlxs_mb_config_farp(hba, mbq); in emlxs_sli3_online()
1320 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli3_online()
1333 if (hba->intr_count > 1) { in emlxs_sli3_online()
1335 if (hba->intr_type == DDI_INTR_TYPE_MSIX) { in emlxs_sli3_online()
1337 hba->last_msiid = 0; in emlxs_sli3_online()
1343 emlxs_mb_config_msix(hba, mbq, hba->intr_map, hba->intr_count); in emlxs_sli3_online()
1345 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) == in emlxs_sli3_online()
1357 emlxs_mb_config_msi(hba, mbq, hba->intr_map, hba->intr_count); in emlxs_sli3_online()
1359 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) == in emlxs_sli3_online()
1373 (void) emlxs_msi_remove(hba); in emlxs_sli3_online()
1374 (void) emlxs_msi_uninit(hba); in emlxs_sli3_online()
1376 status = emlxs_msi_init(hba, 1); in emlxs_sli3_online()
1393 (void) emlxs_mem_free_buffer(hba); in emlxs_sli3_online()
1401 if ((hba->intr_count >= 1) && in emlxs_sli3_online()
1402 (hba->sli_mode == EMLXS_HBA_SLI3_MODE)) { in emlxs_sli3_online()
1405 for (i = 0; i < hba->intr_count; i ++) { in emlxs_sli3_online()
1406 hba->msi2chan[i] = i; in emlxs_sli3_online()
1407 if (i >= hba->chan_count) in emlxs_sli3_online()
1408 hba->msi2chan[i] = (i - hba->chan_count); in emlxs_sli3_online()
1420 emlxs_disable_tc(hba, mbq); in emlxs_sli3_online()
1421 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != in emlxs_sli3_online()
1438 emlxs_mb_async_event(hba, mbq); in emlxs_sli3_online()
1439 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_sli3_online()
1446 hba->flag |= FC_ASYNC_EVENTS; in emlxs_sli3_online()
1449 EMLXS_STATE_CHANGE(hba, FC_LINK_DOWN); in emlxs_sli3_online()
1451 emlxs_sli3_enable_intr(hba); in emlxs_sli3_online()
1453 if (hba->flag & FC_HBQ_ENABLED) { in emlxs_sli3_online()
1455 if (emlxs_hbq_setup(hba, EMLXS_FCT_HBQ_ID)) { in emlxs_sli3_online()
1465 if ((hba->pm_state == EMLXS_PM_IN_ATTACH) && in emlxs_sli3_online()
1489 if (emlxs_hbq_setup(hba, EMLXS_IP_HBQ_ID)) { in emlxs_sli3_online()
1501 if (emlxs_hbq_setup(hba, EMLXS_ELS_HBQ_ID)) { in emlxs_sli3_online()
1510 if (emlxs_hbq_setup(hba, EMLXS_CT_HBQ_ID)) { in emlxs_sli3_online()
1522 rp = &hba->sli.sli3.ring[FC_FCT_RING]; in emlxs_sli3_online()
1524 (void) emlxs_post_buffer(hba, rp, 2); in emlxs_sli3_online()
1532 rp = &hba->sli.sli3.ring[FC_IP_RING]; in emlxs_sli3_online()
1534 (void) emlxs_post_buffer(hba, rp, 2); in emlxs_sli3_online()
1541 rp = &hba->sli.sli3.ring[FC_ELS_RING]; in emlxs_sli3_online()
1543 (void) emlxs_post_buffer(hba, rp, 2); in emlxs_sli3_online()
1550 rp = &hba->sli.sli3.ring[FC_CT_RING]; in emlxs_sli3_online()
1552 (void) emlxs_post_buffer(hba, rp, 2); in emlxs_sli3_online()
1562 EMLXS_STATE_CHANGE(hba, FC_LINK_DOWN_PERSIST); in emlxs_sli3_online()
1569 emlxs_enable_latt(hba); in emlxs_sli3_online()
1578 mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX); in emlxs_sli3_online()
1588 emlxs_mb_init_link(hba, mbq, cfg[CFG_TOPOLOGY].current, in emlxs_sli3_online()
1591 rval = emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_NOWAIT, 0); in emlxs_sli3_online()
1598 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_sli3_online()
1607 emlxs_enable_latt(hba); in emlxs_sli3_online()
1611 while (i && (hba->state < FC_LINK_UP)) { in emlxs_sli3_online()
1613 if (hba->state == FC_ERROR) { in emlxs_sli3_online()
1635 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli3_online()
1637 if (hba->intr_flags & EMLXS_MSI_ADDED) { in emlxs_sli3_online()
1638 (void) EMLXS_INTR_REMOVE(hba); in emlxs_sli3_online()
1642 emlxs_mem_put(hba, MEM_BUF, (void *)mp); in emlxs_sli3_online()
1647 emlxs_mem_put(hba, MEM_BUF, (void *)mp1); in emlxs_sli3_online()
1651 (void) emlxs_mem_free_buffer(hba); in emlxs_sli3_online()
1670 emlxs_sli3_offline(emlxs_hba_t *hba, uint32_t reset_requested) in emlxs_sli3_offline() argument
1675 emlxs_sli3_hba_kill(hba); in emlxs_sli3_offline()
1678 (void) emlxs_mem_free_buffer(hba); in emlxs_sli3_offline()
1684 emlxs_sli3_map_hdw(emlxs_hba_t *hba) in emlxs_sli3_map_hdw() argument
1691 dip = (dev_info_t *)hba->dip; in emlxs_sli3_map_hdw()
1694 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_map_hdw()
1696 if (hba->sli.sli3.slim_acc_handle == 0) { in emlxs_sli3_map_hdw()
1699 (caddr_t *)&hba->sli.sli3.slim_addr, in emlxs_sli3_map_hdw()
1700 0, 0, &dev_attr, &hba->sli.sli3.slim_acc_handle); in emlxs_sli3_map_hdw()
1709 if (hba->sli.sli3.csr_acc_handle == 0) { in emlxs_sli3_map_hdw()
1712 (caddr_t *)&hba->sli.sli3.csr_addr, in emlxs_sli3_map_hdw()
1713 0, 0, &dev_attr, &hba->sli.sli3.csr_acc_handle); in emlxs_sli3_map_hdw()
1722 if (hba->sli.sli3.sbus_flash_acc_handle == 0) { in emlxs_sli3_map_hdw()
1724 (caddr_t *)&hba->sli.sli3.sbus_flash_addr, 0, 0, in emlxs_sli3_map_hdw()
1725 &dev_attr, &hba->sli.sli3.sbus_flash_acc_handle); in emlxs_sli3_map_hdw()
1734 if (hba->sli.sli3.sbus_core_acc_handle == 0) { in emlxs_sli3_map_hdw()
1736 (caddr_t *)&hba->sli.sli3.sbus_core_addr, 0, 0, in emlxs_sli3_map_hdw()
1737 &dev_attr, &hba->sli.sli3.sbus_core_acc_handle); in emlxs_sli3_map_hdw()
1747 if (hba->sli.sli3.sbus_csr_handle == 0) { in emlxs_sli3_map_hdw()
1749 (caddr_t *)&hba->sli.sli3.sbus_csr_addr, in emlxs_sli3_map_hdw()
1750 0, 0, &dev_attr, &hba->sli.sli3.sbus_csr_handle); in emlxs_sli3_map_hdw()
1761 if (hba->sli.sli3.slim_acc_handle == 0) { in emlxs_sli3_map_hdw()
1763 (caddr_t *)&hba->sli.sli3.slim_addr, in emlxs_sli3_map_hdw()
1764 0, 0, &dev_attr, &hba->sli.sli3.slim_acc_handle); in emlxs_sli3_map_hdw()
1770 status, &hba->sli.sli3.slim_addr, &dev_attr, in emlxs_sli3_map_hdw()
1771 &hba->sli.sli3.slim_acc_handle); in emlxs_sli3_map_hdw()
1780 if (hba->sli.sli3.csr_acc_handle == 0) { in emlxs_sli3_map_hdw()
1782 (caddr_t *)&hba->sli.sli3.csr_addr, in emlxs_sli3_map_hdw()
1783 0, 0, &dev_attr, &hba->sli.sli3.csr_acc_handle); in emlxs_sli3_map_hdw()
1794 if (hba->sli.sli3.slim2.virt == 0) { in emlxs_sli3_map_hdw()
1806 (void) emlxs_mem_alloc(hba, buf_info); in emlxs_sli3_map_hdw()
1812 hba->sli.sli3.slim2.virt = buf_info->virt; in emlxs_sli3_map_hdw()
1813 hba->sli.sli3.slim2.phys = buf_info->phys; in emlxs_sli3_map_hdw()
1814 hba->sli.sli3.slim2.size = SLI_SLIM2_SIZE; in emlxs_sli3_map_hdw()
1815 hba->sli.sli3.slim2.data_handle = buf_info->data_handle; in emlxs_sli3_map_hdw()
1816 hba->sli.sli3.slim2.dma_handle = buf_info->dma_handle; in emlxs_sli3_map_hdw()
1817 bzero((char *)hba->sli.sli3.slim2.virt, SLI_SLIM2_SIZE); in emlxs_sli3_map_hdw()
1821 hba->sli.sli3.ha_reg_addr = (uint32_t *)(hba->sli.sli3.csr_addr + in emlxs_sli3_map_hdw()
1823 hba->sli.sli3.ca_reg_addr = (uint32_t *)(hba->sli.sli3.csr_addr + in emlxs_sli3_map_hdw()
1825 hba->sli.sli3.hs_reg_addr = (uint32_t *)(hba->sli.sli3.csr_addr + in emlxs_sli3_map_hdw()
1827 hba->sli.sli3.hc_reg_addr = (uint32_t *)(hba->sli.sli3.csr_addr + in emlxs_sli3_map_hdw()
1829 hba->sli.sli3.bc_reg_addr = (uint32_t *)(hba->sli.sli3.csr_addr + in emlxs_sli3_map_hdw()
1832 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_map_hdw()
1835 hba->sli.sli3.shc_reg_addr = in emlxs_sli3_map_hdw()
1836 (uint32_t *)(hba->sli.sli3.sbus_csr_addr + in emlxs_sli3_map_hdw()
1838 hba->sli.sli3.shs_reg_addr = in emlxs_sli3_map_hdw()
1839 (uint32_t *)(hba->sli.sli3.sbus_csr_addr + in emlxs_sli3_map_hdw()
1841 hba->sli.sli3.shu_reg_addr = in emlxs_sli3_map_hdw()
1842 (uint32_t *)(hba->sli.sli3.sbus_csr_addr + in emlxs_sli3_map_hdw()
1845 hba->chan_count = MAX_RINGS; in emlxs_sli3_map_hdw()
1851 emlxs_sli3_unmap_hdw(hba); in emlxs_sli3_map_hdw()
1858 emlxs_sli3_unmap_hdw(emlxs_hba_t *hba) in emlxs_sli3_unmap_hdw() argument
1863 if (hba->sli.sli3.csr_acc_handle) { in emlxs_sli3_unmap_hdw()
1864 ddi_regs_map_free(&hba->sli.sli3.csr_acc_handle); in emlxs_sli3_unmap_hdw()
1865 hba->sli.sli3.csr_acc_handle = 0; in emlxs_sli3_unmap_hdw()
1868 if (hba->sli.sli3.slim_acc_handle) { in emlxs_sli3_unmap_hdw()
1869 ddi_regs_map_free(&hba->sli.sli3.slim_acc_handle); in emlxs_sli3_unmap_hdw()
1870 hba->sli.sli3.slim_acc_handle = 0; in emlxs_sli3_unmap_hdw()
1873 if (hba->sli.sli3.sbus_flash_acc_handle) { in emlxs_sli3_unmap_hdw()
1874 ddi_regs_map_free(&hba->sli.sli3.sbus_flash_acc_handle); in emlxs_sli3_unmap_hdw()
1875 hba->sli.sli3.sbus_flash_acc_handle = 0; in emlxs_sli3_unmap_hdw()
1878 if (hba->sli.sli3.sbus_core_acc_handle) { in emlxs_sli3_unmap_hdw()
1879 ddi_regs_map_free(&hba->sli.sli3.sbus_core_acc_handle); in emlxs_sli3_unmap_hdw()
1880 hba->sli.sli3.sbus_core_acc_handle = 0; in emlxs_sli3_unmap_hdw()
1883 if (hba->sli.sli3.sbus_csr_handle) { in emlxs_sli3_unmap_hdw()
1884 ddi_regs_map_free(&hba->sli.sli3.sbus_csr_handle); in emlxs_sli3_unmap_hdw()
1885 hba->sli.sli3.sbus_csr_handle = 0; in emlxs_sli3_unmap_hdw()
1888 if (hba->sli.sli3.slim2.virt) { in emlxs_sli3_unmap_hdw()
1891 if (hba->sli.sli3.slim2.phys) { in emlxs_sli3_unmap_hdw()
1892 buf_info->phys = hba->sli.sli3.slim2.phys; in emlxs_sli3_unmap_hdw()
1893 buf_info->data_handle = hba->sli.sli3.slim2.data_handle; in emlxs_sli3_unmap_hdw()
1894 buf_info->dma_handle = hba->sli.sli3.slim2.dma_handle; in emlxs_sli3_unmap_hdw()
1898 buf_info->virt = hba->sli.sli3.slim2.virt; in emlxs_sli3_unmap_hdw()
1899 buf_info->size = hba->sli.sli3.slim2.size; in emlxs_sli3_unmap_hdw()
1900 emlxs_mem_free(hba, buf_info); in emlxs_sli3_unmap_hdw()
1902 hba->sli.sli3.slim2.virt = NULL; in emlxs_sli3_unmap_hdw()
1912 emlxs_sli3_hba_init(emlxs_hba_t *hba) in emlxs_sli3_hba_init() argument
1924 if (emlxs_sli3_hba_reset(hba, 1, 0, 0)) { in emlxs_sli3_hba_init()
1928 hba->channel_fcp = FC_FCP_RING; in emlxs_sli3_hba_init()
1929 hba->channel_els = FC_ELS_RING; in emlxs_sli3_hba_init()
1930 hba->channel_ip = FC_IP_RING; in emlxs_sli3_hba_init()
1931 hba->channel_ct = FC_CT_RING; in emlxs_sli3_hba_init()
1932 hba->chan_count = MAX_RINGS; in emlxs_sli3_hba_init()
1933 hba->sli.sli3.ring_count = MAX_RINGS; in emlxs_sli3_hba_init()
1940 hba->sli.sli3.ring_masks[FC_FCP_RING] = 1; in emlxs_sli3_hba_init()
1941 hba->sli.sli3.ring_rval[i] = FC_FCP_CMND; in emlxs_sli3_hba_init()
1942 hba->sli.sli3.ring_rmask[i] = 0; in emlxs_sli3_hba_init()
1943 hba->sli.sli3.ring_tval[i] = FC_TYPE_SCSI_FCP; in emlxs_sli3_hba_init()
1944 hba->sli.sli3.ring_tmask[i++] = 0xFF; in emlxs_sli3_hba_init()
1946 hba->sli.sli3.ring_masks[FC_FCP_RING] = 0; in emlxs_sli3_hba_init()
1949 hba->sli.sli3.ring[FC_FCP_RING].fc_numCiocb = SLIM_IOCB_CMD_R0_ENTRIES; in emlxs_sli3_hba_init()
1950 hba->sli.sli3.ring[FC_FCP_RING].fc_numRiocb = SLIM_IOCB_RSP_R0_ENTRIES; in emlxs_sli3_hba_init()
1954 hba->sli.sli3.ring_masks[FC_IP_RING] = 1; in emlxs_sli3_hba_init()
1955 hba->sli.sli3.ring_rval[i] = FC_UNSOL_DATA; /* Unsol Data */ in emlxs_sli3_hba_init()
1956 hba->sli.sli3.ring_rmask[i] = 0xFF; in emlxs_sli3_hba_init()
1957 hba->sli.sli3.ring_tval[i] = FC_TYPE_IS8802_SNAP; /* LLC/SNAP */ in emlxs_sli3_hba_init()
1958 hba->sli.sli3.ring_tmask[i++] = 0xFF; in emlxs_sli3_hba_init()
1960 hba->sli.sli3.ring_masks[FC_IP_RING] = 0; in emlxs_sli3_hba_init()
1963 hba->sli.sli3.ring[FC_IP_RING].fc_numCiocb = SLIM_IOCB_CMD_R1_ENTRIES; in emlxs_sli3_hba_init()
1964 hba->sli.sli3.ring[FC_IP_RING].fc_numRiocb = SLIM_IOCB_RSP_R1_ENTRIES; in emlxs_sli3_hba_init()
1967 hba->sli.sli3.ring_masks[FC_ELS_RING] = 1; in emlxs_sli3_hba_init()
1968 hba->sli.sli3.ring_rval[i] = FC_ELS_REQ; /* ELS request/rsp */ in emlxs_sli3_hba_init()
1969 hba->sli.sli3.ring_rmask[i] = 0xFE; in emlxs_sli3_hba_init()
1970 hba->sli.sli3.ring_tval[i] = FC_TYPE_EXTENDED_LS; /* ELS */ in emlxs_sli3_hba_init()
1971 hba->sli.sli3.ring_tmask[i++] = 0xFF; in emlxs_sli3_hba_init()
1973 hba->sli.sli3.ring[FC_ELS_RING].fc_numCiocb = SLIM_IOCB_CMD_R2_ENTRIES; in emlxs_sli3_hba_init()
1974 hba->sli.sli3.ring[FC_ELS_RING].fc_numRiocb = SLIM_IOCB_RSP_R2_ENTRIES; in emlxs_sli3_hba_init()
1977 hba->sli.sli3.ring_masks[FC_CT_RING] = 1; in emlxs_sli3_hba_init()
1978 hba->sli.sli3.ring_rval[i] = FC_UNSOL_CTL; /* CT request/rsp */ in emlxs_sli3_hba_init()
1979 hba->sli.sli3.ring_rmask[i] = 0xFE; in emlxs_sli3_hba_init()
1980 hba->sli.sli3.ring_tval[i] = FC_TYPE_FC_SERVICES; /* CT */ in emlxs_sli3_hba_init()
1981 hba->sli.sli3.ring_tmask[i++] = 0xFF; in emlxs_sli3_hba_init()
1983 hba->sli.sli3.ring[FC_CT_RING].fc_numCiocb = SLIM_IOCB_CMD_R3_ENTRIES; in emlxs_sli3_hba_init()
1984 hba->sli.sli3.ring[FC_CT_RING].fc_numRiocb = SLIM_IOCB_RSP_R3_ENTRIES; in emlxs_sli3_hba_init()
1993 hba->vpi_max = 0; in emlxs_sli3_hba_init()
1996 vport->hba = hba; in emlxs_sli3_hba_init()
2012 if (hba->max_nodes == 0) { in emlxs_sli3_hba_init()
2014 hba->max_nodes = cfg[CFG_NUM_NODES].current; in emlxs_sli3_hba_init()
2015 } else if (hba->model_info.chip >= EMLXS_SATURN_CHIP) { in emlxs_sli3_hba_init()
2016 hba->max_nodes = 4096; in emlxs_sli3_hba_init()
2018 hba->max_nodes = 512; in emlxs_sli3_hba_init()
2032 emlxs_sli3_hba_reset(emlxs_hba_t *hba, uint32_t restart, uint32_t skip_post, in emlxs_sli3_hba_reset() argument
2052 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli3_hba_reset()
2059 emlxs_sli3_hba_kill(hba); in emlxs_sli3_hba_reset()
2061 emlxs_sli3_hba_kill4quiesce(hba); in emlxs_sli3_hba_reset()
2067 EMLXS_STATE_CHANGE(hba, FC_INIT_START); in emlxs_sli3_hba_reset()
2073 EMLXS_STATE_CHANGE(hba, FC_WARM_START); in emlxs_sli3_hba_reset()
2078 hba->flag &= ~(FC_SLIM2_MODE | FC_HARDWARE_ERROR); in emlxs_sli3_hba_reset()
2080 mb = FC_SLIM1_MAILBOX(hba); in emlxs_sli3_hba_reset()
2088 HBASTATS.ResetTime = hba->timer_tics; in emlxs_sli3_hba_reset()
2095 WRITE_SLIM_ADDR(hba, ((volatile uint32_t *)mb), *word0); in emlxs_sli3_hba_reset()
2099 WRITE_SLIM_ADDR(hba, (((volatile uint32_t *)mb) + 1), in emlxs_sli3_hba_reset()
2102 WRITE_SLIM_ADDR(hba, (((volatile uint32_t *)mb) + 1), in emlxs_sli3_hba_reset()
2111 cfg_value = ddi_get16(hba->pci_acc_handle, in emlxs_sli3_hba_reset()
2112 (uint16_t *)(hba->pci_addr + PCI_COMMAND_REGISTER)); in emlxs_sli3_hba_reset()
2114 ddi_put16(hba->pci_acc_handle, in emlxs_sli3_hba_reset()
2115 (uint16_t *)(hba->pci_addr + PCI_COMMAND_REGISTER), in emlxs_sli3_hba_reset()
2118 hba->sli.sli3.hc_copy = HC_INITFF; in emlxs_sli3_hba_reset()
2119 WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy); in emlxs_sli3_hba_reset()
2125 ddi_put16(hba->pci_acc_handle, in emlxs_sli3_hba_reset()
2126 (uint16_t *)(hba->pci_addr + PCI_COMMAND_REGISTER), in emlxs_sli3_hba_reset()
2136 status = READ_CSR_REG(hba, FC_HS_REG(hba)); in emlxs_sli3_hba_reset()
2140 status1 = READ_SLIM_ADDR(hba, ((volatile uint8_t *) in emlxs_sli3_hba_reset()
2141 hba->sli.sli3.slim_addr + 0xa8)); in emlxs_sli3_hba_reset()
2142 status2 = READ_SLIM_ADDR(hba, ((volatile uint8_t *) in emlxs_sli3_hba_reset()
2143 hba->sli.sli3.slim_addr + 0xac)); in emlxs_sli3_hba_reset()
2149 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli3_hba_reset()
2181 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli3_hba_reset()
2191 hba->sli.sli3.hc_copy = READ_CSR_REG(hba, FC_HC_REG(hba)); in emlxs_sli3_hba_reset()
2195 if ((emlxs_fm_check_acc_handle(hba, hba->pci_acc_handle) in emlxs_sli3_hba_reset()
2197 (emlxs_fm_check_acc_handle(hba, hba->sli.sli3.slim_acc_handle) in emlxs_sli3_hba_reset()
2199 (emlxs_fm_check_acc_handle(hba, hba->sli.sli3.csr_acc_handle) in emlxs_sli3_hba_reset()
2208 hba->flag &= FC_RESET_MASK; in emlxs_sli3_hba_reset()
2209 hba->channel_tx_count = 0; in emlxs_sli3_hba_reset()
2210 hba->io_count = 0; in emlxs_sli3_hba_reset()
2211 hba->iodone_count = 0; in emlxs_sli3_hba_reset()
2212 hba->topology = 0; in emlxs_sli3_hba_reset()
2213 hba->linkspeed = 0; in emlxs_sli3_hba_reset()
2214 hba->heartbeat_active = 0; in emlxs_sli3_hba_reset()
2215 hba->discovery_timer = 0; in emlxs_sli3_hba_reset()
2216 hba->linkup_timer = 0; in emlxs_sli3_hba_reset()
2217 hba->loopback_tics = 0; in emlxs_sli3_hba_reset()
2221 rp = &hba->sli.sli3.ring[i]; in emlxs_sli3_hba_reset()
2348 emlxs_hba_t *hba = HBA; in emlxs_sli2_bde_setup() local
2363 if (hba->sli.sli3.bpl_table) { in emlxs_sli2_bde_setup()
2364 bmp = hba->sli.sli3.bpl_table[sbp->iotag]; in emlxs_sli2_bde_setup()
2366 bmp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BPL); in emlxs_sli2_bde_setup()
2647 emlxs_hba_t *hba = HBA; in emlxs_sli2_fct_bde_setup() local
2672 if (hba->sli.sli3.bpl_table) { in emlxs_sli2_fct_bde_setup()
2673 bmp = hba->sli.sli3.bpl_table[sbp->iotag]; in emlxs_sli2_fct_bde_setup()
2675 bmp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BPL); in emlxs_sli2_fct_bde_setup()
2785 emlxs_sli3_issue_iocb_cmd(emlxs_hba_t *hba, CHANNEL *cp, IOCBQ *iocbq) in emlxs_sli3_issue_iocb_cmd() argument
2792 SLIM2 *slim2p = (SLIM2 *)hba->sli.sli3.slim2.virt; in emlxs_sli3_issue_iocb_cmd()
2814 if (iocbq && (iocbq->flag & IOCB_FCP_CMD) && (hba->state != FC_READY)) { in emlxs_sli3_issue_iocb_cmd()
2826 if ((hba->io_count - in emlxs_sli3_issue_iocb_cmd()
2827 hba->channel_tx_count) > 10) { in emlxs_sli3_issue_iocb_cmd()
2853 throttle = hba->io_throttle - hba->io_active; in emlxs_sli3_issue_iocb_cmd()
2867 &((SLIM2 *)hba->sli.sli3.slim2.virt)->mbx.us.s2.port[channelno]; in emlxs_sli3_issue_iocb_cmd()
2870 (uint64_t)((unsigned long)hba->sli.sli3.slim2.virt)); in emlxs_sli3_issue_iocb_cmd()
2871 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, 4, in emlxs_sli3_issue_iocb_cmd()
2882 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, 4, in emlxs_sli3_issue_iocb_cmd()
2966 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_issue_iocb_cmd()
2977 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2. in emlxs_sli3_issue_iocb_cmd()
2982 ((char *)hba->sli.sli3.slim_addr + in emlxs_sli3_issue_iocb_cmd()
2983 hba->sli.sli3.hgp_ring_offset + in emlxs_sli3_issue_iocb_cmd()
2986 WRITE_SLIM_ADDR(hba, in emlxs_sli3_issue_iocb_cmd()
2992 WRITE_CSR_REG(hba, FC_CA_REG(hba), in emlxs_sli3_issue_iocb_cmd()
3012 emlxs_sli3_issue_iocb(hba, rp, iocbq); in emlxs_sli3_issue_iocb_cmd()
3021 throttle = hba->io_throttle - hba->io_active; in emlxs_sli3_issue_iocb_cmd()
3035 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_sli3_issue_iocb_cmd()
3050 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_issue_iocb_cmd()
3059 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_sli3_issue_iocb_cmd()
3063 (void *)((char *)hba->sli.sli3.slim_addr + in emlxs_sli3_issue_iocb_cmd()
3064 hba->sli.sli3.hgp_ring_offset + in emlxs_sli3_issue_iocb_cmd()
3066 WRITE_SLIM_ADDR(hba, (volatile uint32_t *)ioa2, in emlxs_sli3_issue_iocb_cmd()
3071 WRITE_CSR_REG(hba, FC_CA_REG(hba), in emlxs_sli3_issue_iocb_cmd()
3088 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.slim_acc_handle); in emlxs_sli3_issue_iocb_cmd()
3089 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_issue_iocb_cmd()
3104 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_issue_iocb_cmd()
3113 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_sli3_issue_iocb_cmd()
3117 (void *)((char *)hba->sli.sli3.slim_addr + in emlxs_sli3_issue_iocb_cmd()
3118 hba->sli.sli3.hgp_ring_offset + in emlxs_sli3_issue_iocb_cmd()
3120 WRITE_SLIM_ADDR(hba, (volatile uint32_t *)ioa2, in emlxs_sli3_issue_iocb_cmd()
3126 WRITE_CSR_REG(hba, FC_CA_REG(hba), (volatile uint32_t)status); in emlxs_sli3_issue_iocb_cmd()
3136 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.slim_acc_handle); in emlxs_sli3_issue_iocb_cmd()
3137 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_issue_iocb_cmd()
3153 emlxs_sli3_issue_mbox_cmd(emlxs_hba_t *hba, MAILBOXQ *mbq, int32_t flag, in emlxs_sli3_issue_mbox_cmd() argument
3157 SLIM2 *slim2p = (SLIM2 *)hba->sli.sli3.slim2.virt; in emlxs_sli3_issue_mbox_cmd()
3207 if (hba->sli.sli3.hc_copy & HC_MBINT_ENA) { in emlxs_sli3_issue_mbox_cmd()
3217 if (hba->flag & FC_HARDWARE_ERROR) { in emlxs_sli3_issue_mbox_cmd()
3218 mb->mbxStatus = (hba->flag & FC_OVERTEMP_EVENT) ? in emlxs_sli3_issue_mbox_cmd()
3230 if (hba->mbox_queue_flag) { in emlxs_sli3_issue_mbox_cmd()
3237 emlxs_mb_put(hba, mbq); in emlxs_sli3_issue_mbox_cmd()
3246 while (hba->mbox_queue_flag) { in emlxs_sli3_issue_mbox_cmd()
3266 if (hba->flag & FC_HARDWARE_ERROR) { in emlxs_sli3_issue_mbox_cmd()
3268 (hba->flag & FC_OVERTEMP_EVENT) ? in emlxs_sli3_issue_mbox_cmd()
3286 emlxs_mb_init(hba, mbq, flag, tmo); in emlxs_sli3_issue_mbox_cmd()
3326 WRITE_CSR_REG(hba, FC_HA_REG(hba), HA_MBATT); in emlxs_sli3_issue_mbox_cmd()
3328 if (hba->flag & FC_SLIM2_MODE) { in emlxs_sli3_issue_mbox_cmd()
3330 mbox = FC_SLIM2_MAILBOX(hba); in emlxs_sli3_issue_mbox_cmd()
3345 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_sli3_issue_mbox_cmd()
3354 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, in emlxs_sli3_issue_mbox_cmd()
3358 mbox = FC_SLIM1_MAILBOX(hba); in emlxs_sli3_issue_mbox_cmd()
3365 WRITE_SLIM_COPY(hba, (uint32_t *)mbq->extbuf, in emlxs_sli3_issue_mbox_cmd()
3371 WRITE_SLIM_COPY(hba, &mb->un.varWords, &mbox->un.varWords, in emlxs_sli3_issue_mbox_cmd()
3376 WRITE_SLIM_ADDR(hba, ((volatile uint32_t *)mbox), ldata); in emlxs_sli3_issue_mbox_cmd()
3380 WRITE_CSR_REG(hba, FC_CA_REG(hba), CA_MBATT); in emlxs_sli3_issue_mbox_cmd()
3386 if ((emlxs_fm_check_acc_handle(hba, hba->sli.sli3.slim_acc_handle) in emlxs_sli3_issue_mbox_cmd()
3388 (emlxs_fm_check_acc_handle(hba, hba->sli.sli3.csr_acc_handle) in emlxs_sli3_issue_mbox_cmd()
3435 if (hba->flag & FC_SLIM2_MODE) { in emlxs_sli3_issue_mbox_cmd()
3436 mbox = FC_SLIM2_MAILBOX(hba); in emlxs_sli3_issue_mbox_cmd()
3440 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_sli3_issue_mbox_cmd()
3445 mbox = FC_SLIM1_MAILBOX(hba); in emlxs_sli3_issue_mbox_cmd()
3447 READ_SLIM_ADDR(hba, ((volatile uint32_t *)mbox)); in emlxs_sli3_issue_mbox_cmd()
3453 if (!hba->timer_id && (tmo_local-- == 0)) { in emlxs_sli3_issue_mbox_cmd()
3461 hba->flag |= FC_MBOX_TIMEOUT; in emlxs_sli3_issue_mbox_cmd()
3462 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_sli3_issue_mbox_cmd()
3463 emlxs_mb_fini(hba, NULL, MBX_TIMEOUT); in emlxs_sli3_issue_mbox_cmd()
3471 if (hba->flag & FC_SLIM2_MODE) { in emlxs_sli3_issue_mbox_cmd()
3473 hba->sli.sli3.slim2.dma_handle, offset, in emlxs_sli3_issue_mbox_cmd()
3479 READ_SLIM_ADDR(hba, in emlxs_sli3_issue_mbox_cmd()
3497 mbox = FC_SLIM2_MAILBOX(hba); in emlxs_sli3_issue_mbox_cmd()
3501 hba->flag |= FC_SLIM2_MODE; in emlxs_sli3_issue_mbox_cmd()
3505 if (hba->flag & FC_SLIM2_MODE) { in emlxs_sli3_issue_mbox_cmd()
3506 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_sli3_issue_mbox_cmd()
3512 READ_SLIM_COPY(hba, (uint32_t *)mb, in emlxs_sli3_issue_mbox_cmd()
3523 if (hba->flag & FC_SLIM2_MODE) { in emlxs_sli3_issue_mbox_cmd()
3525 hba->sli.sli3.slim2.dma_handle, offset_ext, in emlxs_sli3_issue_mbox_cmd()
3531 READ_SLIM_COPY(hba, in emlxs_sli3_issue_mbox_cmd()
3556 (void) (mbq->mbox_cmpl)(hba, mbq); in emlxs_sli3_issue_mbox_cmd()
3561 WRITE_CSR_REG(hba, FC_HA_REG(hba), HA_MBATT); in emlxs_sli3_issue_mbox_cmd()
3564 emlxs_mb_fini(hba, NULL, mb->mbxStatus); in emlxs_sli3_issue_mbox_cmd()
3581 emlxs_hba_t *hba = HBA; in emlxs_sli3_prep_fct_iocb() local
3641 if (hba->state >= FC_LINK_UP) { in emlxs_sli3_prep_fct_iocb()
3655 cmd_sbp->ticks = hba->timer_tics + pkt->pkt_timeout + in emlxs_sli3_prep_fct_iocb()
3681 if (hba->sli_mode < 3) { in emlxs_sli3_prep_fct_iocb()
3701 cmd_sbp->ticks = hba->timer_tics + pkt->pkt_timeout + in emlxs_sli3_prep_fct_iocb()
3732 ((2 * hba->fc_ratov) < 60) ? 60 : (2 * hba->fc_ratov); in emlxs_sli3_prep_fct_iocb()
3738 hba->timer_tics + timeout + ((timeout > 0xff) ? 0 : 10); in emlxs_sli3_prep_fct_iocb()
3760 if ((hba->sli_mode == EMLXS_HBA_SLI3_MODE) && in emlxs_sli3_prep_fct_iocb()
3777 emlxs_hba_t *hba = HBA; in emlxs_sli3_prep_fcp_iocb() local
3788 cp = &hba->chan[FC_FCP_RING]; in emlxs_sli3_prep_fcp_iocb()
3872 emlxs_hba_t *hba = HBA; in emlxs_sli3_prep_ip_iocb() local
3882 cp = &hba->chan[FC_IP_RING]; in emlxs_sli3_prep_ip_iocb()
3943 if (hba->sli_mode == EMLXS_HBA_SLI3_MODE) { in emlxs_sli3_prep_ip_iocb()
3944 if (hba->topology != TOPOLOGY_LOOP) { in emlxs_sli3_prep_ip_iocb()
3977 emlxs_hba_t *hba = HBA; in emlxs_sli3_prep_els_iocb() local
3987 cp = &hba->chan[FC_ELS_RING]; in emlxs_sli3_prep_els_iocb()
4033 if (hba->sli_mode == EMLXS_HBA_SLI3_MODE) { in emlxs_sli3_prep_els_iocb()
4034 if (hba->topology != TOPOLOGY_LOOP) { in emlxs_sli3_prep_els_iocb()
4075 emlxs_hba_t *hba = HBA; in emlxs_sli3_prep_ct_iocb() local
4086 cp = &hba->chan[FC_CT_RING]; in emlxs_sli3_prep_ct_iocb()
4174 emlxs_hba_t *hba = HBA; in emlxs_fct_bde_setup() local
4184 if (hba->sli_mode < EMLXS_HBA_SLI3_MODE) { in emlxs_fct_bde_setup()
4200 emlxs_hba_t *hba = HBA; in emlxs_bde_setup() local
4202 if (hba->sli_mode < EMLXS_HBA_SLI3_MODE) { in emlxs_bde_setup()
4214 emlxs_sli3_poll_intr(emlxs_hba_t *hba) in emlxs_sli3_poll_intr() argument
4220 ha_copy = emlxs_check_attention(hba); in emlxs_sli3_poll_intr()
4227 ha_copy = emlxs_get_attention(hba, -1); in emlxs_sli3_poll_intr()
4230 emlxs_proc_attention(hba, ha_copy); in emlxs_sli3_poll_intr()
4241 emlxs_hba_t *hba = (emlxs_hba_t *)arg1; in emlxs_sli3_msi_intr() local
4256 if (hba->intr_type == DDI_INTR_TYPE_FIXED) { in emlxs_sli3_msi_intr()
4259 if (hba->flag & FC_OFFLINE_MODE) { in emlxs_sli3_msi_intr()
4262 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_msi_intr()
4270 ha_copy = emlxs_get_attention(hba, -1); in emlxs_sli3_msi_intr()
4273 if (hba->intr_unclaimed) { in emlxs_sli3_msi_intr()
4278 hba->intr_unclaimed = 1; in emlxs_sli3_msi_intr()
4280 hba->intr_unclaimed = 0; in emlxs_sli3_msi_intr()
4286 emlxs_proc_attention(hba, ha_copy); in emlxs_sli3_msi_intr()
4298 if (msgid >= hba->intr_count) { in emlxs_sli3_msi_intr()
4307 if (hba->flag & FC_OFFLINE_MODE) { in emlxs_sli3_msi_intr()
4316 if (msgid == 0 && (hba->model_info.chip == EMLXS_ZEPHYR_CHIP)) { in emlxs_sli3_msi_intr()
4317 hc_copy = hba->sli.sli3.hc_copy & ~hba->intr_mask; in emlxs_sli3_msi_intr()
4318 WRITE_CSR_REG(hba, FC_HC_REG(hba), hc_copy); in emlxs_sli3_msi_intr()
4323 ha_copy = emlxs_get_attention(hba, msgid); in emlxs_sli3_msi_intr()
4328 emlxs_proc_attention(hba, ha_copy); in emlxs_sli3_msi_intr()
4333 WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy); in emlxs_sli3_msi_intr()
4336 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_msi_intr()
4352 emlxs_hba_t *hba = (emlxs_hba_t *)arg; in emlxs_sli3_intx_intr() local
4357 if (hba->flag & FC_OFFLINE_MODE) { in emlxs_sli3_intx_intr()
4360 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_intx_intr()
4368 ha_copy = emlxs_get_attention(hba, -1); in emlxs_sli3_intx_intr()
4371 if (hba->intr_unclaimed) { in emlxs_sli3_intx_intr()
4376 hba->intr_unclaimed = 1; in emlxs_sli3_intx_intr()
4378 hba->intr_unclaimed = 0; in emlxs_sli3_intx_intr()
4384 emlxs_proc_attention(hba, ha_copy); in emlxs_sli3_intx_intr()
4393 emlxs_get_attention(emlxs_hba_t *hba, int32_t msgid) in emlxs_get_attention() argument
4400 uint32_t mask = hba->sli.sli3.hc_copy; in emlxs_get_attention()
4409 ha_copy2 = READ_CSR_REG(hba, FC_HA_REG(hba)); in emlxs_get_attention()
4412 ha_copy2 &= ~(hba->intr_cond); in emlxs_get_attention()
4418 ha_copy2 = READ_CSR_REG(hba, FC_HA_REG(hba)); in emlxs_get_attention()
4424 ha_copy2 = hba->intr_map[msgid]; in emlxs_get_attention()
4430 ha_copy2 = READ_CSR_REG(hba, FC_HA_REG(hba)); in emlxs_get_attention()
4476 WRITE_CSR_REG(hba, FC_HA_REG(hba), ha_copy2); in emlxs_get_attention()
4481 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_get_attention()
4490 emlxs_proc_attention(emlxs_hba_t *hba, uint32_t ha_copy) in emlxs_proc_attention() argument
4503 if (hba->state < FC_WARM_START) { in emlxs_proc_attention()
4511 if (hba->bus_type == SBUS_FC) { in emlxs_proc_attention()
4512 (void) READ_SBUS_CSR_REG(hba, FC_SHS_REG(hba)); in emlxs_proc_attention()
4518 emlxs_handle_ff_error(hba); in emlxs_proc_attention()
4525 (void) emlxs_handle_mb_event(hba); in emlxs_proc_attention()
4531 emlxs_sli3_handle_link_event(hba); in emlxs_proc_attention()
4537 emlxs_sli3_handle_ring_event(hba, 0, ha_copy); in emlxs_proc_attention()
4543 emlxs_sli3_handle_ring_event(hba, 1, ha_copy); in emlxs_proc_attention()
4549 emlxs_sli3_handle_ring_event(hba, 2, ha_copy); in emlxs_proc_attention()
4555 emlxs_sli3_handle_ring_event(hba, 3, ha_copy); in emlxs_proc_attention()
4558 if (hba->bus_type == SBUS_FC) { in emlxs_proc_attention()
4559 WRITE_SBUS_CSR_REG(hba, FC_SHS_REG(hba), SBUS_STAT_IP); in emlxs_proc_attention()
4563 hba->heartbeat_flag = 1; in emlxs_proc_attention()
4566 if (hba->bus_type == SBUS_FC) { in emlxs_proc_attention()
4568 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.sbus_csr_handle); in emlxs_proc_attention()
4584 emlxs_handle_ff_error(emlxs_hba_t *hba) in emlxs_handle_ff_error() argument
4593 status = READ_CSR_REG(hba, FC_HS_REG(hba)); in emlxs_handle_ff_error()
4596 WRITE_CSR_REG(hba, FC_HA_REG(hba), HA_ERATT); in emlxs_handle_ff_error()
4603 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_handle_ff_error()
4604 (void) emlxs_offline(hba, 1); in emlxs_handle_ff_error()
4607 READ_CSR_REG(hba, FC_HS_REG(hba)); in emlxs_handle_ff_error()
4618 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_handle_ff_error()
4619 emlxs_thread_spawn(hba, emlxs_shutdown_thread, NULL, NULL); in emlxs_handle_ff_error()
4629 READ_SLIM_ADDR(hba, in emlxs_handle_ff_error()
4630 ((volatile uint8_t *)hba->sli.sli3.slim_addr + 0xb0)); in emlxs_handle_ff_error()
4635 hba->temperature = status1; in emlxs_handle_ff_error()
4636 hba->flag |= FC_OVERTEMP_EVENT; in emlxs_handle_ff_error()
4638 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_handle_ff_error()
4639 emlxs_thread_spawn(hba, emlxs_shutdown_thread, in emlxs_handle_ff_error()
4644 READ_SLIM_ADDR(hba, in emlxs_handle_ff_error()
4645 ((volatile uint8_t *)hba->sli.sli3.slim_addr + 0xa8)); in emlxs_handle_ff_error()
4647 READ_SLIM_ADDR(hba, in emlxs_handle_ff_error()
4648 ((volatile uint8_t *)hba->sli.sli3.slim_addr + 0xac)); in emlxs_handle_ff_error()
4655 EMLXS_STATE_CHANGE(hba, FC_ERROR); in emlxs_handle_ff_error()
4658 emlxs_thread_spawn(hba, emlxs_restart_thread, in emlxs_handle_ff_error()
4661 emlxs_thread_spawn(hba, emlxs_shutdown_thread, in emlxs_handle_ff_error()
4669 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.slim_acc_handle); in emlxs_handle_ff_error()
4670 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_handle_ff_error()
4684 emlxs_sli3_handle_link_event(emlxs_hba_t *hba) in emlxs_sli3_handle_link_event() argument
4696 emlxs_linkdown(hba); in emlxs_sli3_handle_link_event()
4699 if ((mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX))) { in emlxs_sli3_handle_link_event()
4701 if (emlxs_mb_read_la(hba, mbq) == 0) { in emlxs_sli3_handle_link_event()
4702 rc = emlxs_sli3_issue_mbox_cmd(hba, mbq, in emlxs_sli3_handle_link_event()
4705 emlxs_mem_put(hba, MEM_MBOX, in emlxs_sli3_handle_link_event()
4714 WRITE_CSR_REG(hba, FC_HA_REG(hba), HA_LATT); in emlxs_sli3_handle_link_event()
4718 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_handle_link_event()
4723 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_sli3_handle_link_event()
4736 emlxs_sli3_handle_ring_event(emlxs_hba_t *hba, int32_t ring_no, in emlxs_sli3_handle_ring_event() argument
4740 SLIM2 *slim2p = (SLIM2 *)hba->sli.sli3.slim2.virt; in emlxs_sli3_handle_ring_event()
4758 rp = &hba->sli.sli3.ring[ring_no]; in emlxs_sli3_handle_ring_event()
4777 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, 4, in emlxs_sli3_handle_ring_event()
4788 (rp->fc_rspidx * hba->sli.sli3.iocb_rsp_size))); in emlxs_sli3_handle_ring_event()
4793 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, in emlxs_sli3_handle_ring_event()
4794 hba->sli.sli3.iocb_rsp_size, DDI_DMA_SYNC_FORKERNEL); in emlxs_sli3_handle_ring_event()
4886 (uint8_t *)iocbq, hba->sli.sli3.iocb_rsp_size); in emlxs_sli3_handle_ring_event()
4921 atomic_dec_32(&hba->io_active); in emlxs_sli3_handle_ring_event()
4931 (uint8_t *)iocbq, hba->sli.sli3.iocb_rsp_size); in emlxs_sli3_handle_ring_event()
4957 (uint8_t *)iocbq, hba->sli.sli3.iocb_rsp_size); in emlxs_sli3_handle_ring_event()
4969 emlxs_proc_channel_event(hba, cp, iocbq); in emlxs_sli3_handle_ring_event()
4996 if (hba->bus_type == SBUS_FC) { in emlxs_sli3_handle_ring_event()
5005 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_sli3_handle_ring_event()
5009 (void *)((char *)hba->sli.sli3.slim_addr + in emlxs_sli3_handle_ring_event()
5010 hba->sli.sli3.hgp_ring_offset + (((channel_no * 2) + in emlxs_sli3_handle_ring_event()
5012 WRITE_SLIM_ADDR(hba, (volatile uint32_t *)ioa2, in emlxs_sli3_handle_ring_event()
5016 EMLXS_CHK_ACC_HANDLE(hba, in emlxs_sli3_handle_ring_event()
5017 hba->sli.sli3.slim_acc_handle); in emlxs_sli3_handle_ring_event()
5029 WRITE_CSR_REG(hba, FC_CA_REG(hba), chipatt); in emlxs_sli3_handle_ring_event()
5033 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_handle_ring_event()
5040 if ((reg & HA_R0CE_RSP) || hba->channel_tx_count) { in emlxs_sli3_handle_ring_event()
5044 emlxs_sli3_issue_iocb_cmd(hba, cp, 0); in emlxs_sli3_handle_ring_event()
5055 emlxs_handle_rcv_seq(emlxs_hba_t *hba, CHANNEL *cp, IOCBQ *iocbq) in emlxs_handle_rcv_seq() argument
5074 rp = &hba->sli.sli3.ring[channelno]; in emlxs_handle_rcv_seq()
5154 if (hba->flag & FC_HBQ_ENABLED) { in emlxs_handle_rcv_seq()
5166 hbq = &hba->sli.sli3.hbq_table[hbq_id]; in emlxs_handle_rcv_seq()
5174 mp = hba->sli.sli3.hbq_table[hbq_id].HBQ_PostBufs[hbqe_tag]; in emlxs_handle_rcv_seq()
5189 mp = emlxs_mem_get_vaddr(hba, rp, bdeAddr); in emlxs_handle_rcv_seq()
5202 if (emlxs_fm_check_dma_handle(hba, mp->dma_handle) in emlxs_handle_rcv_seq()
5221 if (hba->flag & FC_NPIV_ENABLED) { in emlxs_handle_rcv_seq()
5223 if (vpi >= hba->vpi_max) { in emlxs_handle_rcv_seq()
5303 if (hba->sli_mode == EMLXS_HBA_SLI3_MODE) { in emlxs_handle_rcv_seq()
5325 word[4], word[5], word[6], word[7], hba->state, hba->flag); in emlxs_handle_rcv_seq()
5329 if (hba->flag & FC_HBQ_ENABLED) { in emlxs_handle_rcv_seq()
5337 emlxs_update_HBQ_index(hba, hbq_id); in emlxs_handle_rcv_seq()
5341 emlxs_mem_put(hba, buf_type, (void *)mp); in emlxs_handle_rcv_seq()
5345 (void) emlxs_post_buffer(hba, rp, 1); in emlxs_handle_rcv_seq()
5356 emlxs_sli3_issue_iocb(emlxs_hba_t *hba, RING *rp, IOCBQ *iocbq) in emlxs_sli3_issue_iocb() argument
5385 atomic_inc_32(&hba->io_active); in emlxs_sli3_issue_iocb()
5412 (rp->fc_cmdidx * hba->sli.sli3.iocb_cmd_size))); in emlxs_sli3_issue_iocb()
5416 hba->sli.sli3.iocb_cmd_size); in emlxs_sli3_issue_iocb()
5420 - (uint64_t)((unsigned long)hba->sli.sli3.slim2.virt)); in emlxs_sli3_issue_iocb()
5421 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, in emlxs_sli3_issue_iocb()
5422 hba->sli.sli3.iocb_cmd_size, DDI_DMA_SYNC_FORDEV); in emlxs_sli3_issue_iocb()
5431 emlxs_mem_put(hba, MEM_IOCB, (void *)iocbq); in emlxs_sli3_issue_iocb()
5445 emlxs_sli3_hba_kill(emlxs_hba_t *hba) in emlxs_sli3_hba_kill() argument
5463 if (hba->flag & FC_INTERLOCKED) { in emlxs_sli3_hba_kill()
5464 EMLXS_STATE_CHANGE_LOCKED(hba, FC_KILLED); in emlxs_sli3_hba_kill()
5473 if (hba->mbox_queue_flag == 0) { in emlxs_sli3_hba_kill()
5482 if (hba->mbox_queue_flag != 0) { in emlxs_sli3_hba_kill()
5489 hba->flag |= FC_INTERLOCKED; in emlxs_sli3_hba_kill()
5490 hba->mbox_queue_flag = 1; in emlxs_sli3_hba_kill()
5493 hba->sli.sli3.hc_copy = 0; in emlxs_sli3_hba_kill()
5494 WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy); in emlxs_sli3_hba_kill()
5495 WRITE_CSR_REG(hba, FC_HA_REG(hba), 0xffffffff); in emlxs_sli3_hba_kill()
5497 mb2 = FC_SLIM2_MAILBOX(hba); in emlxs_sli3_hba_kill()
5498 mb1 = FC_SLIM1_MAILBOX(hba); in emlxs_sli3_hba_kill()
5501 if (!(hba->flag & FC_SLIM2_MODE)) { in emlxs_sli3_hba_kill()
5518 WRITE_SLIM_ADDR(hba, (((volatile uint32_t *)mb1) + 1), value); in emlxs_sli3_hba_kill()
5519 WRITE_SLIM_ADDR(hba, (((volatile uint32_t *)mb1)), *word0); in emlxs_sli3_hba_kill()
5528 - (uint64_t)((unsigned long)hba->sli.sli3.slim2.virt)); in emlxs_sli3_hba_kill()
5533 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, size, in emlxs_sli3_hba_kill()
5537 WRITE_CSR_REG(hba, FC_CA_REG(hba), CA_MBATT); in emlxs_sli3_hba_kill()
5542 value = READ_SLIM_ADDR(hba, (((volatile uint32_t *)mb1) + 1)); in emlxs_sli3_hba_kill()
5555 READ_SLIM_ADDR(hba, ((volatile uint32_t *)mb1)); in emlxs_sli3_hba_kill()
5588 WRITE_SLIM_ADDR(hba, (((volatile uint32_t *)mb1) + 1), value); in emlxs_sli3_hba_kill()
5589 WRITE_SLIM_ADDR(hba, ((volatile uint32_t *)mb1), *word0); in emlxs_sli3_hba_kill()
5592 WRITE_CSR_REG(hba, FC_CA_REG(hba), CA_MBATT); in emlxs_sli3_hba_kill()
5597 value = READ_SLIM_ADDR(hba, (((volatile uint32_t *)mb1) + 1)); in emlxs_sli3_hba_kill()
5610 READ_SLIM_ADDR(hba, ((volatile uint32_t *)mb1)); in emlxs_sli3_hba_kill()
5643 ha_copy = READ_CSR_REG(hba, FC_HA_REG(hba)); in emlxs_sli3_hba_kill()
5662 hba->mbox_queue_flag = 0; in emlxs_sli3_hba_kill()
5664 EMLXS_STATE_CHANGE_LOCKED(hba, FC_KILLED); in emlxs_sli3_hba_kill()
5668 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.slim_acc_handle); in emlxs_sli3_hba_kill()
5669 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_hba_kill()
5680 emlxs_sli3_hba_kill4quiesce(emlxs_hba_t *hba) in emlxs_sli3_hba_kill4quiesce() argument
5693 hba->sli.sli3.hc_copy = 0; in emlxs_sli3_hba_kill4quiesce()
5694 WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy); in emlxs_sli3_hba_kill4quiesce()
5695 WRITE_CSR_REG(hba, FC_HA_REG(hba), 0xffffffff); in emlxs_sli3_hba_kill4quiesce()
5697 mb2 = FC_SLIM2_MAILBOX(hba); in emlxs_sli3_hba_kill4quiesce()
5698 mb1 = FC_SLIM1_MAILBOX(hba); in emlxs_sli3_hba_kill4quiesce()
5707 WRITE_SLIM_ADDR(hba, (((volatile uint32_t *)mb1) + 1), value); in emlxs_sli3_hba_kill4quiesce()
5708 WRITE_SLIM_ADDR(hba, (((volatile uint32_t *)mb1)), *word0); in emlxs_sli3_hba_kill4quiesce()
5717 - (uint64_t)((unsigned long)hba->sli.sli3.slim2.virt)); in emlxs_sli3_hba_kill4quiesce()
5722 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, size, in emlxs_sli3_hba_kill4quiesce()
5726 WRITE_CSR_REG(hba, FC_CA_REG(hba), CA_MBATT); in emlxs_sli3_hba_kill4quiesce()
5731 value = READ_SLIM_ADDR(hba, (((volatile uint32_t *)mb1) + 1)); in emlxs_sli3_hba_kill4quiesce()
5742 READ_SLIM_ADDR(hba, ((volatile uint32_t *)mb1)); in emlxs_sli3_hba_kill4quiesce()
5752 EMLXS_STATE_CHANGE_LOCKED(hba, FC_KILLED); in emlxs_sli3_hba_kill4quiesce()
5756 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.slim_acc_handle); in emlxs_sli3_hba_kill4quiesce()
5757 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_hba_kill4quiesce()
5776 emlxs_handle_mb_event(emlxs_hba_t *hba) in emlxs_handle_mb_event() argument
5792 switch (hba->mbox_queue_flag) { in emlxs_handle_mb_event()
5809 mbq = (MAILBOXQ *)hba->mbox_mbq; in emlxs_handle_mb_event()
5825 if (hba->mbox_timer) { in emlxs_handle_mb_event()
5826 hba->mbox_timer = 0; in emlxs_handle_mb_event()
5829 mbq = (MAILBOXQ *)hba->mbox_mbq; in emlxs_handle_mb_event()
5856 if (hba->flag & FC_SLIM2_MODE) { in emlxs_handle_mb_event()
5857 mbox = FC_SLIM2_MAILBOX(hba); in emlxs_handle_mb_event()
5859 - (uint64_t)((unsigned long)hba->sli.sli3.slim2.virt)); in emlxs_handle_mb_event()
5861 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, in emlxs_handle_mb_event()
5866 mbox = FC_SLIM1_MAILBOX(hba); in emlxs_handle_mb_event()
5867 *word0 = READ_SLIM_ADDR(hba, ((volatile uint32_t *)mbox)); in emlxs_handle_mb_event()
5882 if (hba->flag & FC_SLIM2_MODE) { in emlxs_handle_mb_event()
5883 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_handle_mb_event()
5889 READ_SLIM_ADDR(hba, ((volatile uint32_t *)mbox)); in emlxs_handle_mb_event()
5894 if (hba->flag & FC_SLIM2_MODE) { in emlxs_handle_mb_event()
5895 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, offset, in emlxs_handle_mb_event()
5901 READ_SLIM_COPY(hba, (uint32_t *)mb, (uint32_t *)mbox, in emlxs_handle_mb_event()
5911 if (hba->flag & FC_SLIM2_MODE) { in emlxs_handle_mb_event()
5912 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_handle_mb_event()
5918 READ_SLIM_COPY(hba, (uint32_t *)mbq->extbuf, in emlxs_handle_mb_event()
5925 if (!(hba->flag & FC_SLIM2_MODE)) { in emlxs_handle_mb_event()
5927 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.slim_acc_handle); in emlxs_handle_mb_event()
5941 hba->heartbeat_active = 0; in emlxs_handle_mb_event()
5945 if (hba->mbox_queue_flag == MBX_SLEEP) { in emlxs_handle_mb_event()
5975 rc = (mbq->mbox_cmpl)(hba, mbq); in emlxs_handle_mb_event()
5985 emlxs_mb_fini(hba, mb, mb->mbxStatus); in emlxs_handle_mb_event()
5987 mbq = (MAILBOXQ *)emlxs_mb_get(hba); in emlxs_handle_mb_event()
5990 rc = emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_NOWAIT, 0); in emlxs_handle_mb_event()
5992 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_handle_mb_event()
6001 emlxs_sli3_timer(emlxs_hba_t *hba) in emlxs_sli3_timer() argument
6005 emlxs_sli3_timer_check_mbox(hba); in emlxs_sli3_timer()
6011 emlxs_sli3_timer_check_mbox(emlxs_hba_t *hba) in emlxs_sli3_timer_check_mbox() argument
6028 if (!hba->mbox_timer || (hba->timer_tics < hba->mbox_timer)) { in emlxs_sli3_timer_check_mbox()
6034 ha_copy = emlxs_check_attention(hba); in emlxs_sli3_timer_check_mbox()
6037 hba->mbox_timer = 0; in emlxs_sli3_timer_check_mbox()
6039 emlxs_handle_ff_error(hba); in emlxs_sli3_timer_check_mbox()
6045 if (hba->mbox_queue_flag) { in emlxs_sli3_timer_check_mbox()
6047 if (hba->flag & FC_SLIM2_MODE) { in emlxs_sli3_timer_check_mbox()
6048 mb = FC_SLIM2_MAILBOX(hba); in emlxs_sli3_timer_check_mbox()
6051 ((unsigned long)hba->sli.sli3.slim2.virt)); in emlxs_sli3_timer_check_mbox()
6053 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, in emlxs_sli3_timer_check_mbox()
6058 mb = FC_SLIM1_MAILBOX(hba); in emlxs_sli3_timer_check_mbox()
6060 READ_SLIM_ADDR(hba, ((volatile uint32_t *)mb)); in emlxs_sli3_timer_check_mbox()
6063 EMLXS_CHK_ACC_HANDLE(hba, in emlxs_sli3_timer_check_mbox()
6064 hba->sli.sli3.slim_acc_handle); in emlxs_sli3_timer_check_mbox()
6074 uint32_t ha_copy = emlxs_check_attention(hba); in emlxs_sli3_timer_check_mbox()
6079 hba->sli.sli3.hc_copy, ha_copy); in emlxs_sli3_timer_check_mbox()
6083 (void) emlxs_handle_mb_event(hba); in emlxs_sli3_timer_check_mbox()
6090 hba->mbox_timer = 0; in emlxs_sli3_timer_check_mbox()
6093 mb = (MAILBOX *)hba->mbox_mbq; in emlxs_sli3_timer_check_mbox()
6098 switch (hba->mbox_queue_flag) { in emlxs_sli3_timer_check_mbox()
6123 mb, hba->mbox_queue_flag); in emlxs_sli3_timer_check_mbox()
6130 hba->flag |= FC_MBOX_TIMEOUT; in emlxs_sli3_timer_check_mbox()
6131 EMLXS_STATE_CHANGE_LOCKED(hba, FC_ERROR); in emlxs_sli3_timer_check_mbox()
6137 emlxs_mb_fini(hba, NULL, MBX_TIMEOUT); in emlxs_sli3_timer_check_mbox()
6140 emlxs_thread_spawn(hba, emlxs_shutdown_thread, NULL, NULL); in emlxs_sli3_timer_check_mbox()
6151 emlxs_mb_config_port(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t sli_mode, in emlxs_mb_config_port() argument
6183 pcb = hba->sli.sli3.slim2.phys + in emlxs_mb_config_port()
6193 hba->sli_mode = sli_mode; in emlxs_mb_config_port()
6194 hba->vpi_max = 0; in emlxs_mb_config_port()
6195 hba->flag &= ~FC_NPIV_ENABLED; in emlxs_mb_config_port()
6204 if (hba->model_info.chip >= EMLXS_SATURN_CHIP) { in emlxs_mb_config_port()
6226 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.type = TYPE_NATIVE_SLI2; in emlxs_mb_config_port()
6227 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.feature = FEATURE_INITIAL_SLI2; in emlxs_mb_config_port()
6228 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.maxRing = in emlxs_mb_config_port()
6229 (hba->sli.sli3.ring_count - 1); in emlxs_mb_config_port()
6230 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.mailBoxSize = in emlxs_mb_config_port()
6233 mbx = hba->sli.sli3.slim2.phys + in emlxs_mb_config_port()
6235 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.mbAddrHigh = PADDR_HI(mbx); in emlxs_mb_config_port()
6236 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.mbAddrLow = PADDR_LO(mbx); in emlxs_mb_config_port()
6263 hba->sli.sli3.hgp_ring_offset = 0x80; in emlxs_mb_config_port()
6264 hba->sli.sli3.hgp_hbq_offset = 0xC0; in emlxs_mb_config_port()
6266 hba->sli.sli3.iocb_cmd_size = SLI3_IOCB_CMD_SIZE; in emlxs_mb_config_port()
6267 hba->sli.sli3.iocb_rsp_size = SLI3_IOCB_RSP_SIZE; in emlxs_mb_config_port()
6271 hba->sli.sli3.hgp_ring_offset = 0xC0; in emlxs_mb_config_port()
6272 hba->sli.sli3.hgp_hbq_offset = 0; in emlxs_mb_config_port()
6274 hba->sli.sli3.iocb_cmd_size = SLI2_IOCB_CMD_SIZE; in emlxs_mb_config_port()
6275 hba->sli.sli3.iocb_rsp_size = SLI2_IOCB_RSP_SIZE; in emlxs_mb_config_port()
6279 if (hba->bus_type == SBUS_FC) { in emlxs_mb_config_port()
6280 hgp = hba->sli.sli3.slim2.phys + in emlxs_mb_config_port()
6282 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.hgpAddrHigh = in emlxs_mb_config_port()
6284 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.hgpAddrLow = in emlxs_mb_config_port()
6287 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.hgpAddrHigh = in emlxs_mb_config_port()
6288 (uint32_t)ddi_get32(hba->pci_acc_handle, in emlxs_mb_config_port()
6289 (uint32_t *)(hba->pci_addr + PCI_BAR_1_REGISTER)); in emlxs_mb_config_port()
6292 ddi_get32(hba->pci_acc_handle, in emlxs_mb_config_port()
6293 (uint32_t *)(hba->pci_addr + PCI_BAR_0_REGISTER)); in emlxs_mb_config_port()
6295 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.hgpAddrLow = in emlxs_mb_config_port()
6296 (uint32_t)(Laddr + hba->sli.sli3.hgp_ring_offset); in emlxs_mb_config_port()
6300 EMLXS_CHK_ACC_HANDLE(hba, hba->pci_acc_handle); in emlxs_mb_config_port()
6305 pgp = hba->sli.sli3.slim2.phys + in emlxs_mb_config_port()
6307 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.pgpAddrHigh = in emlxs_mb_config_port()
6309 ((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.pgpAddrLow = in emlxs_mb_config_port()
6314 rp = &hba->sli.sli3.ring[i]; in emlxs_mb_config_port()
6315 rdsc = &((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb.rdsc[i]; in emlxs_mb_config_port()
6318 rgp = hba->sli.sli3.slim2.phys + in emlxs_mb_config_port()
6325 (void *)&((SLIM2 *)hba->sli.sli3.slim2.virt)->IOCBs[offset]; in emlxs_mb_config_port()
6326 offset += rdsc->cmdEntries * hba->sli.sli3.iocb_cmd_size; in emlxs_mb_config_port()
6329 rgp = hba->sli.sli3.slim2.phys + in emlxs_mb_config_port()
6336 (void *)&((SLIM2 *)hba->sli.sli3.slim2.virt)->IOCBs[offset]; in emlxs_mb_config_port()
6337 offset += rdsc->rspEntries * hba->sli.sli3.iocb_rsp_size; in emlxs_mb_config_port()
6341 (&((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb), in emlxs_mb_config_port()
6342 (uint8_t *)(&((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb), in emlxs_mb_config_port()
6346 &(((SLIM2 *)hba->sli.sli3.slim2.virt)->pcb)) - in emlxs_mb_config_port()
6347 (uint64_t)((unsigned long)hba->sli.sli3.slim2.virt)); in emlxs_mb_config_port()
6348 EMLXS_MPDATA_SYNC(hba->sli.sli3.slim2.dma_handle, (off_t)offset, in emlxs_mb_config_port()
6357 emlxs_hbq_setup(emlxs_hba_t *hba, uint32_t hbq_id) in emlxs_hbq_setup() argument
6414 hbq = &hba->sli.sli3.hbq_table[hbq_id]; in emlxs_hbq_setup()
6418 if ((mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX)) == 0) { in emlxs_hbq_setup()
6426 if (emlxs_hbq_alloc(hba, hbq_id)) { in emlxs_hbq_setup()
6429 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_hbq_setup()
6455 if ((mp = (MATCHMAP *)emlxs_mem_get(hba, in emlxs_hbq_setup()
6460 emlxs_hbq_free_all(hba, hbq_id); in emlxs_hbq_setup()
6479 emlxs_mb_config_hbq(hba, mbq, hbq_id); in emlxs_hbq_setup()
6480 if (emlxs_sli3_issue_mbox_cmd(hba, mbq, MBX_WAIT, 0) != MBX_SUCCESS) { in emlxs_hbq_setup()
6485 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_hbq_setup()
6486 emlxs_hbq_free_all(hba, hbq_id); in emlxs_hbq_setup()
6491 ioa2 = (void *)((char *)hba->sli.sli3.slim_addr + in emlxs_hbq_setup()
6492 (hba->sli.sli3.hgp_hbq_offset + (hbq_id * sizeof (uint32_t)))); in emlxs_hbq_setup()
6493 WRITE_SLIM_ADDR(hba, (volatile uint32_t *)ioa2, hbq->HBQ_PutIdx); in emlxs_hbq_setup()
6495 hba->sli.sli3.hbq_count++; in emlxs_hbq_setup()
6497 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_hbq_setup()
6501 if (emlxs_fm_check_acc_handle(hba, hba->sli.sli3.slim_acc_handle) in emlxs_hbq_setup()
6505 emlxs_hbq_free_all(hba, hbq_id); in emlxs_hbq_setup()
6516 emlxs_hbq_free_all(emlxs_hba_t *hba, uint32_t hbq_id) in emlxs_hbq_free_all() argument
6552 hbq = &hba->sli.sli3.hbq_table[hbq_id]; in emlxs_hbq_free_all()
6556 emlxs_mem_put(hba, seg, in emlxs_hbq_free_all()
6572 emlxs_mem_free(hba, buf_info); in emlxs_hbq_free_all()
6583 emlxs_update_HBQ_index(emlxs_hba_t *hba, uint32_t hbq_id) in emlxs_update_HBQ_index() argument
6616 hbq = &hba->sli.sli3.hbq_table[hbq_id]; in emlxs_update_HBQ_index()
6624 BE_SWAP32(((SLIM2 *)hba->sli.sli3.slim2.virt)->mbx.us.s2. in emlxs_update_HBQ_index()
6634 ioa2 = (void *)((char *)hba->sli.sli3.slim_addr + in emlxs_update_HBQ_index()
6635 (hba->sli.sli3.hgp_hbq_offset + (hbq_id * sizeof (uint32_t)))); in emlxs_update_HBQ_index()
6637 WRITE_SLIM_ADDR(hba, (volatile uint32_t *)ioa2, status); in emlxs_update_HBQ_index()
6641 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.slim_acc_handle); in emlxs_update_HBQ_index()
6650 emlxs_sli3_enable_intr(emlxs_hba_t *hba) in emlxs_sli3_enable_intr() argument
6661 if (hba->sli.sli3.ring_count >= 4) { in emlxs_sli3_enable_intr()
6665 } else if (hba->sli.sli3.ring_count == 3) { in emlxs_sli3_enable_intr()
6667 } else if (hba->sli.sli3.ring_count == 2) { in emlxs_sli3_enable_intr()
6669 } else if (hba->sli.sli3.ring_count == 1) { in emlxs_sli3_enable_intr()
6673 hba->sli.sli3.hc_copy = status; in emlxs_sli3_enable_intr()
6674 WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy); in emlxs_sli3_enable_intr()
6678 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_enable_intr()
6685 emlxs_enable_latt(emlxs_hba_t *hba) in emlxs_enable_latt() argument
6692 hba->sli.sli3.hc_copy |= HC_LAINT_ENA; in emlxs_enable_latt()
6693 WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy); in emlxs_enable_latt()
6696 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_enable_latt()
6704 emlxs_sli3_disable_intr(emlxs_hba_t *hba, uint32_t att) in emlxs_sli3_disable_intr() argument
6711 hba->sli.sli3.hc_copy = att; in emlxs_sli3_disable_intr()
6712 WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy); in emlxs_sli3_disable_intr()
6715 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_sli3_disable_intr()
6722 emlxs_check_attention(emlxs_hba_t *hba) in emlxs_check_attention() argument
6729 ha_copy = READ_CSR_REG(hba, FC_HA_REG(hba)); in emlxs_check_attention()
6732 EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle); in emlxs_check_attention()
6740 emlxs_sli3_poll_erratt(emlxs_hba_t *hba) in emlxs_sli3_poll_erratt() argument
6744 ha_copy = emlxs_check_attention(hba); in emlxs_sli3_poll_erratt()
6749 emlxs_handle_ff_error(hba); in emlxs_sli3_poll_erratt()
6756 emlxs_sli3_reg_did_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq) in emlxs_sli3_reg_did_mbcmpl() argument
6785 emlxs_mb_retry(hba, mbq); in emlxs_sli3_reg_did_mbcmpl()
6841 if (!(mboxq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX))) { in emlxs_sli3_reg_did_mbcmpl()
6860 rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mboxq, MBX_NOWAIT, 0); in emlxs_sli3_reg_did_mbcmpl()
6865 emlxs_mem_put(hba, MEM_MBOX, (void *)mboxq); in emlxs_sli3_reg_did_mbcmpl()
6880 if (hba->state == FC_READY) { in emlxs_sli3_reg_did_mbcmpl()
6890 (hba->flag & FC_NPIV_ENABLED) && in emlxs_sli3_reg_did_mbcmpl()
6891 (hba->flag & FC_NPIV_SUPPORTED)) { in emlxs_sli3_reg_did_mbcmpl()
6940 emlxs_hba_t *hba = HBA; in emlxs_sli3_reg_did() local
6947 if ((did == 0) && (!(hba->flag & FC_LOOPBACK_MODE))) { in emlxs_sli3_reg_did()
6955 if ((rval = emlxs_mb_check_sparm(hba, param))) { in emlxs_sli3_reg_did()
6964 if (port->node_count >= hba->max_nodes) { in emlxs_sli3_reg_did()
6972 if (!(mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX))) { in emlxs_sli3_reg_did()
6982 if ((mp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BUF)) == 0) { in emlxs_sli3_reg_did()
6983 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_sli3_reg_did()
7009 rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_NOWAIT, 0); in emlxs_sli3_reg_did()
7011 emlxs_mem_put(hba, MEM_BUF, (void *)mp); in emlxs_sli3_reg_did()
7012 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_sli3_reg_did()
7026 emlxs_sli3_unreg_node_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq) in emlxs_sli3_unreg_node_mbcmpl() argument
7065 emlxs_hba_t *hba = HBA; in emlxs_sli3_unreg_node() local
7104 if (!(mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX))) { in emlxs_sli3_unreg_node()
7123 rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_NOWAIT, 0); in emlxs_sli3_unreg_node()
7128 emlxs_mem_put(hba, MEM_MBOX, (void *)mbq); in emlxs_sli3_unreg_node()