Lines Matching full:isp

34  * code for the Qlogic ISP SCSI and FC-SCSI adapters.
55 #include <dev/isp/isp_freebsd.h>
147 isp_change_fw_state(ispsoftc_t *isp, int chan, int state) in isp_change_fw_state() argument
149 fcparam *fcp = FCPARAM(isp, chan); in isp_change_fw_state()
153 isp_prt(isp, ISP_LOGCONFIG|ISP_LOG_SANCFG, in isp_change_fw_state()
160 isp_get_flash_addrs(ispsoftc_t *isp) in isp_get_flash_addrs() argument
162 fcparam *fcp = FCPARAM(isp, 0); in isp_get_flash_addrs()
165 if (IS_28XX(isp)) { in isp_get_flash_addrs()
168 } else if (IS_26XX(isp)) { /* 26xx and 27xx are identical */ in isp_get_flash_addrs()
171 } else if (IS_25XX(isp)) { in isp_get_flash_addrs()
179 r = isp_read_flthdr_2xxx(isp); in isp_get_flash_addrs()
181 isp_read_flt_2xxx(isp); in isp_get_flash_addrs()
183 if (IS_28XX(isp)) { in isp_get_flash_addrs()
185 } else if (IS_26XX(isp)) { in isp_get_flash_addrs()
188 } else if (IS_25XX(isp)) { in isp_get_flash_addrs()
194 fcp->flt_region_nvram += ISP2400_NVRAM_PORT_ADDR(isp->isp_port); in isp_get_flash_addrs()
207 isp_reset(ispsoftc_t *isp, int do_load_defaults) in isp_reset() argument
217 isp->isp_state = ISP_NILSTATE; in isp_reset()
218 ISP_DISABLE_INTS(isp); in isp_reset()
224 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_HOST_INT); in isp_reset()
225 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); in isp_reset()
226 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE); in isp_reset()
228 switch (isp->isp_type) { in isp_reset()
251 ISP_WRITE(isp, BIU2400_CSR, BIU2400_DMA_STOP|(3 << 4)); in isp_reset()
254 val = ISP_READ(isp, BIU2400_CSR); in isp_reset()
260 isp_prt(isp, ISP_LOGERR, "DMA Failed to Stop on Reset"); in isp_reset()
265 ISP_WRITE(isp, BIU2400_CSR, BIU2400_SOFT_RESET|BIU2400_DMA_STOP|(3 << 4)); in isp_reset()
269 val = ISP_READ(isp, OUTMAILBOX0); in isp_reset()
277 isp_prt(isp, ISP_LOGERR, "The ROM code is busy after 50ms."); in isp_reset()
280 isp_prt(isp, ISP_LOGERR, "Board configuration error."); in isp_reset()
283 isp_prt(isp, ISP_LOGERR, "Unknown RISC Status Code 0x%x.", val); in isp_reset()
290 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_RESET); in isp_reset()
291 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_RELEASE); in isp_reset()
292 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RESET); in isp_reset()
299 val = ISP_READ(isp, OUTMAILBOX0); in isp_reset()
307 isp_prt(isp, ISP_LOGERR, "The ROM code is busy after 50ms."); in isp_reset()
310 isp_prt(isp, ISP_LOGERR, "Board configuration error."); in isp_reset()
313 isp_prt(isp, ISP_LOGERR, "Unknown RISC Status Code 0x%x.", val); in isp_reset()
317 isp->isp_reqidx = isp->isp_reqodx = 0; in isp_reset()
318 isp->isp_resodx = 0; in isp_reset()
319 isp->isp_atioodx = 0; in isp_reset()
320 ISP_WRITE(isp, BIU2400_REQINP, 0); in isp_reset()
321 ISP_WRITE(isp, BIU2400_REQOUTP, 0); in isp_reset()
322 ISP_WRITE(isp, BIU2400_RSPINP, 0); in isp_reset()
323 ISP_WRITE(isp, BIU2400_RSPOUTP, 0); in isp_reset()
324 if (!IS_26XX(isp)) { in isp_reset()
325 ISP_WRITE(isp, BIU2400_PRI_REQINP, 0); in isp_reset()
326 ISP_WRITE(isp, BIU2400_PRI_REQOUTP, 0); in isp_reset()
328 ISP_WRITE(isp, BIU2400_ATIO_RSPINP, 0); in isp_reset()
329 ISP_WRITE(isp, BIU2400_ATIO_RSPOUTP, 0); in isp_reset()
342 isp_mboxcmd(isp, &mbs); in isp_reset()
344 isp_prt(isp, ISP_LOGERR, "NOP command failed (%x)", mbs.param[0]); in isp_reset()
362 int nmbox = ISP_NMBOX(isp); in isp_reset()
367 isp_mboxcmd(isp, &mbs); in isp_reset()
373 …isp_prt(isp, ISP_LOGERR, "Register Test Failed at Register %d: should have 0x%04x but got 0x%04x",… in isp_reset()
385 if (ISP_MBOXDMASETUP(isp) != 0) { in isp_reset()
386 isp_prt(isp, ISP_LOGERR, "Cannot setup DMA"); in isp_reset()
414 fcparam *fcp = FCPARAM(isp, 0); in isp_reset()
417 isp_get_flash_addrs(isp); in isp_reset()
429 if (!(isp->isp_confopts & ISP_CFG_NORELOAD)) { in isp_reset()
431 snprintf(fwname, sizeof(fwname), "isp_%04x", isp->isp_did); in isp_reset()
432 isp->isp_osinfo.ispfw = firmware_get(fwname); in isp_reset()
433 if (isp->isp_osinfo.ispfw != NULL) { in isp_reset()
434 isp->isp_mdvec->dv_ispfw = isp->isp_osinfo.ispfw->data; in isp_reset()
435 const uint32_t *ispfwptr = isp->isp_mdvec->dv_ispfw; in isp_reset()
438 isp_prt(isp, ISP_LOGCONFIG, in isp_reset()
444 isp_prt(isp, ISP_LOGCONFIG, in isp_reset()
449 isp_prt(isp, ISP_LOGDEBUG0, in isp_reset()
457 if (IS_27XX(isp)) { in isp_reset()
458 switch (isp_load_risc(isp, 0)) { in isp_reset()
475 if (isp->isp_osinfo.ispfw != NULL) in isp_reset()
481 if (isp->isp_osinfo.ispfw != NULL) in isp_reset()
487 const uint32_t *ptr = isp->isp_mdvec->dv_ispfw; in isp_reset()
493 isp_prt(isp, ISP_LOGDEBUG2, in isp_reset()
504 nw = min(wl, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)) / 4); in isp_reset()
505 cp = isp->isp_rquest; in isp_reset()
507 ISP_IOXPUT_32(isp, ptr[wi + i], &cp[i]); in isp_reset()
508 if (isp_load_ram(isp, cp, la, nw) != 0) { in isp_reset()
509 isp_prt(isp, ISP_LOGERR, in isp_reset()
525 if (isp->isp_osinfo.ispfw != NULL) in isp_reset()
526 firmware_put(isp->isp_osinfo.ispfw, FIRMWARE_UNLOAD); in isp_reset()
528 isp_prt(isp, ISP_LOGCONFIG, in isp_reset()
537 isp_mboxcmd(isp, &mbs); in isp_reset()
539 isp_prt(isp, ISP_LOGERR, "%s: 0x%x", dcrc, in isp_reset()
543 } else if (IS_26XX(isp)) { in isp_reset()
544 isp_prt(isp, ISP_LOGCONFIG, in isp_reset()
547 isp_mboxcmd(isp, &mbs); in isp_reset()
549 isp_prt(isp, ISP_LOGERR, "Flash F/W load failed"); in isp_reset()
563 if (!IS_26XX(isp)) in isp_reset()
566 if (IS_27XX(isp)) in isp_reset()
569 isp_mboxcmd(isp, &mbs); in isp_reset()
573 isp_prt(isp, ISP_LOGDEBUG0, "Firmware ability mask: 0x%x", in isp_reset()
575 if (IS_26XX(isp)) { in isp_reset()
577 isp_prt(isp, ISP_LOGINFO, "Maximum supported speed: %s", in isp_reset()
582 if (IS_28XX(isp) && (mbs.param[5] & 0x400)) { in isp_reset()
583 isp_prt(isp, ISP_LOGINFO, in isp_reset()
592 isp_mboxcmd(isp, &mbs); in isp_reset()
597 isp->isp_fwrev[0] = mbs.param[1]; in isp_reset()
598 isp->isp_fwrev[1] = mbs.param[2]; in isp_reset()
599 isp->isp_fwrev[2] = mbs.param[3]; in isp_reset()
600 isp->isp_fwattr = mbs.param[6]; in isp_reset()
601 isp->isp_fwattr_h = mbs.param[15]; in isp_reset()
602 if (isp->isp_fwattr & ISP_FW_ATTR_EXTNDED) { in isp_reset()
603 isp->isp_fwattr_ext[0] = mbs.param[16]; in isp_reset()
604 isp->isp_fwattr_ext[1] = mbs.param[17]; in isp_reset()
607 isp_prt(isp, ISP_LOGCONFIG, "Board Type %s, Chip Revision 0x%x, %s F/W Revision %d.%d.%d", in isp_reset()
608 btype, isp->isp_revision, dodnld ? "loaded" : "resident", in isp_reset()
609 isp->isp_fwrev[0], isp->isp_fwrev[1], isp->isp_fwrev[2]); in isp_reset()
611 "%u.%u.%u", isp->isp_fwrev[0], isp->isp_fwrev[1], in isp_reset()
612 isp->isp_fwrev[2]); in isp_reset()
613 if (!dodnld && !IS_26XX(isp)) in isp_reset()
617 fwt = isp->isp_fwattr; in isp_reset()
618 buf = FCPARAM(isp, 0)->isp_scanscratch; in isp_reset()
673 isp_prt(isp, ISP_LOGCONFIG, "%s", buf); in isp_reset()
675 fwt = isp->isp_fwattr_h; in isp_reset()
676 buf = FCPARAM(isp, 0)->isp_scanscratch; in isp_reset()
718 isp_prt(isp, ISP_LOGCONFIG, "%s", buf); in isp_reset()
720 fwt = isp->isp_fwattr_ext[0]; in isp_reset()
721 buf = FCPARAM(isp, 0)->isp_scanscratch; in isp_reset()
747 isp_prt(isp, ISP_LOGCONFIG, "%s", buf); in isp_reset()
749 fwt = isp->isp_fwattr_ext[1]; in isp_reset()
750 buf = FCPARAM(isp, 0)->isp_scanscratch; in isp_reset()
756 isp_prt(isp, ISP_LOGCONFIG, "%s", buf); in isp_reset()
764 isp_mboxcmd(isp, &mbs); in isp_reset()
767 isp->isp_maxcmds = MIN(mbs.param[3], ISP_HANDLE_MAX - ISP_HANDLE_RESERVE); in isp_reset()
768 isp_prt(isp, ISP_LOGCONFIG, "%d max I/O command limit set", isp->isp_maxcmds); in isp_reset()
775 if (isp->isp_nchan > 1) { in isp_reset()
776 if (!ISP_CAP_MULTI_ID(isp)) { in isp_reset()
777 isp_prt(isp, ISP_LOGWARN, "non-MULTIID f/w loaded, " in isp_reset()
778 "only can enable 1 of %d channels", isp->isp_nchan); in isp_reset()
779 isp->isp_nchan = 1; in isp_reset()
780 } else if (!ISP_CAP_VP0(isp)) { in isp_reset()
781 isp_prt(isp, ISP_LOGWARN, "We can not use MULTIID " in isp_reset()
783 isp->isp_nchan = 1; in isp_reset()
790 if (ISP_MBOXDMASETUP(isp) != 0) { in isp_reset()
791 isp_prt(isp, ISP_LOGERR, "Cannot setup DMA"); in isp_reset()
798 if (ISP_IRQSETUP(isp) != 0) { in isp_reset()
799 isp_prt(isp, ISP_LOGERR, "Cannot setup IRQ"); in isp_reset()
802 ISP_ENABLE_INTS(isp); in isp_reset()
804 for (i = 0; i < isp->isp_nchan; i++) in isp_reset()
805 isp_change_fw_state(isp, i, FW_CONFIG_WAIT); in isp_reset()
807 isp->isp_state = ISP_RESETSTATE; in isp_reset()
815 for (i = 0; i < isp->isp_nchan; i++) in isp_reset()
816 isp_setdfltfcparm(isp, i); in isp_reset()
824 isp_stop(ispsoftc_t *isp) in isp_stop() argument
828 isp->isp_state = ISP_NILSTATE; in isp_stop()
838 isp_mboxcmd(isp, &mbs); in isp_stop()
846 isp_shutdown(ispsoftc_t *isp) in isp_shutdown() argument
849 if (isp->isp_state >= ISP_RESETSTATE) in isp_shutdown()
850 isp_stop(isp); in isp_shutdown()
851 ISP_DISABLE_INTS(isp); in isp_shutdown()
852 ISP_WRITE(isp, BIU2400_ICR, 0); in isp_shutdown()
853 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE); in isp_shutdown()
862 isp_init(ispsoftc_t *isp) in isp_init() argument
873 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_init()
874 fcp = FCPARAM(isp, chan); in isp_init()
879 if (chan == isp->isp_nchan) { in isp_init()
880 isp_prt(isp, ISP_LOG_WARN1, "all %d channels with role 'none'", chan); in isp_init()
884 isp->isp_state = ISP_INITSTATE; in isp_init()
889 fcp = FCPARAM(isp, 0); in isp_init()
896 isp_mboxcmd(isp, &mbs); in isp_init()
905 if (isp->isp_nchan > 1 && ISP_CAP_VP0(isp)) { in isp_init()
920 icbp->icb_maxfrmlen = DEFAULT_FRAMESIZE(isp); in isp_init()
923 if (IS_28XX(isp)) in isp_init()
926 isp_prt(isp, ISP_LOGERR, in isp_init()
928 DEFAULT_FRAMESIZE(isp), icbp->icb_maxfrmlen); in isp_init()
931 if (!IS_26XX(isp)) in isp_init()
940 icbp->icb_xchgcnt = MIN(isp->isp_maxcmds / 2, ATPDPSIZE); in isp_init()
942 icbp->icb_xchgcnt = isp->isp_maxcmds; in isp_init()
946 ownloopid = (isp->isp_confopts & ISP_CFG_OWNLOOPID) != 0; in isp_init()
956 if (isp->isp_confopts & ISP_CFG_NOFCTAPE) { in isp_init()
959 if (isp->isp_confopts & ISP_CFG_FCTAPE) { in isp_init()
963 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_init()
965 FCPARAM(isp, chan)->fctape_enabled = 1; in isp_init()
967 FCPARAM(isp, chan)->fctape_enabled = 0; in isp_init()
970 switch (isp->isp_confopts & ISP_CFG_PORT_PREF) { in isp_init()
1007 …isp_prt(isp, ISP_LOGWARN, "bad value %x in fwopt2 timer field", icbp->icb_fwoptions2 & ICB2400_OPT… in isp_init()
1012 if (IS_26XX(isp)) { in isp_init()
1021 if (isp->isp_confopts & ISP_CFG_1GB) { in isp_init()
1024 } else if (isp->isp_confopts & ISP_CFG_2GB) { in isp_init()
1027 } else if (isp->isp_confopts & ISP_CFG_4GB) { in isp_init()
1030 } else if (isp->isp_confopts & ISP_CFG_8GB) { in isp_init()
1033 } else if (isp->isp_confopts & ISP_CFG_16GB) { in isp_init()
1036 } else if (isp->isp_confopts & ISP_CFG_32GB) { in isp_init()
1039 } else if (isp->isp_confopts & ISP_CFG_64GB) { in isp_init()
1052 if (isp->isp_type <= ISP_HA_FC_2500) in isp_init()
1056 if (isp->isp_type <= ISP_HA_FC_2400) in isp_init()
1074 …isp_prt(isp, ISP_LOGDEBUG1, "Setting ICB Node 0x%08x%08x Port 0x%08x%08x", ((uint32_t) (fcp->isp_w… in isp_init()
1079 …isp_prt(isp, ISP_LOGDEBUG1, "Setting ICB Node to be same as Port 0x%08x%08x", ((uint32_t) (fcp->is… in isp_init()
1081 isp_prt(isp, ISP_LOGERR, "No valid WWNs to use"); in isp_init()
1084 icbp->icb_rspnsin = isp->isp_resodx; in isp_init()
1085 icbp->icb_rqstout = isp->isp_reqidx; in isp_init()
1088 icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp); in isp_init()
1090 isp_prt(isp, ISP_LOGERR, "bad request queue length %d", icbp->icb_rqstqlen); in isp_init()
1093 icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp); in isp_init()
1095 isp_prt(isp, ISP_LOGERR, "bad result queue length %d", in isp_init()
1099 icbp->icb_rqstaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_rquest_dma); in isp_init()
1100 icbp->icb_rqstaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_rquest_dma); in isp_init()
1101 icbp->icb_rqstaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_rquest_dma); in isp_init()
1102 icbp->icb_rqstaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_rquest_dma); in isp_init()
1104 icbp->icb_respaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_result_dma); in isp_init()
1105 icbp->icb_respaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_result_dma); in isp_init()
1106 icbp->icb_respaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_result_dma); in isp_init()
1107 icbp->icb_respaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_result_dma); in isp_init()
1111 icbp->icb_atio_in = isp->isp_atioodx; in isp_init()
1112 icbp->icb_atioqlen = ATIO_QUEUE_LEN(isp); in isp_init()
1114 isp_prt(isp, ISP_LOGERR, "bad ATIO queue length %d", icbp->icb_atioqlen); in isp_init()
1117 icbp->icb_atioqaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_atioq_dma); in isp_init()
1118 icbp->icb_atioqaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_atioq_dma); in isp_init()
1119 icbp->icb_atioqaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_atioq_dma); in isp_init()
1120 icbp->icb_atioqaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_atioq_dma); in isp_init()
1121 …isp_prt(isp, ISP_LOGDEBUG0, "isp_init: atioq %04x%04x%04x%04x", DMA_WD3(isp->isp_atioq_dma), DMA_W… in isp_init()
1122 DMA_WD1(isp->isp_atioq_dma), DMA_WD0(isp->isp_atioq_dma)); in isp_init()
1125 if (ISP_CAP_MSIX(isp) && isp->isp_nirq >= 2) { in isp_init()
1127 if (IS_26XX(isp) && isp->isp_nirq >= 3) in isp_init()
1131 …isp_prt(isp, ISP_LOGDEBUG0, "isp_init: fwopt1 0x%x fwopt2 0x%x fwopt3 0x%x", icbp->icb_fwoptions1,… in isp_init()
1133 …isp_prt(isp, ISP_LOGDEBUG0, "isp_init: rqst %04x%04x%04x%04x rsp %04x%04x%04x%04x", DMA_WD3(isp->i… in isp_init()
1134 …DMA_WD1(isp->isp_rquest_dma), DMA_WD0(isp->isp_rquest_dma), DMA_WD3(isp->isp_result_dma), DMA_WD2( in isp_init()
1135 DMA_WD1(isp->isp_result_dma), DMA_WD0(isp->isp_result_dma)); in isp_init()
1137 if (FC_SCRATCH_ACQUIRE(isp, 0)) { in isp_init()
1138 isp_prt(isp, ISP_LOGERR, sacq); in isp_init()
1142 isp_put_icb_2400(isp, icbp, fcp->isp_scratch); in isp_init()
1143 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_init()
1144 isp_print_bytes(isp, "isp_init", in isp_init()
1151 if (isp->isp_nchan > 1) { in isp_init()
1158 if (ISP_CAP_VP0(isp)) { in isp_init()
1160 vpinfo.vp_count = isp->isp_nchan; in isp_init()
1163 vpinfo.vp_count = isp->isp_nchan - 1; in isp_init()
1169 isp_put_icb_2400_vpinfo(isp, &vpinfo, vdst); in isp_init()
1171 for (; chan < isp->isp_nchan; chan++) { in isp_init()
1175 fcp2 = FCPARAM(isp, chan); in isp_init()
1185 if (isp->isp_confopts & ISP_CFG_OWNLOOPID) in isp_init()
1193 if (ISP_CAP_VP0(isp)) in isp_init()
1198 isp_put_vp_port_info(isp, &pi, pdst); in isp_init()
1201 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_init()
1202 isp_print_bytes(isp, "isp_init", in isp_init()
1212 if (isp->isp_nchan > 1) { in isp_init()
1222 …isp_prt(isp, ISP_LOGDEBUG0, "INIT F/W from %04x%04x%04x%04x", DMA_WD3(fcp->isp_scdma), DMA_WD2(fcp… in isp_init()
1223 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (*icbp), 0); in isp_init()
1224 isp_mboxcmd(isp, &mbs); in isp_init()
1225 FC_SCRATCH_RELEASE(isp, 0); in isp_init()
1234 isp->isp_state = ISP_RUNSTATE; in isp_init()
1238 isp_fc_enable_vp(ispsoftc_t *isp, int chan) in isp_fc_enable_vp() argument
1240 fcparam *fcp = FCPARAM(isp, chan); in isp_fc_enable_vp()
1259 if (isp->isp_confopts & ISP_CFG_OWNLOOPID) in isp_fc_enable_vp()
1265 retval = isp_exec_entry_queue(isp, &vp, &vp, 5); in isp_fc_enable_vp()
1267 isp_prt(isp, ISP_LOGERR, "%s: VP_MODIFY of chan %d error %d", in isp_fc_enable_vp()
1273 isp_prt(isp, ISP_LOGERR, in isp_fc_enable_vp()
1282 isp_fc_disable_vp(ispsoftc_t *isp, int chan) in isp_fc_disable_vp() argument
1291 if (ISP_CAP_VP0(isp)) { in isp_fc_disable_vp()
1301 retval = isp_exec_entry_queue(isp, &vp, &vp, 5); in isp_fc_disable_vp()
1303 isp_prt(isp, ISP_LOGERR, "%s: VP_CTRL of chan %d error %d", in isp_fc_disable_vp()
1309 isp_prt(isp, ISP_LOGERR, in isp_fc_disable_vp()
1319 isp_fc_change_role(ispsoftc_t *isp, int chan, int new_role) in isp_fc_change_role() argument
1321 fcparam *fcp = FCPARAM(isp, chan); in isp_fc_change_role()
1324 if (chan >= isp->isp_nchan) { in isp_fc_change_role()
1325 isp_prt(isp, ISP_LOGWARN, "%s: bad channel %d", __func__, chan); in isp_fc_change_role()
1330 for (was = 0, i = 0; i < isp->isp_nchan; i++) { in isp_fc_change_role()
1331 if (FCPARAM(isp, i)->role != ISP_ROLE_NONE) in isp_fc_change_role()
1336 return (isp_reinit(isp, 0)); in isp_fc_change_role()
1339 res = isp_fc_disable_vp(isp, chan); in isp_fc_change_role()
1340 isp_clear_portdb(isp, chan); in isp_fc_change_role()
1344 res = isp_fc_enable_vp(isp, chan); in isp_fc_change_role()
1349 isp_clear_portdb(ispsoftc_t *isp, int chan) in isp_clear_portdb() argument
1351 fcparam *fcp = FCPARAM(isp, chan); in isp_clear_portdb()
1362 isp_async(isp, ISPASYNC_DEV_GONE, chan, lp); in isp_clear_portdb()
1377 isp_mark_portdb(ispsoftc_t *isp, int chan) in isp_mark_portdb() argument
1379 fcparam *fcp = FCPARAM(isp, chan); in isp_mark_portdb()
1399 isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags) in isp_plogx() argument
1407 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d PLOGX %s PortID 0x%06x nphdl 0x%x", in isp_plogx()
1420 retval = isp_exec_entry_queue(isp, &pl, &pl, 3 * ICB_LOGIN_TOV); in isp_plogx()
1422 isp_prt(isp, ISP_LOGERR, "%s: PLOGX of chan %d error %d", in isp_plogx()
1430 isp_prt(isp, ISP_LOGWARN, in isp_plogx()
1503 isp_prt(isp, lev, "Chan %d PLOGX PortID 0x%06x to N-Port handle 0x%x: %s", in isp_plogx()
1510 isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb) in isp_getpdb() argument
1521 mbs.param[2] = DMA_WD1(isp->isp_iocb_dma); in isp_getpdb()
1522 mbs.param[3] = DMA_WD0(isp->isp_iocb_dma); in isp_getpdb()
1523 mbs.param[6] = DMA_WD3(isp->isp_iocb_dma); in isp_getpdb()
1524 mbs.param[7] = DMA_WD2(isp->isp_iocb_dma); in isp_getpdb()
1526 MEMORYBARRIER(isp, SYNC_IFORDEV, 0, sizeof(un), chan); in isp_getpdb()
1528 isp_mboxcmd(isp, &mbs); in isp_getpdb()
1532 MEMORYBARRIER(isp, SYNC_IFORCPU, 0, sizeof(un), chan); in isp_getpdb()
1533 isp_get_pdb_24xx(isp, isp->isp_iocb, &un.bill); in isp_getpdb()
1540 isp_prt(isp, ISP_LOGDEBUG0, in isp_getpdb()
1561 isp_gethandles(ispsoftc_t *isp, int chan, uint16_t *handles, int *num, int loop) in isp_gethandles() argument
1563 fcparam *fcp = FCPARAM(isp, chan); in isp_gethandles()
1576 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_gethandles()
1577 isp_prt(isp, ISP_LOGERR, sacq); in isp_gethandles()
1580 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, ISP_FC_SCRLEN, chan); in isp_gethandles()
1581 isp_mboxcmd(isp, &mbs); in isp_gethandles()
1583 FC_SCRATCH_RELEASE(isp, chan); in isp_gethandles()
1586 MEMORYBARRIER(isp, SYNC_SFORCPU, 0, ISP_FC_SCRLEN, chan); in isp_gethandles()
1589 isp_get_pnhle_24xx(isp, &elp4[i], &el4); in isp_gethandles()
1596 FC_SCRATCH_RELEASE(isp, chan); in isp_gethandles()
1601 isp_dump_chip_portdb(ispsoftc_t *isp, int chan) in isp_dump_chip_portdb() argument
1606 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGINFO, "Chan %d chip port dump", chan); in isp_dump_chip_portdb()
1608 if (isp_getpdb(isp, chan, nphdl, &pdb)) { in isp_dump_chip_portdb()
1611 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGINFO, "Chan %d Handle 0x%04x " in isp_dump_chip_portdb()
1620 isp_get_wwn(ispsoftc_t *isp, int chan, int nphdl, int nodename) in isp_get_wwn() argument
1631 isp_mboxcmd(isp, &mbs); in isp_get_wwn()
1651 isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) in isp_fclink_test() argument
1659 fcp = FCPARAM(isp, chan); in isp_fclink_test()
1666 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC link test", chan); in isp_fclink_test()
1673 isp_change_fw_state(isp, chan, isp_fw_state(isp, chan)); in isp_fclink_test()
1682 ISP_SLEEP(isp, 1000); in isp_fclink_test()
1685 isp_prt(isp, ISP_LOG_SANCFG, in isp_fclink_test()
1696 isp_mboxcmd(isp, &mbs); in isp_fclink_test()
1726 r = isp_getpdb(isp, chan, NPH_FL_ID, &pdb); in isp_fclink_test()
1728 isp_prt(isp, ISP_LOGWARN, in isp_fclink_test()
1736 r = isp_register_fc4_type(isp, chan); in isp_fclink_test()
1741 r = isp_register_fc4_features_24xx(isp, chan); in isp_fclink_test()
1746 r = isp_register_port_name_24xx(isp, chan); in isp_fclink_test()
1751 isp_register_node_name_24xx(isp, chan); in isp_fclink_test()
1762 isp_mboxcmd(isp, &mbs); in isp_fclink_test()
1784 isp_prt(isp, ISP_LOG_SANCFG, in isp_fclink_test()
1789 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGCONFIG, in isp_fclink_test()
1792 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGCONFIG, in isp_fclink_test()
1796 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC link test done", chan); in isp_fclink_test()
1812 isp_pdb_sync(ispsoftc_t *isp, int chan) in isp_pdb_sync() argument
1814 fcparam *fcp = FCPARAM(isp, chan); in isp_pdb_sync()
1823 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC PDB sync", chan); in isp_pdb_sync()
1837 isp_async(isp, ISPASYNC_DEV_GONE, chan, lp); in isp_pdb_sync()
1839 (void) isp_plogx(isp, chan, lp->handle, in isp_pdb_sync()
1852 isp_async(isp, ISPASYNC_DEV_ARRIVED, chan, lp); in isp_pdb_sync()
1856 isp_async(isp, ISPASYNC_DEV_CHANGED, chan, lp); in isp_pdb_sync()
1862 isp_async(isp, ISPASYNC_DEV_STAYED, chan, lp); in isp_pdb_sync()
1867 isp_prt(isp, ISP_LOGWARN, in isp_pdb_sync()
1870 isp_dump_portdb(isp, chan); in isp_pdb_sync()
1875 isp_prt(isp, ISP_LOG_SANCFG, in isp_pdb_sync()
1881 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC PDB sync done", chan); in isp_pdb_sync()
1886 isp_pdb_add_update(ispsoftc_t *isp, int chan, isp_pdb_t *pdb) in isp_pdb_add_update() argument
1895 if (isp_find_pdb_by_wwpn(isp, chan, wwpn, &lp)) { in isp_pdb_add_update()
1897 isp_prt(isp, ISP_LOGERR, in isp_pdb_add_update()
1900 FC_PORTDB_TGT(isp, chan, lp), lp->state); in isp_pdb_add_update()
1901 isp_dump_portdb(isp, chan); in isp_pdb_add_update()
1915 isp_prt(isp, ISP_LOG_SANCFG, in isp_pdb_add_update()
1927 isp_prt(isp, ISP_LOG_SANCFG, in isp_pdb_add_update()
1934 if (!isp_find_pdb_empty(isp, chan, &lp)) { in isp_pdb_add_update()
1935 isp_prt(isp, ISP_LOGERR, "Chan %d out of portdb entries", chan); in isp_pdb_add_update()
1948 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Port 0x%06x@0x%04x is new", in isp_pdb_add_update()
1956 isp_scan_loop(ispsoftc_t *isp, int chan) in isp_scan_loop() argument
1958 fcparam *fcp = FCPARAM(isp, chan); in isp_scan_loop()
1969 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC loop scan", chan); in isp_scan_loop()
1972 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_loop()
1980 r = isp_gethandles(isp, chan, handles, &lim, 1); in isp_scan_loop()
1982 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_loop()
1984 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_loop()
1989 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Got %d handles", in isp_scan_loop()
1995 isp_mark_portdb(isp, chan); in isp_scan_loop()
2008 r = isp_getpdb(isp, chan, handle, &pdb); in isp_scan_loop()
2011 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_loop()
2016 isp_prt(isp, ISP_LOGDEBUG1, in isp_scan_loop()
2022 isp_pdb_add_update(isp, chan, &pdb); in isp_scan_loop()
2027 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC loop scan done", chan); in isp_scan_loop()
2032 isp_ct_passthru(ispsoftc_t *isp, int chan, uint32_t cmd_bcnt, uint32_t rsp_bcnt) in isp_ct_passthru() argument
2034 fcparam *fcp = FCPARAM(isp, chan); in isp_ct_passthru()
2038 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_ct_passthru()
2039 isp_print_bytes(isp, "CT request", cmd_bcnt, fcp->isp_scratch); in isp_ct_passthru()
2049 pt.ctp_vpidx = ISP_GET_VPIDX(isp, chan); in isp_ct_passthru()
2061 retval = isp_exec_entry_queue(isp, &pt, &pt, 2 * pt.ctp_time); in isp_ct_passthru()
2063 isp_prt(isp, ISP_LOGERR, "%s: CTP of chan %d error %d", in isp_ct_passthru()
2069 isp_prt(isp, ISP_LOGWARN, in isp_ct_passthru()
2075 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_ct_passthru()
2076 isp_print_bytes(isp, "CT response", rsp_bcnt, fcp->isp_scratch); in isp_ct_passthru()
2093 isp_gid_pt(ispsoftc_t *isp, int chan) in isp_gid_pt() argument
2095 fcparam *fcp = FCPARAM(isp, chan); in isp_gid_pt()
2099 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d requesting GID_PT", chan); in isp_gid_pt()
2100 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_gid_pt()
2101 isp_prt(isp, ISP_LOGERR, sacq); in isp_gid_pt()
2112 isp_put_ct_hdr(isp, &ct, (ct_hdr_t *)scp); in isp_gid_pt()
2118 if (isp_ct_passthru(isp, chan, sizeof(ct) + sizeof(uint32_t), GIDLEN)) { in isp_gid_pt()
2119 FC_SCRATCH_RELEASE(isp, chan); in isp_gid_pt()
2123 isp_get_gid_xx_response(isp, (sns_gid_xx_rsp_t *)scp, in isp_gid_pt()
2125 FC_SCRATCH_RELEASE(isp, chan); in isp_gid_pt()
2130 isp_gff_id(ispsoftc_t *isp, int chan, uint32_t portid) in isp_gff_id() argument
2132 fcparam *fcp = FCPARAM(isp, chan); in isp_gff_id()
2142 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d requesting GFF_ID", chan); in isp_gff_id()
2143 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_gff_id()
2144 isp_prt(isp, ISP_LOGERR, sacq); in isp_gff_id()
2155 isp_put_ct_hdr(isp, &ct, (ct_hdr_t *)scp); in isp_gff_id()
2157 ISP_IOZPUT_32(isp, portid, rp); in isp_gff_id()
2159 if (isp_ct_passthru(isp, chan, sizeof(ct) + sizeof(uint32_t), in isp_gff_id()
2161 FC_SCRATCH_RELEASE(isp, chan); in isp_gff_id()
2165 isp_get_gff_id_response(isp, (sns_gff_id_rsp_t *)scp, &rsp); in isp_gff_id()
2177 if (((ISP_SWAP32(isp, rsp.snscb_fc4_features[FC4_SCSI / 8]) >> in isp_gff_id()
2181 FC_SCRATCH_RELEASE(isp, chan); in isp_gff_id()
2182 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d GFF_ID result is %d", chan, res); in isp_gff_id()
2187 isp_gft_id(ispsoftc_t *isp, int chan, uint32_t portid) in isp_gft_id() argument
2189 fcparam *fcp = FCPARAM(isp, chan); in isp_gft_id()
2199 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d requesting GFT_ID", chan); in isp_gft_id()
2200 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_gft_id()
2201 isp_prt(isp, ISP_LOGERR, sacq); in isp_gft_id()
2212 isp_put_ct_hdr(isp, &ct, (ct_hdr_t *)scp); in isp_gft_id()
2214 ISP_IOZPUT_32(isp, portid, rp); in isp_gft_id()
2216 if (isp_ct_passthru(isp, chan, sizeof(ct) + sizeof(uint32_t), in isp_gft_id()
2218 FC_SCRATCH_RELEASE(isp, chan); in isp_gft_id()
2222 isp_get_gft_id_response(isp, (sns_gft_id_rsp_t *)scp, &rsp); in isp_gft_id()
2234 FC_SCRATCH_RELEASE(isp, chan); in isp_gft_id()
2235 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d GFT_ID result is %d", chan, res); in isp_gft_id()
2240 isp_scan_fabric(ispsoftc_t *isp, int chan) in isp_scan_fabric() argument
2242 fcparam *fcp = FCPARAM(isp, chan); in isp_scan_fabric()
2254 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC fabric scan", chan); in isp_scan_fabric()
2258 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2265 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
2266 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2274 r = isp_getpdb(isp, chan, NPH_FL_ID, &pdb); in isp_scan_fabric()
2276 isp_dump_chip_portdb(isp, chan); in isp_scan_fabric()
2281 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2287 r = isp_gid_pt(isp, chan); in isp_scan_fabric()
2311 isp_prt(isp, level, "Chan %d Fabric Nameserver rejected GID_PT" in isp_scan_fabric()
2325 isp_prt(isp, ISP_LOGWARN, in isp_scan_fabric()
2329 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2355 …isp_prt(isp, ISP_LOG_SANCFG, "Chan %d removing duplicate PortID 0x%06x entry from list", chan, por… in isp_scan_fabric()
2373 isp_mark_portdb(isp, chan); in isp_scan_fabric()
2378 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2381 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2387 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2393 if (isp_find_pdb_by_portid(isp, chan, portid, &lp)) { in isp_scan_fabric()
2395 isp_prt(isp, ISP_LOGERR, in isp_scan_fabric()
2398 FC_PORTDB_TGT(isp, chan, lp), lp->state); in isp_scan_fabric()
2399 isp_dump_portdb(isp, chan); in isp_scan_fabric()
2421 r = isp_getpdb(isp, chan, lp->handle, &pdb); in isp_scan_fabric()
2426 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2432 isp_pdb_add_update(isp, chan, &pdb); in isp_scan_fabric()
2438 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2443 r = isp_gff_id(isp, chan, portid); in isp_scan_fabric()
2445 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2450 r = isp_gft_id(isp, chan, portid); in isp_scan_fabric()
2452 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
2457 if (isp_login_device(isp, chan, portid, &pdb, in isp_scan_fabric()
2458 &FCPARAM(isp, 0)->isp_lasthdl)) { in isp_scan_fabric()
2464 isp_pdb_add_update(isp, chan, &pdb); in isp_scan_fabric()
2470 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC fabric scan done", chan); in isp_scan_fabric()
2478 isp_login_device(ispsoftc_t *isp, int chan, uint32_t portid, isp_pdb_t *p, uint16_t *ohp) in isp_login_device() argument
2483 handle = isp_next_handle(isp, ohp); in isp_login_device()
2485 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) in isp_login_device()
2489 r = isp_getpdb(isp, chan, handle, p); in isp_login_device()
2493 handle = isp_next_handle(isp, ohp); in isp_login_device()
2498 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) in isp_login_device()
2504 r = isp_plogx(isp, chan, handle, portid, PLOGX_FLG_CMD_PLOGI); in isp_login_device()
2513 …if (isp_plogx(isp, chan, r >> 16, portid, PLOGX_FLG_CMD_LOGO | PLOGX_FLG_IMPLICIT | PLOGX_FLG_FREE… in isp_login_device()
2514 isp_prt(isp, ISP_LOGERR, "baw... logout of %x failed", r >> 16); in isp_login_device()
2516 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) in isp_login_device()
2518 r = isp_plogx(isp, chan, handle, portid, PLOGX_FLG_CMD_PLOGI); in isp_login_device()
2524 handle = isp_next_handle(isp, ohp); in isp_login_device()
2533 isp_prt(isp, ISP_LOGWARN, "Chan %d PLOGI 0x%06x failed", chan, portid); in isp_login_device()
2542 r = isp_getpdb(isp, chan, handle, p); in isp_login_device()
2544 isp_prt(isp, ISP_LOGERR, "Chan %d new device 0x%06x@0x%x disappeared", chan, portid, handle); in isp_login_device()
2549 isp_prt(isp, ISP_LOGERR, "Chan %d new device 0x%06x@0x%x changed (0x%06x@0x%0x)", in isp_login_device()
2557 isp_register_fc4_type(ispsoftc_t *isp, int chan) in isp_register_fc4_type() argument
2559 fcparam *fcp = FCPARAM(isp, chan); in isp_register_fc4_type()
2564 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_fc4_type()
2565 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_fc4_type()
2580 isp_put_rft_id(isp, &rp, (rft_id_t *)scp); in isp_register_fc4_type()
2582 if (isp_ct_passthru(isp, chan, sizeof(rft_id_t), sizeof(ct_hdr_t))) { in isp_register_fc4_type()
2583 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type()
2587 isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); in isp_register_fc4_type()
2588 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type()
2590 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "Chan %d Register FC4 Type rejected", chan); in isp_register_fc4_type()
2593 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Register FC4 Type accepted", chan); in isp_register_fc4_type()
2595 isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Type: 0x%x", chan, ct->ct_cmd_resp); in isp_register_fc4_type()
2602 isp_register_fc4_features_24xx(ispsoftc_t *isp, int chan) in isp_register_fc4_features_24xx() argument
2604 fcparam *fcp = FCPARAM(isp, chan); in isp_register_fc4_features_24xx()
2609 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_fc4_features_24xx()
2610 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_fc4_features_24xx()
2633 isp_put_rff_id(isp, &rp, (rff_id_t *)scp); in isp_register_fc4_features_24xx()
2634 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_register_fc4_features_24xx()
2635 isp_print_bytes(isp, "CT request", sizeof(rft_id_t), scp); in isp_register_fc4_features_24xx()
2637 if (isp_ct_passthru(isp, chan, sizeof(rft_id_t), sizeof(ct_hdr_t))) { in isp_register_fc4_features_24xx()
2638 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_features_24xx()
2642 isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); in isp_register_fc4_features_24xx()
2643 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_features_24xx()
2645 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, in isp_register_fc4_features_24xx()
2649 isp_prt(isp, ISP_LOG_SANCFG, in isp_register_fc4_features_24xx()
2652 isp_prt(isp, ISP_LOGWARN, in isp_register_fc4_features_24xx()
2660 isp_register_port_name_24xx(ispsoftc_t *isp, int chan) in isp_register_port_name_24xx() argument
2662 fcparam *fcp = FCPARAM(isp, chan); in isp_register_port_name_24xx()
2668 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_port_name_24xx()
2669 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_port_name_24xx()
2692 ":%s", device_get_nameunit(isp->isp_dev)); in isp_register_port_name_24xx()
2699 isp_put_rspn_id(isp, &rp, (rspn_id_t *)scp); in isp_register_port_name_24xx()
2701 if (isp_ct_passthru(isp, chan, len, sizeof(ct_hdr_t))) { in isp_register_port_name_24xx()
2702 FC_SCRATCH_RELEASE(isp, chan); in isp_register_port_name_24xx()
2706 isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); in isp_register_port_name_24xx()
2707 FC_SCRATCH_RELEASE(isp, chan); in isp_register_port_name_24xx()
2709 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, in isp_register_port_name_24xx()
2713 isp_prt(isp, ISP_LOG_SANCFG, in isp_register_port_name_24xx()
2716 isp_prt(isp, ISP_LOGWARN, in isp_register_port_name_24xx()
2724 isp_register_node_name_24xx(ispsoftc_t *isp, int chan) in isp_register_node_name_24xx() argument
2726 fcparam *fcp = FCPARAM(isp, chan); in isp_register_node_name_24xx()
2732 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_node_name_24xx()
2733 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_node_name_24xx()
2755 isp_put_rsnn_nn(isp, &rp, (rsnn_nn_t *)scp); in isp_register_node_name_24xx()
2757 if (isp_ct_passthru(isp, chan, len, sizeof(ct_hdr_t))) { in isp_register_node_name_24xx()
2758 FC_SCRATCH_RELEASE(isp, chan); in isp_register_node_name_24xx()
2762 isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); in isp_register_node_name_24xx()
2763 FC_SCRATCH_RELEASE(isp, chan); in isp_register_node_name_24xx()
2765 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, in isp_register_node_name_24xx()
2769 isp_prt(isp, ISP_LOG_SANCFG, in isp_register_node_name_24xx()
2772 isp_prt(isp, ISP_LOGWARN, in isp_register_node_name_24xx()
2780 isp_next_handle(ispsoftc_t *isp, uint16_t *ohp) in isp_next_handle() argument
2796 isp_prt(isp, ISP_LOGERR, "Out of port handles!"); in isp_next_handle()
2802 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_next_handle()
2803 fcp = FCPARAM(isp, chan); in isp_next_handle()
2823 ispsoftc_t *isp; in isp_start() local
2832 isp = XS_ISP(xs); in isp_start()
2842 …isp_prt(isp, ISP_LOGERR, "unsupported cdb length (%d, CDB[0]=0x%x)", XS_CDBLEN(xs), XS_CDBP(xs)[0]… in isp_start()
2852 fcp = FCPARAM(isp, XS_CHANNEL(xs)); in isp_start()
2855 isp_prt(isp, ISP_LOG_WARN1, in isp_start()
2862 if (isp->isp_state != ISP_RUNSTATE) { in isp_start()
2863 isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE"); in isp_start()
2868 isp_prt(isp, ISP_LOGDEBUG2, "XS_TGT(xs)=%d", target); in isp_start()
2876 isp_prt(isp, ISP_LOGDEBUG1, in isp_start()
2882 isp_prt(isp, ISP_LOGDEBUG1, in isp_start()
2888 isp_prt(isp, ISP_LOGDEBUG1, in isp_start()
2897 qep = isp_getrqentry(isp); in isp_start()
2899 isp_prt(isp, ISP_LOG_WARN1, "Request Queue Overflow"); in isp_start()
2906 * Now see if we need to synchronize the ISP with respect to anything. in isp_start()
2911 if (ISP_TST_SENDMARKER(isp, XS_CHANNEL(xs))) { in isp_start()
2917 isp_put_marker_24xx(isp, m, qep); in isp_start()
2918 ISP_SYNC_REQUEST(isp); in isp_start()
2919 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 0); in isp_start()
2928 isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen); in isp_start()
2948 if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) { in isp_start()
2949 if (FCP_NEXT_CRN(isp, &reqp->req_crn, xs)) { in isp_start()
2950 isp_prt(isp, ISP_LOG_WARN1, in isp_start()
2961 reqp->req_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(xs)); in isp_start()
2964 reqp->req_handle = isp_allocate_handle(isp, xs, ISP_HANDLE_INITIATOR); in isp_start()
2966 isp_prt(isp, ISP_LOG_WARN1, "out of xflist pointers"); in isp_start()
2977 dmaresult = ISP_DMASETUP(isp, xs, reqp); in isp_start()
2979 isp_destroy_handle(isp, reqp->req_handle); in isp_start()
2986 …isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "START cmd cdb[0]=0x%x datalen %ld", XS_CDBP(xs)[0], (long) XS_… in isp_start()
2991 * isp control
2996 isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) in isp_control() argument
3012 isp_prt(isp, ISP_LOGERR, "BUS RESET NOT IMPLEMENTED"); in isp_control()
3024 fcp = FCPARAM(isp, chan); in isp_control()
3027 isp_prt(isp, ISP_LOGWARN, "Chan %d trying to reset bad target %d", chan, tgt); in isp_control()
3032 isp_prt(isp, ISP_LOGWARN, "Chan %d abort of no longer valid target %d", chan, tgt); in isp_control()
3046 tmf->tmf_vpidx = ISP_GET_VPIDX(isp, chan); in isp_control()
3048 …isp_prt(isp, ISP_LOGALL, "Chan %d Reset N-Port Handle 0x%04x @ Port 0x%06x", chan, lp->handle, lp-… in isp_control()
3051 if (isp_exec_entry_mbox(isp, tmf, sp, 2 * tmf->tmf_timeout)) in isp_control()
3056 …isp_prt(isp, ISP_LOGWARN, "Chan %d reset of target %d returned 0x%x", chan, tgt, sp->req_completio… in isp_control()
3070 handle = isp_find_handle(isp, xs); in isp_control()
3072 isp_prt(isp, ISP_LOGWARN, "cannot find handle for command to abort"); in isp_control()
3076 fcp = FCPARAM(isp, chan); in isp_control()
3078 isp_prt(isp, ISP_LOGWARN, "Chan %d trying to abort bad target %d", chan, tgt); in isp_control()
3083 isp_prt(isp, ISP_LOGWARN, "Chan %d abort of no longer valid target %d", chan, tgt); in isp_control()
3086 …isp_prt(isp, ISP_LOGALL, "Chan %d Abort Cmd for N-Port 0x%04x @ Port 0x%06x", chan, lp->handle, lp… in isp_control()
3094 ab->abrt_vpidx = ISP_GET_VPIDX(isp, chan); in isp_control()
3096 if (isp_exec_entry_mbox(isp, ab, ab, 5)) in isp_control()
3101 isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d abort returned 0x%x", chan, tgt, ab->abrt_nphdl); in isp_control()
3114 return (isp_fclink_test(isp, chan, usdelay)); in isp_control()
3121 return (isp_scan_fabric(isp, chan)); in isp_control()
3128 return (isp_scan_loop(isp, chan)); in isp_control()
3135 return (isp_pdb_sync(isp, chan)); in isp_control()
3148 return (isp_getpdb(isp, chan, tgt, pdb)); in isp_control()
3163 *wwnn = isp_get_wwn(isp, chan, tgt, 1); in isp_control()
3169 *wwnp = isp_get_wwn(isp, chan, tgt, 0); in isp_control()
3181 isp_mboxcmd(isp, mbr); in isp_control()
3194 return (isp_plogx(isp, p->channel, p->handle, p->portid, p->flags)); in isp_control()
3197 isp_next_handle(isp, &p->handle); in isp_control()
3198 r = isp_plogx(isp, p->channel, p->handle, p->portid, p->flags); in isp_control()
3215 return (isp_fc_change_role(isp, chan, role)); in isp_control()
3218 isp_prt(isp, ISP_LOGERR, "Unknown Control Opcode 0x%x", ctl); in isp_control()
3234 isp_intr_atioq(ispsoftc_t *isp) in isp_intr_atioq() argument
3239 iptr = ISP_READ(isp, BIU2400_ATIO_RSPINP); in isp_intr_atioq()
3240 optr = isp->isp_atioodx; in isp_intr_atioq()
3243 MEMORYBARRIER(isp, SYNC_ATIOQ, oop, QENTRY_LEN, -1); in isp_intr_atioq()
3244 addr = ISP_QUEUE_ENTRY(isp->isp_atioq, oop); in isp_intr_atioq()
3250 (void) isp_target_notify(isp, addr, &oop, in isp_intr_atioq()
3251 ATIO_QUEUE_LEN(isp)); in isp_intr_atioq()
3255 isp_print_qentry(isp, "?ATIOQ entry?", oop, addr); in isp_intr_atioq()
3258 optr = ISP_NXT_QENTRY(oop, ATIO_QUEUE_LEN(isp)); in isp_intr_atioq()
3260 if (isp->isp_atioodx != optr) { in isp_intr_atioq()
3261 ISP_WRITE(isp, BIU2400_ATIO_RSPOUTP, optr); in isp_intr_atioq()
3262 isp->isp_atioodx = optr; in isp_intr_atioq()
3268 isp_intr_mbox(ispsoftc_t *isp, uint16_t mbox0) in isp_intr_mbox() argument
3272 if (!isp->isp_mboxbsy) { in isp_intr_mbox()
3273 isp_prt(isp, ISP_LOGWARN, "mailbox 0x%x with no waiters", mbox0); in isp_intr_mbox()
3276 obits = isp->isp_obits; in isp_intr_mbox()
3277 isp->isp_mboxtmp[0] = mbox0; in isp_intr_mbox()
3278 for (i = 1; i < ISP_NMBOX(isp); i++) { in isp_intr_mbox()
3281 isp->isp_mboxtmp[i] = ISP_READ(isp, MBOX_OFF(i)); in isp_intr_mbox()
3283 isp->isp_mboxbsy = 0; in isp_intr_mbox()
3287 isp_intr_respq(ispsoftc_t *isp) in isp_intr_respq() argument
3304 if (isp->isp_state != ISP_RUNSTATE) { in isp_intr_respq()
3305 isp_prt(isp, ISP_LOGINFO, "respq interrupt when not ready"); in isp_intr_respq()
3309 iptr = ISP_READ(isp, BIU2400_RSPINP); in isp_intr_respq()
3310 optr = isp->isp_resodx; in isp_intr_respq()
3316 hp = (isphdr_t *) ISP_QUEUE_ENTRY(isp->isp_result, cptr); in isp_intr_respq()
3317 optr = ISP_NXT_QENTRY(optr, RESULT_QUEUE_LEN(isp)); in isp_intr_respq()
3322 MEMORYBARRIER(isp, SYNC_RESULT, cptr, QENTRY_LEN, -1); in isp_intr_respq()
3323 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_intr_respq()
3324 isp_print_qentry(isp, "Response Queue Entry", cptr, hp); in isp_intr_respq()
3325 isp_get_hdr(isp, hp, &sp->req_header); in isp_intr_respq()
3332 isp_print_qentry(isp, "invalid entry type", cptr, hp); in isp_intr_respq()
3336 isp_print_qentry(isp, "invalid entry parameter", cptr, hp); in isp_intr_respq()
3340 isp_print_qentry(isp, "invalid entry count", cptr, hp); in isp_intr_respq()
3344 isp_print_qentry(isp, "invalid entry order", cptr, hp); in isp_intr_respq()
3356 if (isp_handle_control(isp, hp)) { in isp_intr_respq()
3363 isp_get_24xx_response(isp, (isp24xx_statusreq_t *)hp, sp); in isp_intr_respq()
3366 isp_prt(isp, ISP_LOG_WARN1, "Marker Response"); in isp_intr_respq()
3370 isp_get_cont_response(isp, (ispstatus_cont_t *)hp, scp); in isp_intr_respq()
3378 isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, in isp_intr_respq()
3383 isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response"); in isp_intr_respq()
3392 isp_target_notify(isp, hp, &cptr, RESULT_QUEUE_LEN(isp)); in isp_intr_respq()
3396 sptr = ISP_NXT_QENTRY(sptr, RESULT_QUEUE_LEN(isp)); in isp_intr_respq()
3397 hp = (isphdr_t *)ISP_QUEUE_ENTRY(isp->isp_result, sptr); in isp_intr_respq()
3400 optr = ISP_NXT_QENTRY(cptr, RESULT_QUEUE_LEN(isp)); in isp_intr_respq()
3404 isp_handle_rpt_id_acq(isp, hp); in isp_intr_respq()
3409 isp_prt(isp, ISP_LOGERR, notresp, etype, cptr, optr); in isp_intr_respq()
3414 xs = isp_find_xs(isp, sp->req_handle); in isp_intr_respq()
3422 isp_prt(isp, ISP_LOGERR, "cannot find handle 0x%x (status 0x%x)", in isp_intr_respq()
3468 isp_xs_prt(isp, xs, ISP_LOGWARN, in isp_intr_respq()
3475 isp_parse_status_24xx(isp, sp, xs); in isp_intr_respq()
3481 isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, in isp_intr_respq()
3487 ISP_DMAFREE(isp, xs); in isp_intr_respq()
3488 isp_destroy_handle(isp, sp->req_handle); in isp_intr_respq()
3500 /* If we processed any IOCBs, let ISP know about it. */ in isp_intr_respq()
3501 if (optr != isp->isp_resodx) { in isp_intr_respq()
3502 ISP_WRITE(isp, BIU2400_RSPOUTP, optr); in isp_intr_respq()
3503 isp->isp_resodx = optr; in isp_intr_respq()
3509 isp_intr_async(ispsoftc_t *isp, uint16_t mbox) in isp_intr_async() argument
3514 isp_prt(isp, ISP_LOGDEBUG2, "Async Mbox 0x%x", mbox); in isp_intr_async()
3518 isp->isp_state = ISP_CRASHED; in isp_intr_async()
3519 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_intr_async()
3520 FCPARAM(isp, chan)->isp_loopstate = LOOP_NIL; in isp_intr_async()
3521 isp_change_fw_state(isp, chan, FW_CONFIG_WAIT); in isp_intr_async()
3527 if (isp->isp_mboxbsy) { in isp_intr_async()
3528 isp->isp_obits = 1; in isp_intr_async()
3529 isp->isp_mboxtmp[0] = MBOX_HOST_INTERFACE_ERROR; in isp_intr_async()
3530 isp->isp_mboxbsy = 0; in isp_intr_async()
3536 isp_async(isp, ISPASYNC_FW_CRASH); in isp_intr_async()
3540 isp_prt(isp, ISP_LOGERR, "Request Queue Transfer Error"); in isp_intr_async()
3544 isp_prt(isp, ISP_LOGERR, "Response Queue Transfer Error"); in isp_intr_async()
3548 isp_prt(isp, ISP_LOGERR, "ATIO Queue Transfer Error"); in isp_intr_async()
3559 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_intr_async()
3560 fcp = FCPARAM(isp, chan); in isp_intr_async()
3567 ISP_SET_SENDMARKER(isp, chan, 1); in isp_intr_async()
3568 isp_async(isp, ISPASYNC_LIP, chan); in isp_intr_async()
3570 isp_target_async(isp, chan, mbox); in isp_intr_async()
3581 for (i = j = 0; i < ISP_HANDLE_NUM(isp); i++) { in isp_intr_async()
3585 hdp = &isp->isp_xflist[i]; in isp_intr_async()
3594 isp_prt(isp, ISP_LOG_WARN1, in isp_intr_async()
3602 isp_prt(isp, ISP_LOGERR, lipd, chan, j); in isp_intr_async()
3613 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_intr_async()
3614 fcp = FCPARAM(isp, chan); in isp_intr_async()
3620 ISP_SET_SENDMARKER(isp, chan, 1); in isp_intr_async()
3621 isp_async(isp, ISPASYNC_LOOP_UP, chan); in isp_intr_async()
3623 isp_target_async(isp, chan, mbox); in isp_intr_async()
3633 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_intr_async()
3634 fcp = FCPARAM(isp, chan); in isp_intr_async()
3637 ISP_SET_SENDMARKER(isp, chan, 1); in isp_intr_async()
3640 isp_async(isp, ISPASYNC_LOOP_DOWN, chan); in isp_intr_async()
3642 isp_target_async(isp, chan, mbox); in isp_intr_async()
3652 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_intr_async()
3653 fcp = FCPARAM(isp, chan); in isp_intr_async()
3656 ISP_SET_SENDMARKER(isp, chan, 1); in isp_intr_async()
3659 isp_async(isp, ISPASYNC_LOOP_RESET, chan); in isp_intr_async()
3661 isp_target_async(isp, chan, mbox); in isp_intr_async()
3670 nphdl = ISP_READ(isp, OUTMAILBOX1); in isp_intr_async()
3671 nlstate = ISP_READ(isp, OUTMAILBOX2); in isp_intr_async()
3672 reason = ISP_READ(isp, OUTMAILBOX3) >> 8; in isp_intr_async()
3673 if (ISP_CAP_MULTI_ID(isp)) { in isp_intr_async()
3674 chan = ISP_READ(isp, OUTMAILBOX3) & 0xff; in isp_intr_async()
3677 echan = isp->isp_nchan - 1; in isp_intr_async()
3678 } else if (chan >= isp->isp_nchan) { in isp_intr_async()
3687 fcp = FCPARAM(isp, chan); in isp_intr_async()
3698 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, chan, in isp_intr_async()
3707 portid = ((ISP_READ(isp, OUTMAILBOX1) & 0xff) << 16) | in isp_intr_async()
3708 ISP_READ(isp, OUTMAILBOX2); in isp_intr_async()
3709 if (ISP_CAP_MULTI_ID(isp)) { in isp_intr_async()
3710 chan = ISP_READ(isp, OUTMAILBOX3) & 0xff; in isp_intr_async()
3711 if (chan >= isp->isp_nchan) in isp_intr_async()
3716 fcp = FCPARAM(isp, chan); in isp_intr_async()
3723 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, chan, in isp_intr_async()
3728 isp_prt(isp, ISP_LOGWARN, "Error logging disabled (reason 0x%x)", in isp_intr_async()
3729 ISP_READ(isp, OUTMAILBOX1)); in isp_intr_async()
3732 isp_prt(isp, ISP_LOGWARN, "P2P init error (reason 0x%x)", in isp_intr_async()
3733 ISP_READ(isp, OUTMAILBOX1)); in isp_intr_async()
3736 isp_prt(isp, ISP_LOGWARN, "Receive Error"); in isp_intr_async()
3739 isp_prt(isp, ISP_LOGTDEBUG0, "LS_RJT sent"); in isp_intr_async()
3742 isp_prt(isp, ISP_LOGDEBUG0, "FW restart complete"); in isp_intr_async()
3745 isp_prt(isp, ISP_LOGERR, "Temperature alert (subcode 0x%x)", in isp_intr_async()
3746 ISP_READ(isp, OUTMAILBOX1)); in isp_intr_async()
3749 isp_prt(isp, ISP_LOGDEBUG0, "Inter-driver communication complete"); in isp_intr_async()
3752 isp_prt(isp, ISP_LOGDEBUG0, "Inter-driver communication notification"); in isp_intr_async()
3755 isp_prt(isp, ISP_LOGDEBUG0, "Inter-driver communication time extended"); in isp_intr_async()
3758 isp_prt(isp, ISP_LOGDEBUG0, "Transceiver insertion (0x%x)", in isp_intr_async()
3759 ISP_READ(isp, OUTMAILBOX1)); in isp_intr_async()
3762 isp_prt(isp, ISP_LOGDEBUG0, "Transceiver removal"); in isp_intr_async()
3765 isp_prt(isp, ISP_LOGDEBUG0, "NIC Firmware State Change"); in isp_intr_async()
3768 isp_prt(isp, ISP_LOGDEBUG0, "Autoload FW init complete"); in isp_intr_async()
3771 isp_prt(isp, ISP_LOGERR, "Autoload FW init failure"); in isp_intr_async()
3774 isp_prt(isp, ISP_LOGWARN, "Unknown Async Code 0x%x", mbox); in isp_intr_async()
3783 isp_handle_control(ispsoftc_t *isp, isphdr_t *hp) in isp_handle_control() argument
3801 ISP_IOXGET_32(isp, (uint32_t *)(hp + 1), hdl); in isp_handle_control()
3804 ptr = isp_find_xs(isp, hdl); in isp_handle_control()
3806 isp_destroy_handle(isp, hdl); in isp_handle_control()
3816 isp_handle_rpt_id_acq(ispsoftc_t *isp, isphdr_t *hp) in isp_handle_rpt_id_acq() argument
3823 isp_get_ridacq(isp, (isp_ridacq_t *)hp, &rid); in isp_handle_rpt_id_acq()
3827 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_handle_rpt_id_acq()
3828 fcp = FCPARAM(isp, chan); in isp_handle_rpt_id_acq()
3835 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, in isp_handle_rpt_id_acq()
3839 isp_async(isp, ISPASYNC_LOOP_DOWN, in isp_handle_rpt_id_acq()
3844 fcp = FCPARAM(isp, rid.ridacq_vp_index); in isp_handle_rpt_id_acq()
3850 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, in isp_handle_rpt_id_acq()
3854 isp_async(isp, ISPASYNC_LOOP_DOWN, in isp_handle_rpt_id_acq()
3861 isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs) in isp_parse_status_24xx() argument
3871 isp_xs_prt(isp, xs, ISP_LOGERR, "DMA error"); in isp_parse_status_24xx()
3877 isp_xs_prt(isp, xs, ISP_LOGERR, "Transport Error"); in isp_parse_status_24xx()
3883 isp_xs_prt(isp, xs, ISP_LOGWARN, "reset destroyed command"); in isp_parse_status_24xx()
3884 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_status_24xx()
3890 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Aborted"); in isp_parse_status_24xx()
3891 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_status_24xx()
3897 isp_xs_prt(isp, xs, ISP_LOGWARN, "Command Timed Out"); in isp_parse_status_24xx()
3904 isp_xs_prt(isp, xs, ISP_LOGERR, "Data Overrun"); in isp_parse_status_24xx()
3910 isp_prt(isp, ISP_LOGERR, "Chan %d data reassembly error for target %d", chan, XS_TGT(xs)); in isp_parse_status_24xx()
3916 isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", chan, XS_TGT(xs)); in isp_parse_status_24xx()
3930 …isp_xs_prt(isp, xs, ISP_LOGWARN, bun, XS_XFRLEN(xs), sp->req_resid, (ru_marked)? "marked" : "not m… in isp_parse_status_24xx()
3936 …isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Data Underrun (%d) for command 0x%x", sp->req_resid, XS_CDBP(x… in isp_parse_status_24xx()
3947 fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs)); in isp_parse_status_24xx()
3959 isp_prt(isp, ISP_LOGINFO, "Chan %d port %s for target %d", in isp_parse_status_24xx()
3975 isp_prt(isp, ISP_LOGWARN, "port changed for target %d chan %d", XS_TGT(xs), chan); in isp_parse_status_24xx()
3983 isp_prt(isp, ISP_LOGWARN, "f/w resource unavailable for target %d chan %d", XS_TGT(xs), chan); in isp_parse_status_24xx()
3991 …isp_prt(isp, ISP_LOGWARN, "command for target %d overlapped task management for chan %d", XS_TGT(x… in isp_parse_status_24xx()
3999 …isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x on chan %d", sp->req_completion_status, c… in isp_parse_status_24xx()
4282 isp_mboxcmd(ispsoftc_t *isp, mbreg_t *mbp) in isp_mboxcmd() argument
4291 isp_prt(isp, ISP_LOGERR, "Unknown Command 0x%x", opcode); in isp_mboxcmd()
4301 isp_prt(isp, ISP_LOGDEBUG3, "Mailbox Command '%s'", cname); in isp_mboxcmd()
4318 isp_prt(isp, ISP_LOGERR, "no parameters for 0x%x", opcode); in isp_mboxcmd()
4322 for (box = 0; box < ISP_NMBOX(isp); box++) { in isp_mboxcmd()
4324 isp_prt(isp, ISP_LOGDEBUG3, "IN mbox %d = 0x%04x", box, in isp_mboxcmd()
4326 ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]); in isp_mboxcmd()
4328 isp->isp_mboxtmp[box] = mbp->param[box] = 0; in isp_mboxcmd()
4331 isp->isp_obits = obits; in isp_mboxcmd()
4332 isp->isp_mboxbsy = 1; in isp_mboxcmd()
4337 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_SET_HOST_INT); in isp_mboxcmd()
4344 if (!isp->isp_mboxbsy) in isp_mboxcmd()
4346 ISP_RUN_ISR(isp); in isp_mboxcmd()
4347 if (!isp->isp_mboxbsy) in isp_mboxcmd()
4355 if (isp->isp_mboxbsy) { in isp_mboxcmd()
4356 isp->isp_mboxbsy = 0; in isp_mboxcmd()
4357 isp_prt(isp, ISP_LOGWARN, "Mailbox Command (0x%x) Timeout (%uus) (%s:%d)", in isp_mboxcmd()
4366 for (box = 0; box < ISP_NMBOX(isp); box++) { in isp_mboxcmd()
4368 mbp->param[box] = isp->isp_mboxtmp[box]; in isp_mboxcmd()
4369 isp_prt(isp, ISP_LOGDEBUG3, "OUT mbox %d = 0x%04x", box, in isp_mboxcmd()
4439 isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s%s)", in isp_mboxcmd()
4445 isp_fw_state(ispsoftc_t *isp, int chan) in isp_fw_state() argument
4450 isp_mboxcmd(isp, &mbs); in isp_fw_state()
4457 isp_setdfltfcparm(ispsoftc_t *isp, int chan) in isp_setdfltfcparm() argument
4459 fcparam *fcp = FCPARAM(isp, chan); in isp_setdfltfcparm()
4464 fcp->role = DEFAULT_ROLE(isp, chan); in isp_setdfltfcparm()
4467 fcp->isp_loopid = DEFAULT_LOOPID(isp, chan); in isp_setdfltfcparm()
4468 fcp->isp_wwnn_nvram = DEFAULT_NODEWWN(isp, chan); in isp_setdfltfcparm()
4469 fcp->isp_wwpn_nvram = DEFAULT_PORTWWN(isp, chan); in isp_setdfltfcparm()
4478 if (isp->isp_confopts & ISP_CFG_FULL_DUPLEX) in isp_setdfltfcparm()
4488 if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) { in isp_setdfltfcparm()
4494 j = isp_read_nvram(isp); in isp_setdfltfcparm()
4500 isp->isp_confopts |= ISP_CFG_NONVRAM; in isp_setdfltfcparm()
4504 fcp->isp_wwnn = ACTIVE_NODEWWN(isp, chan); in isp_setdfltfcparm()
4505 fcp->isp_wwpn = ACTIVE_PORTWWN(isp, chan); in isp_setdfltfcparm()
4506 isp_prt(isp, ISP_LOGCONFIG, "Chan %d 0x%08x%08x/0x%08x%08x Role %s", in isp_setdfltfcparm()
4513 * Re-initialize the ISP and complete all orphaned commands
4519 isp_reinit(ispsoftc_t *isp, int do_load_defaults) in isp_reinit() argument
4523 if (isp->isp_state > ISP_RESETSTATE) in isp_reinit()
4524 isp_stop(isp); in isp_reinit()
4525 if (isp->isp_state != ISP_RESETSTATE) in isp_reinit()
4526 isp_reset(isp, do_load_defaults); in isp_reinit()
4527 if (isp->isp_state != ISP_RESETSTATE) { in isp_reinit()
4529 isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__); in isp_reinit()
4533 isp_init(isp); in isp_reinit()
4534 if (isp->isp_state > ISP_RESETSTATE && in isp_reinit()
4535 isp->isp_state != ISP_RUNSTATE) { in isp_reinit()
4537 isp_prt(isp, ISP_LOGERR, "%s: cannot init card", __func__); in isp_reinit()
4538 ISP_DISABLE_INTS(isp); in isp_reinit()
4542 isp_clear_commands(isp); in isp_reinit()
4543 for (i = 0; i < isp->isp_nchan; i++) in isp_reinit()
4544 isp_clear_portdb(isp, i); in isp_reinit()
4552 flash_data_addr(ispsoftc_t *isp, uint32_t faddr) in flash_data_addr() argument
4554 fcparam *fcp = FCPARAM(isp, 0); in flash_data_addr()
4560 isp_read_flash_dword(ispsoftc_t *isp, uint32_t addr, uint32_t *data) in isp_read_flash_dword() argument
4564 ISP_WRITE(isp, BIU2400_FLASH_ADDR, addr & ~0x80000000); in isp_read_flash_dword()
4566 if (ISP_READ(isp, BIU2400_FLASH_ADDR & 0x80000000)) { in isp_read_flash_dword()
4567 *data = ISP_READ(isp, BIU2400_FLASH_DATA); in isp_read_flash_dword()
4572 isp_prt(isp, ISP_LOGERR, in isp_read_flash_dword()
4579 isp_read_flash_data(ispsoftc_t *isp, uint32_t *dwptr, uint32_t faddr, uint32_t dwords) in isp_read_flash_data() argument
4585 faddr = flash_data_addr(isp, faddr); in isp_read_flash_data()
4587 rval = isp_read_flash_dword(isp, faddr, dwptr); in isp_read_flash_data()
4597 isp_rd_2xxx_flash(ispsoftc_t *isp, uint32_t addr, uint32_t *rp) in isp_rd_2xxx_flash() argument
4599 fcparam *fcp = FCPARAM(isp, 0); in isp_rd_2xxx_flash()
4603 ISP_WRITE(isp, BIU2400_FLASH_ADDR, (base + addr) & ~0x80000000); in isp_rd_2xxx_flash()
4606 if (ISP_READ(isp, BIU2400_FLASH_ADDR & 0x80000000)) { in isp_rd_2xxx_flash()
4607 *rp = ISP_READ(isp, BIU2400_FLASH_DATA); in isp_rd_2xxx_flash()
4608 ISP_SWIZZLE_NVRAM_LONG(isp, rp); in isp_rd_2xxx_flash()
4612 isp_prt(isp, ISP_LOGERR, in isp_rd_2xxx_flash()
4618 isp_read_flthdr_2xxx(ispsoftc_t *isp) in isp_read_flthdr_2xxx() argument
4620 fcparam *fcp = FCPARAM(isp, 0); in isp_read_flthdr_2xxx()
4629 isp_prt(isp, ISP_LOGDEBUG0, "FLTL[DEF]: 0x%x", addr); in isp_read_flthdr_2xxx()
4631 isp_rd_2xxx_flash(isp, addr++, dptr++); in isp_read_flthdr_2xxx()
4636 ISP_IOXGET_16(isp, &dptr[lwrds], tmp); in isp_read_flthdr_2xxx()
4643 isp_parse_flthdr_2xxx(isp, flthdr_data); in isp_read_flthdr_2xxx()
4649 isp_parse_flthdr_2xxx(ispsoftc_t *isp, uint8_t *flthdr_data) in isp_parse_flthdr_2xxx() argument
4651 fcparam *fcp = FCPARAM(isp, 0); in isp_parse_flthdr_2xxx()
4660 isp_prt(isp, ISP_LOGERR, in isp_parse_flthdr_2xxx()
4664 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_flthdr_2xxx()
4670 isp_read_flt_2xxx(ispsoftc_t *isp) in isp_read_flt_2xxx() argument
4672 fcparam *fcp = FCPARAM(isp, 0); in isp_read_flt_2xxx()
4681 isp_prt(isp, ISP_LOGDEBUG0, "FLT[DEF]: regions=%d", in isp_read_flt_2xxx()
4684 isp_rd_2xxx_flash(isp, addr++, dptr++); in isp_read_flt_2xxx()
4686 retval = isp_parse_flt_2xxx(isp, flt_data); in isp_read_flt_2xxx()
4691 isp_parse_flt_2xxx(ispsoftc_t *isp, uint8_t *flt_data) in isp_parse_flt_2xxx() argument
4693 fcparam *fcp = FCPARAM(isp, 0); in isp_parse_flt_2xxx()
4711 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_flt_2xxx()
4725 if (isp->isp_port == 0) in isp_parse_flt_2xxx()
4729 if (isp->isp_port == 1) in isp_parse_flt_2xxx()
4733 if (!IS_27XX(isp)) in isp_parse_flt_2xxx()
4735 if (isp->isp_port == 2) in isp_parse_flt_2xxx()
4739 if (!IS_27XX(isp)) in isp_parse_flt_2xxx()
4741 if (isp->isp_port == 3) in isp_parse_flt_2xxx()
4745 if (isp->isp_port == 0) in isp_parse_flt_2xxx()
4749 if (isp->isp_port == 1) in isp_parse_flt_2xxx()
4753 if (!IS_27XX(isp)) in isp_parse_flt_2xxx()
4755 if (isp->isp_port == 2) in isp_parse_flt_2xxx()
4759 if (!IS_27XX(isp)) in isp_parse_flt_2xxx()
4761 if (isp->isp_port == 3) in isp_parse_flt_2xxx()
4771 if (isp->isp_port == 0) in isp_parse_flt_2xxx()
4775 if (isp->isp_port == 1) in isp_parse_flt_2xxx()
4782 if (isp->isp_port == 0) in isp_parse_flt_2xxx()
4786 if (isp->isp_port == 1) in isp_parse_flt_2xxx()
4790 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4794 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4798 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4802 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4806 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4810 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4814 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4815 if (isp->isp_port == 0) in isp_parse_flt_2xxx()
4819 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4820 if (isp->isp_port == 1) in isp_parse_flt_2xxx()
4824 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4825 if (isp->isp_port == 2) in isp_parse_flt_2xxx()
4829 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4830 if (isp->isp_port == 3) in isp_parse_flt_2xxx()
4835 if (IS_27XX(isp)) { in isp_parse_flt_2xxx()
4837 if (isp->isp_port == 0) in isp_parse_flt_2xxx()
4843 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4844 if (isp->isp_port == 1) in isp_parse_flt_2xxx()
4849 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4850 if (isp->isp_port == 2) in isp_parse_flt_2xxx()
4855 if (IS_27XX(isp)) in isp_parse_flt_2xxx()
4856 if (isp->isp_port == 3) in isp_parse_flt_2xxx()
4861 isp_prt(isp, ISP_LOGCONFIG, in isp_parse_flt_2xxx()
4873 isp_print_image(ispsoftc_t *isp, char *name, struct isp_image_status *image_status) in isp_print_image() argument
4875 isp_prt(isp, ISP_LOGDEBUG0, in isp_print_image()
4944 isp_compare_image_generation(ispsoftc_t *isp, in isp_compare_image_generation() argument
4953 isp_prt(isp, ISP_LOGDEBUG0, "generation delta = %d", delta); in isp_compare_image_generation()
4959 isp_get_aux_images(ispsoftc_t *isp, struct active_regions *active_regions) in isp_get_aux_images() argument
4961 fcparam *fcp = FCPARAM(isp, 0); in isp_get_aux_images()
4967 isp_prt(isp, ISP_LOGWARN, in isp_get_aux_images()
4972 isp_read_flash_data(isp, (uint32_t *)&pri_aux_image_status, in isp_get_aux_images()
4975 isp_print_image(isp, "Primary aux image", &pri_aux_image_status); in isp_get_aux_images()
4978 isp_prt(isp, ISP_LOGERR, in isp_get_aux_images()
4985 isp_prt(isp, ISP_LOGERR, in isp_get_aux_images()
4993 isp_prt(isp, ISP_LOGCONFIG, in isp_get_aux_images()
5000 isp_prt(isp, ISP_LOGWARN, in isp_get_aux_images()
5005 isp_read_flash_data(isp, (uint32_t *)&sec_aux_image_status, in isp_get_aux_images()
5008 isp_print_image(isp, "Secondary aux image", &sec_aux_image_status); in isp_get_aux_images()
5011 isp_prt(isp, ISP_LOGERR, in isp_get_aux_images()
5018 isp_prt(isp, ISP_LOGERR, in isp_get_aux_images()
5026 isp_prt(isp, ISP_LOGCONFIG, in isp_get_aux_images()
5034 if (isp_compare_image_generation(isp, &pri_aux_image_status, in isp_get_aux_images()
5048 isp_prt(isp, ISP_LOGDEBUG0, in isp_get_aux_images()
5058 isp_get_active_image(ispsoftc_t *isp, struct active_regions * active_regions) in isp_get_active_image() argument
5060 fcparam *fcp = FCPARAM(isp, 0); in isp_get_active_image()
5066 isp_prt(isp, ISP_LOGWARN, in isp_get_active_image()
5071 if (isp_read_flash_data(isp, (uint32_t *) &pri_image_status, in isp_get_active_image()
5076 isp_print_image(isp, "Primary image", &pri_image_status); in isp_get_active_image()
5079 isp_prt(isp, ISP_LOGERR, in isp_get_active_image()
5086 isp_prt(isp, ISP_LOGERR, in isp_get_active_image()
5094 isp_prt(isp, ISP_LOGCONFIG, in isp_get_active_image()
5101 isp_prt(isp, ISP_LOGWARN, in isp_get_active_image()
5106 if (isp_read_flash_data(isp, (uint32_t *) &sec_image_status, in isp_get_active_image()
5111 isp_print_image(isp, "Secondary image", &sec_image_status); in isp_get_active_image()
5114 isp_prt(isp, ISP_LOGERR, in isp_get_active_image()
5120 isp_prt(isp, ISP_LOGERR, in isp_get_active_image()
5128 isp_prt(isp, ISP_LOGCONFIG, in isp_get_active_image()
5139 isp_compare_image_generation(isp, in isp_get_active_image()
5145 isp_prt(isp, ISP_LOGDEBUG0, "active image %s (%u)", in isp_get_active_image()
5155 static bool isp_risc_firmware_invalid(ispsoftc_t *isp, uint32_t *dword) in isp_risc_firmware_invalid() argument
5162 isp_load_ram(ispsoftc_t *isp, uint32_t *data, uint32_t risc_addr, in isp_load_ram() argument
5168 MEMORYBARRIER(isp, SYNC_REQUEST, 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)), -1); in isp_load_ram()
5171 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_load_ram()
5172 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_load_ram()
5175 mbs.param[6] = DMA_WD3(isp->isp_rquest_dma); in isp_load_ram()
5176 mbs.param[7] = DMA_WD2(isp->isp_rquest_dma); in isp_load_ram()
5178 isp_prt(isp, ISP_LOGDEBUG0, in isp_load_ram()
5181 isp_mboxcmd(isp, &mbs); in isp_load_ram()
5183 isp_prt(isp, ISP_LOGERR, "F/W download failed"); in isp_load_ram()
5191 isp_load_risc_flash(ispsoftc_t *isp, uint32_t *srisc_addr, uint32_t faddr) in isp_load_risc_flash() argument
5193 fcparam *fcp = FCPARAM(isp, 0); in isp_load_risc_flash()
5202 isp_prt(isp, ISP_LOGDEBUG0, in isp_load_risc_flash()
5205 dcode = isp->isp_rquest; in isp_load_risc_flash()
5206 isp_read_flash_data(isp, dcode, faddr, 8); in isp_load_risc_flash()
5207 if (isp_risc_firmware_invalid(isp, dcode)) { in isp_load_risc_flash()
5210 isp_prt(isp, ISP_LOGERR, in isp_load_risc_flash()
5212 isp_prt(isp, ISP_LOGERR, in isp_load_risc_flash()
5222 isp_prt(isp, ISP_LOGCONFIG, in isp_load_risc_flash()
5228 if (isp->isp_osinfo.ispfw != NULL) { in isp_load_risc_flash()
5235 if (isp->isp_confopts & ISP_CFG_FWLOAD_FORCE) { in isp_load_risc_flash()
5236 isp_prt(isp, ISP_LOGCONFIG, in isp_load_risc_flash()
5243 isp_prt(isp, ISP_LOGCONFIG, in isp_load_risc_flash()
5247 isp_prt(isp, ISP_LOGCONFIG, in isp_load_risc_flash()
5252 dcode = isp->isp_rquest; in isp_load_risc_flash()
5255 isp_prt(isp, ISP_LOGDEBUG0, "Loading segment %u", j); in isp_load_risc_flash()
5256 isp_read_flash_data(isp, dcode, faddr, 10); in isp_load_risc_flash()
5260 dlen = min(risc_size, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)) / 4); in isp_load_risc_flash()
5265 isp_prt(isp, ISP_LOGDEBUG0, in isp_load_risc_flash()
5268 isp_read_flash_data(isp, dcode, faddr, dlen); in isp_load_risc_flash()
5273 rval = isp_load_ram(isp, dcode, risc_addr, dlen); in isp_load_risc_flash()
5275 isp_prt(isp, ISP_LOGERR, in isp_load_risc_flash()
5291 isp_load_risc(ispsoftc_t *isp, uint32_t *srisc_addr) in isp_load_risc() argument
5293 fcparam *fcp = FCPARAM(isp, 0); in isp_load_risc()
5301 if (!IS_27XX(isp)) in isp_load_risc()
5304 isp_get_active_image(isp, &active_regions); in isp_load_risc()
5309 isp_prt(isp, ISP_LOGCONFIG, in isp_load_risc()
5311 rval = isp_load_risc_flash(isp, srisc_addr, fcp->flt_region_fw_sec); in isp_load_risc()
5315 isp_prt(isp, ISP_LOGCONFIG, in isp_load_risc()
5317 rval = isp_load_risc_flash(isp, srisc_addr, fcp->flt_region_fw); in isp_load_risc()
5322 isp_read_nvram(ispsoftc_t *isp) in isp_read_nvram() argument
5324 fcparam *fcp = FCPARAM(isp, 0); in isp_read_nvram()
5330 if (IS_27XX(isp)) in isp_read_nvram()
5331 isp_get_aux_images(isp, &active_regions); in isp_read_nvram()
5335 if (IS_28XX(isp)) { in isp_read_nvram()
5339 isp_prt(isp, ISP_LOGCONFIG, "Loading %s NVRAM image", in isp_read_nvram()
5346 isp_rd_2xxx_flash(isp, addr++, dptr++); in isp_read_nvram()
5350 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM header (%x %x %x)", in isp_read_nvram()
5358 ISP_IOXGET_32(isp, &dptr[lwrds], tmp); in isp_read_nvram()
5362 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM checksum"); in isp_read_nvram()
5366 isp_parse_nvram_2400(isp, nvram_data); in isp_read_nvram()
5372 isp_parse_nvram_2400(ispsoftc_t *isp, uint8_t *nvram_data) in isp_parse_nvram_2400() argument
5374 fcparam *fcp = FCPARAM(isp, 0); in isp_parse_nvram_2400()
5377 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2400()
5384 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2400()
5406 if ((isp->isp_confopts & ISP_CFG_OWNFSZ) == 0) { in isp_parse_nvram_2400()
5407 DEFAULT_FRAMESIZE(isp) = in isp_parse_nvram_2400()
5410 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) { in isp_parse_nvram_2400()