Lines Matching refs:isp
149 isp_change_fw_state(ispsoftc_t *isp, int chan, int state) in isp_change_fw_state() argument
151 fcparam *fcp = FCPARAM(isp, chan); in isp_change_fw_state()
155 isp_prt(isp, ISP_LOGCONFIG|ISP_LOG_SANCFG, in isp_change_fw_state()
170 isp_reset(ispsoftc_t *isp, int do_load_defaults) in isp_reset() argument
190 isp->isp_state = ISP_NILSTATE; in isp_reset()
191 ISP_DISABLE_INTS(isp); in isp_reset()
197 if (IS_24XX(isp)) { in isp_reset()
198 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_HOST_INT); in isp_reset()
199 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); in isp_reset()
200 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE); in isp_reset()
202 ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE); in isp_reset()
205 if (IS_FC(isp)) { in isp_reset()
206 switch (isp->isp_type) { in isp_reset()
238 if (!IS_24XX(isp)) { in isp_reset()
243 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS); in isp_reset()
244 ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET); in isp_reset()
245 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS); in isp_reset()
246 ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL); in isp_reset()
247 ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS); in isp_reset()
249 } else if (IS_1240(isp)) { in isp_reset()
253 isp->isp_clock = 60; in isp_reset()
254 sdp = SDPARAM(isp, 0); in isp_reset()
256 sdp = SDPARAM(isp, 1); in isp_reset()
261 } else if (IS_ULTRA3(isp)) { in isp_reset()
262 sdparam *sdp = isp->isp_param; in isp_reset()
264 isp->isp_clock = 100; in isp_reset()
266 if (IS_10160(isp)) in isp_reset()
268 else if (IS_12160(isp)) in isp_reset()
274 if (IS_DUALBUS(isp)) { in isp_reset()
278 } else if (IS_ULTRA2(isp)) { in isp_reset()
281 sdparam *sdp = SDPARAM(isp, 0); in isp_reset()
283 isp->isp_clock = 100; in isp_reset()
285 if (IS_1280(isp)) in isp_reset()
287 else if (IS_1080(isp)) in isp_reset()
292 l = ISP_READ(isp, SXP_PINS_DIFF) & ISP1080_MODE_MASK; in isp_reset()
296 isp_prt(isp, ISP_LOGCONFIG, m, 0, "LVD"); in isp_reset()
300 isp_prt(isp, ISP_LOGCONFIG, m, 0, "Differential"); in isp_reset()
304 isp_prt(isp, ISP_LOGCONFIG, m, 0, "Single-Ended"); in isp_reset()
307 isp_prt(isp, ISP_LOGERR, in isp_reset()
312 if (IS_DUALBUS(isp)) { in isp_reset()
313 sdp = SDPARAM(isp, 1); in isp_reset()
314 l = ISP_READ(isp, SXP_PINS_DIFF|SXP_BANK1_SELECT); in isp_reset()
319 isp_prt(isp, ISP_LOGCONFIG, m, 1, "LVD"); in isp_reset()
323 isp_prt(isp, ISP_LOGCONFIG, in isp_reset()
328 isp_prt(isp, ISP_LOGCONFIG, in isp_reset()
332 isp_prt(isp, ISP_LOGERR, in isp_reset()
338 sdparam *sdp = SDPARAM(isp, 0); in isp_reset()
339 i = ISP_READ(isp, BIU_CONF0) & BIU_CONF0_HW_MASK; in isp_reset()
342 isp_prt(isp, ISP_LOGALL, "Unknown Chip Type 0x%x", i); in isp_reset()
346 isp->isp_type = ISP_HA_SCSI_1020; in isp_reset()
347 isp->isp_clock = 40; in isp_reset()
356 isp->isp_type = ISP_HA_SCSI_1020A; in isp_reset()
357 isp->isp_clock = 40; in isp_reset()
361 isp->isp_type = ISP_HA_SCSI_1040; in isp_reset()
362 isp->isp_clock = 60; in isp_reset()
366 isp->isp_type = ISP_HA_SCSI_1040A; in isp_reset()
367 isp->isp_clock = 60; in isp_reset()
371 isp->isp_type = ISP_HA_SCSI_1040B; in isp_reset()
372 isp->isp_clock = 60; in isp_reset()
376 isp->isp_type = ISP_HA_SCSI_1040C; in isp_reset()
377 isp->isp_clock = 60; in isp_reset()
384 if (ISP_READ(isp, SXP_PINS_DIFF) & SXP_PINS_DIFF_MODE) { in isp_reset()
385 isp_prt(isp, ISP_LOGCONFIG, "Differential Mode"); in isp_reset()
390 i = ISP_READ(isp, RISC_PSR); in isp_reset()
391 if (isp->isp_bustype == ISP_BT_SBUS) { in isp_reset()
397 isp_prt(isp, ISP_LOGCONFIG, "Ultra Mode Capable"); in isp_reset()
403 isp->isp_clock = 60; in isp_reset()
415 if (isp->isp_mdvec->dv_clock) { in isp_reset()
416 if (isp->isp_mdvec->dv_clock < isp->isp_clock) { in isp_reset()
417 isp->isp_clock = isp->isp_mdvec->dv_clock; in isp_reset()
427 if (IS_SCSI(isp)) { in isp_reset()
428 ISP_WRITE(isp, BIU_ICR, BIU_ICR_SOFT_RESET); in isp_reset()
437 ISP_WRITE(isp, CDMA_CONTROL, DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT); in isp_reset()
438 ISP_WRITE(isp, DDMA_CONTROL, DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT); in isp_reset()
441 } else if (IS_24XX(isp)) { in isp_reset()
445 ISP_WRITE(isp, BIU2400_CSR, BIU2400_DMA_STOP|(3 << 4)); in isp_reset()
448 val = ISP_READ(isp, BIU2400_CSR); in isp_reset()
454 isp_prt(isp, ISP_LOGERR, "DMA Failed to Stop on Reset"); in isp_reset()
460 ISP_WRITE(isp, BIU2400_CSR, BIU2400_SOFT_RESET|BIU2400_DMA_STOP|(3 << 4)); in isp_reset()
464 val = ISP_READ(isp, OUTMAILBOX0); in isp_reset()
467 val = ISP_READ(isp, BIU2400_CSR); in isp_reset()
473 isp_prt(isp, ISP_LOGERR, "Failed to come out of reset"); in isp_reset()
477 ISP_WRITE(isp, BIU2100_CSR, BIU2100_SOFT_RESET); in isp_reset()
486 ISP_WRITE(isp, CDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); in isp_reset()
487 ISP_WRITE(isp, TDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); in isp_reset()
488 ISP_WRITE(isp, RDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); in isp_reset()
496 if (IS_SCSI(isp)) { in isp_reset()
497 if (!(ISP_READ(isp, BIU_ICR) & BIU_ICR_SOFT_RESET)) { in isp_reset()
500 } else if (IS_24XX(isp)) { in isp_reset()
501 if (ISP_READ(isp, OUTMAILBOX0) == 0) { in isp_reset()
505 if (!(ISP_READ(isp, BIU2100_CSR) & BIU2100_SOFT_RESET)) in isp_reset()
510 ISP_DUMPREGS(isp, "chip reset timed out"); in isp_reset()
520 if (IS_SCSI(isp)) { in isp_reset()
521 ISP_WRITE(isp, BIU_CONF1, 0); in isp_reset()
522 } else if (!IS_24XX(isp)) { in isp_reset()
523 ISP_WRITE(isp, BIU2100_CSR, 0); in isp_reset()
529 if (IS_24XX(isp)) { in isp_reset()
530 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_RESET); in isp_reset()
531 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_RELEASE); in isp_reset()
532 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RESET); in isp_reset()
534 ISP_WRITE(isp, HCCR, HCCR_CMD_RESET); in isp_reset()
536 ISP_WRITE(isp, BIU_SEMA, 0); in isp_reset()
542 if (IS_24XX(isp)) { in isp_reset()
545 val = ISP_READ(isp, OUTMAILBOX0); in isp_reset()
551 isp_prt(isp, ISP_LOGERR, "reset didn't clear"); in isp_reset()
554 } else if (IS_SCSI(isp)) { in isp_reset()
555 uint16_t tmp = isp->isp_mdvec->dv_conf1; in isp_reset()
559 if (isp->isp_type == ISP_HA_SCSI_1040A) { in isp_reset()
562 ISP_SETBITS(isp, BIU_CONF1, tmp); in isp_reset()
564 ISP_SETBITS(isp, CDMA_CONF, DMA_ENABLE_BURST); in isp_reset()
565 ISP_SETBITS(isp, DDMA_CONF, DMA_ENABLE_BURST); in isp_reset()
567 if (SDPARAM(isp, 0)->isp_ptisp) { in isp_reset()
568 if (SDPARAM(isp, 0)->isp_ultramode) { in isp_reset()
569 while (ISP_READ(isp, RISC_MTR) != 0x1313) { in isp_reset()
570 ISP_WRITE(isp, RISC_MTR, 0x1313); in isp_reset()
571 ISP_WRITE(isp, HCCR, HCCR_CMD_STEP); in isp_reset()
574 ISP_WRITE(isp, RISC_MTR, 0x1212); in isp_reset()
579 ISP_WRITE(isp, RISC_EMB, DUAL_BANK); in isp_reset()
581 ISP_WRITE(isp, RISC_MTR, 0x1212); in isp_reset()
583 ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); in isp_reset()
585 ISP_WRITE(isp, RISC_MTR2100, 0x1212); in isp_reset()
586 if (IS_2200(isp) || IS_23XX(isp)) { in isp_reset()
587 ISP_WRITE(isp, HCCR, HCCR_2X00_DISABLE_PARITY_PAUSE); in isp_reset()
589 ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); in isp_reset()
596 if (IS_24XX(isp)) { in isp_reset()
597 isp->isp_rqstinrp = BIU2400_REQINP; in isp_reset()
598 isp->isp_rqstoutrp = BIU2400_REQOUTP; in isp_reset()
599 isp->isp_respinrp = BIU2400_RSPINP; in isp_reset()
600 isp->isp_respoutrp = BIU2400_RSPOUTP; in isp_reset()
601 } else if (IS_23XX(isp)) { in isp_reset()
602 isp->isp_rqstinrp = BIU_REQINP; in isp_reset()
603 isp->isp_rqstoutrp = BIU_REQOUTP; in isp_reset()
604 isp->isp_respinrp = BIU_RSPINP; in isp_reset()
605 isp->isp_respoutrp = BIU_RSPOUTP; in isp_reset()
607 isp->isp_rqstinrp = INMAILBOX4; in isp_reset()
608 isp->isp_rqstoutrp = OUTMAILBOX4; in isp_reset()
609 isp->isp_respinrp = OUTMAILBOX5; in isp_reset()
610 isp->isp_respoutrp = INMAILBOX5; in isp_reset()
612 ISP_WRITE(isp, isp->isp_rqstinrp, 0); in isp_reset()
613 ISP_WRITE(isp, isp->isp_rqstoutrp, 0); in isp_reset()
614 ISP_WRITE(isp, isp->isp_respinrp, 0); in isp_reset()
615 ISP_WRITE(isp, isp->isp_respoutrp, 0); in isp_reset()
616 if (IS_24XX(isp)) { in isp_reset()
617 if (!IS_26XX(isp)) { in isp_reset()
618 ISP_WRITE(isp, BIU2400_PRI_REQINP, 0); in isp_reset()
619 ISP_WRITE(isp, BIU2400_PRI_REQOUTP, 0); in isp_reset()
621 ISP_WRITE(isp, BIU2400_ATIO_RSPINP, 0); in isp_reset()
622 ISP_WRITE(isp, BIU2400_ATIO_RSPOUTP, 0); in isp_reset()
625 if (!IS_24XX(isp) && isp->isp_bustype == ISP_BT_PCI) { in isp_reset()
627 ISP_WRITE(isp, HCCR, PCI_HCCR_CMD_BIOS); in isp_reset()
636 if (IS_2312(isp) && isp->isp_revision < 2) { in isp_reset()
640 while (ISP_READ(isp, OUTMAILBOX0) == MBOX_BUSY) { in isp_reset()
643 isp_prt(isp, ISP_LOGERR, "MBOX_BUSY never cleared on reset"); in isp_reset()
660 isp_mboxcmd(isp, &mbs); in isp_reset()
662 isp_prt(isp, ISP_LOGERR, "NOP command failed (%x)", mbs.param[0]); in isp_reset()
669 if (IS_SCSI(isp) || IS_24XX(isp)) { in isp_reset()
680 int nmbox = ISP_NMBOX(isp); in isp_reset()
681 if (IS_SCSI(isp)) in isp_reset()
687 isp_mboxcmd(isp, &mbs); in isp_reset()
693 …isp_prt(isp, ISP_LOGERR, "Register Test Failed at Register %d: should have 0x%04x but got 0x%04x",… in isp_reset()
708 if ((isp->isp_mdvec->dv_ispfw == NULL) || (isp->isp_confopts & ISP_CFG_NORELOAD)) { in isp_reset()
717 if (ISP_MBOXDMASETUP(isp) != 0) { in isp_reset()
718 isp_prt(isp, ISP_LOGERR, "Cannot setup DMA"); in isp_reset()
723 if (IS_24XX(isp)) { in isp_reset()
725 } else if (IS_23XX(isp)) { in isp_reset()
731 isp->isp_loaded_fw = 0; in isp_reset()
732 if (dodnld && IS_24XX(isp)) { in isp_reset()
733 const uint32_t *ptr = isp->isp_mdvec->dv_ispfw; in isp_reset()
743 isp_prt(isp, ISP_LOGDEBUG0, "load 0x%x words of code at load address 0x%x", ptr[3], ptr[2]); in isp_reset()
752 nw = min(wl, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)) / 4); in isp_reset()
753 cp = isp->isp_rquest; in isp_reset()
755 ISP_IOXPUT_32(isp, ptr[wi + i], &cp[i]); in isp_reset()
756 MEMORYBARRIER(isp, SYNC_REQUEST, 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)), -1); in isp_reset()
759 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_reset()
760 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_reset()
763 mbs.param[6] = DMA_WD3(isp->isp_rquest_dma); in isp_reset()
764 mbs.param[7] = DMA_WD2(isp->isp_rquest_dma); in isp_reset()
766 isp_prt(isp, ISP_LOGDEBUG0, "LOAD RISC RAM %u words at load address 0x%x", nw, la); in isp_reset()
767 isp_mboxcmd(isp, &mbs); in isp_reset()
769 isp_prt(isp, ISP_LOGERR, "F/W download failed"); in isp_reset()
782 isp->isp_loaded_fw = 1; in isp_reset()
783 } else if (dodnld && IS_23XX(isp)) { in isp_reset()
784 const uint16_t *ptr = isp->isp_mdvec->dv_ispfw; in isp_reset()
794 isp_prt(isp, ISP_LOGDEBUG0, "load 0x%x words of code at load address 0x%x", ptr[3], la); in isp_reset()
803 nw = min(wl, min((1 << 15), ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)) / 2)); in isp_reset()
804 cp = isp->isp_rquest; in isp_reset()
806 ISP_IOXPUT_16(isp, ptr[wi + i], &cp[i]); in isp_reset()
807 MEMORYBARRIER(isp, SYNC_REQUEST, 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)), -1); in isp_reset()
812 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_reset()
813 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_reset()
815 mbs.param[6] = DMA_WD3(isp->isp_rquest_dma); in isp_reset()
816 mbs.param[7] = DMA_WD2(isp->isp_rquest_dma); in isp_reset()
817 isp_prt(isp, ISP_LOGDEBUG1, "LOAD RISC RAM 2100 %u words at load address 0x%x\n", nw, la); in isp_reset()
821 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_reset()
822 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_reset()
824 mbs.param[6] = DMA_WD3(isp->isp_rquest_dma); in isp_reset()
825 mbs.param[7] = DMA_WD2(isp->isp_rquest_dma); in isp_reset()
827 isp_prt(isp, ISP_LOGDEBUG1, "LOAD RISC RAM %u words at load address 0x%x\n", nw, la); in isp_reset()
829 isp_mboxcmd(isp, &mbs); in isp_reset()
831 isp_prt(isp, ISP_LOGERR, "F/W download failed"); in isp_reset()
839 if (!IS_2322(isp)) { in isp_reset()
859 isp->isp_loaded_fw = 1; in isp_reset()
861 const uint16_t *ptr = isp->isp_mdvec->dv_ispfw; in isp_reset()
865 isp_prt(isp, ISP_LOGDEBUG1, in isp_reset()
871 isp_mboxcmd(isp, &mbs); in isp_reset()
873 isp_prt(isp, ISP_LOGERR, in isp_reset()
878 } else if (IS_26XX(isp)) { in isp_reset()
879 isp_prt(isp, ISP_LOGDEBUG1, "loading firmware from flash"); in isp_reset()
883 isp_mboxcmd(isp, &mbs); in isp_reset()
885 isp_prt(isp, ISP_LOGERR, "Flash F/W load failed"); in isp_reset()
889 isp_prt(isp, ISP_LOGDEBUG2, "skipping f/w download"); in isp_reset()
895 if (isp->isp_loaded_fw) { in isp_reset()
897 if (IS_24XX(isp)) { in isp_reset()
903 isp_mboxcmd(isp, &mbs); in isp_reset()
905 isp_prt(isp, ISP_LOGERR, dcrc); in isp_reset()
917 if (IS_26XX(isp)) { in isp_reset()
920 } else if (IS_24XX(isp)) { in isp_reset()
923 if (isp->isp_loaded_fw) { in isp_reset()
928 } else if (IS_2322(isp)) { in isp_reset()
930 if (isp->isp_loaded_fw) { in isp_reset()
938 isp_mboxcmd(isp, &mbs); in isp_reset()
939 if (IS_2322(isp) || IS_24XX(isp)) { in isp_reset()
945 if (IS_SCSI(isp)) { in isp_reset()
949 if (isp->isp_clock) { in isp_reset()
951 mbs.param[1] = isp->isp_clock; in isp_reset()
952 isp_mboxcmd(isp, &mbs); in isp_reset()
962 isp_mboxcmd(isp, &mbs); in isp_reset()
972 if (ISP_SBUS_SUPPORTED && isp->isp_bustype == ISP_BT_SBUS) { in isp_reset()
975 isp->isp_fwrev[0] = 7; in isp_reset()
976 isp->isp_fwrev[1] = 55; in isp_reset()
978 isp->isp_fwrev[0] = 1; in isp_reset()
979 isp->isp_fwrev[1] = 37; in isp_reset()
981 isp->isp_fwrev[2] = 0; in isp_reset()
984 isp->isp_fwrev[0] = mbs.param[1]; in isp_reset()
985 isp->isp_fwrev[1] = mbs.param[2]; in isp_reset()
986 isp->isp_fwrev[2] = mbs.param[3]; in isp_reset()
989 if (IS_FC(isp)) { in isp_reset()
997 if ((ISP_FW_OLDER_THAN(isp, 1, 17, 1))) { in isp_reset()
999 isp->isp_fwattr = ISP_FW_ATTR_SCCLUN; in isp_reset()
1001 isp->isp_fwattr = 0; in isp_reset()
1004 isp->isp_fwattr = mbs.param[6]; in isp_reset()
1006 if (IS_24XX(isp)) { in isp_reset()
1007 isp->isp_fwattr |= ((uint64_t) mbs.param[15]) << 16; in isp_reset()
1008 if (isp->isp_fwattr & ISP2400_FW_ATTR_EXTNDED) { in isp_reset()
1009 isp->isp_fwattr |= in isp_reset()
1015 isp->isp_fwattr = 0; in isp_reset()
1018 isp_prt(isp, ISP_LOGCONFIG, "Board Type %s, Chip Revision 0x%x, %s F/W Revision %d.%d.%d", in isp_reset()
1019 …btype, isp->isp_revision, dodnld? "loaded" : "resident", isp->isp_fwrev[0], isp->isp_fwrev[1], isp… in isp_reset()
1021 fwt = isp->isp_fwattr; in isp_reset()
1022 if (IS_24XX(isp)) { in isp_reset()
1023 buf = FCPARAM(isp, 0)->isp_scanscratch; in isp_reset()
1110 isp_prt(isp, ISP_LOGCONFIG, "%s", buf); in isp_reset()
1111 } else if (IS_FC(isp)) { in isp_reset()
1112 buf = FCPARAM(isp, 0)->isp_scanscratch; in isp_reset()
1154 isp_prt(isp, ISP_LOGCONFIG, "%s", buf); in isp_reset()
1157 if (IS_24XX(isp)) { in isp_reset()
1159 isp_mboxcmd(isp, &mbs); in isp_reset()
1163 isp->isp_maxcmds = mbs.param[3]; in isp_reset()
1166 isp_mboxcmd(isp, &mbs); in isp_reset()
1170 isp->isp_maxcmds = mbs.param[2]; in isp_reset()
1172 isp_prt(isp, ISP_LOGCONFIG, "%d max I/O command limit set", isp->isp_maxcmds); in isp_reset()
1179 if (IS_FC(isp) && isp->isp_nchan > 1) { in isp_reset()
1180 if (!ISP_CAP_MULTI_ID(isp)) { in isp_reset()
1181 isp_prt(isp, ISP_LOGWARN, "non-MULTIID f/w loaded, " in isp_reset()
1182 "only can enable 1 of %d channels", isp->isp_nchan); in isp_reset()
1183 isp->isp_nchan = 1; in isp_reset()
1184 } else if (!ISP_CAP_VP0(isp)) { in isp_reset()
1185 isp_prt(isp, ISP_LOGWARN, "We can not use MULTIID " in isp_reset()
1187 isp->isp_nchan = 1; in isp_reset()
1194 if (ISP_MBOXDMASETUP(isp) != 0) { in isp_reset()
1195 isp_prt(isp, ISP_LOGERR, "Cannot setup DMA"); in isp_reset()
1202 if (ISP_IRQSETUP(isp) != 0) { in isp_reset()
1203 isp_prt(isp, ISP_LOGERR, "Cannot setup IRQ"); in isp_reset()
1206 ISP_ENABLE_INTS(isp); in isp_reset()
1208 if (IS_FC(isp)) { in isp_reset()
1209 for (i = 0; i < isp->isp_nchan; i++) in isp_reset()
1210 isp_change_fw_state(isp, i, FW_CONFIG_WAIT); in isp_reset()
1213 isp->isp_state = ISP_RESETSTATE; in isp_reset()
1232 if (IS_SCSI(isp)) { in isp_reset()
1234 if (IS_ULTRA2(isp) || IS_ULTRA3(isp)) { in isp_reset()
1235 isp->isp_maxluns = 32; in isp_reset()
1237 isp->isp_maxluns = 8; in isp_reset()
1240 isp->isp_maxluns = 8; in isp_reset()
1243 if (ISP_CAP_SCCFW(isp)) { in isp_reset()
1244 isp->isp_maxluns = 0; /* No limit -- 2/8 bytes */ in isp_reset()
1246 isp->isp_maxluns = 16; in isp_reset()
1256 if (IS_SCSI(isp)) { in isp_reset()
1257 isp_setdfltsdparm(isp); in isp_reset()
1259 for (i = 0; i < isp->isp_nchan; i++) { in isp_reset()
1260 isp_setdfltfcparm(isp, i); in isp_reset()
1270 isp_stop(ispsoftc_t *isp) in isp_stop() argument
1274 isp->isp_state = ISP_NILSTATE; in isp_stop()
1284 isp_mboxcmd(isp, &mbs); in isp_stop()
1292 isp_shutdown(ispsoftc_t *isp) in isp_shutdown() argument
1295 if (isp->isp_state >= ISP_RESETSTATE) in isp_shutdown()
1296 isp_stop(isp); in isp_shutdown()
1297 ISP_DISABLE_INTS(isp); in isp_shutdown()
1298 if (IS_FC(isp)) { in isp_shutdown()
1299 if (IS_24XX(isp)) { in isp_shutdown()
1300 ISP_WRITE(isp, BIU2400_ICR, 0); in isp_shutdown()
1301 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE); in isp_shutdown()
1303 ISP_WRITE(isp, BIU_ICR, 0); in isp_shutdown()
1304 ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE); in isp_shutdown()
1305 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS); in isp_shutdown()
1306 ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET); in isp_shutdown()
1307 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS); in isp_shutdown()
1308 ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL); in isp_shutdown()
1309 ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS); in isp_shutdown()
1312 ISP_WRITE(isp, BIU_ICR, 0); in isp_shutdown()
1313 ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE); in isp_shutdown()
1323 isp_init(ispsoftc_t *isp) in isp_init() argument
1325 if (IS_FC(isp)) { in isp_init()
1326 if (IS_24XX(isp)) { in isp_init()
1327 isp_fibre_init_2400(isp); in isp_init()
1329 isp_fibre_init(isp); in isp_init()
1332 isp_scsi_init(isp); in isp_init()
1337 isp_scsi_init(ispsoftc_t *isp) in isp_scsi_init() argument
1342 isp->isp_state = ISP_INITSTATE; in isp_scsi_init()
1344 sdp_chan0 = SDPARAM(isp, 0); in isp_scsi_init()
1346 if (IS_DUALBUS(isp)) { in isp_scsi_init()
1347 sdp_chan1 = SDPARAM(isp, 1); in isp_scsi_init()
1356 ISP_WRITE(isp, RISC_MTR, 0x1313); in isp_scsi_init()
1368 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1379 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1394 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1396 isp_prt(isp, ISP_LOGERR, in isp_scsi_init()
1413 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1415 isp_prt(isp, ISP_LOGERR, "failed to set tag age limit (%d,%d)", in isp_scsi_init()
1426 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1432 isp_scsi_channel_init(isp, 0); in isp_scsi_init()
1433 if (IS_DUALBUS(isp)) in isp_scsi_init()
1434 isp_scsi_channel_init(isp, 1); in isp_scsi_init()
1440 if (IS_ULTRA2(isp) || IS_1240(isp)) { in isp_scsi_init()
1442 mbs.param[1] = RESULT_QUEUE_LEN(isp); in isp_scsi_init()
1443 mbs.param[2] = DMA_WD1(isp->isp_result_dma); in isp_scsi_init()
1444 mbs.param[3] = DMA_WD0(isp->isp_result_dma); in isp_scsi_init()
1446 mbs.param[6] = DMA_WD3(isp->isp_result_dma); in isp_scsi_init()
1447 mbs.param[7] = DMA_WD2(isp->isp_result_dma); in isp_scsi_init()
1448 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1452 isp->isp_residx = isp->isp_resodx = mbs.param[5]; in isp_scsi_init()
1455 mbs.param[1] = RQUEST_QUEUE_LEN(isp); in isp_scsi_init()
1456 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_scsi_init()
1457 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_scsi_init()
1459 mbs.param[6] = DMA_WD3(isp->isp_result_dma); in isp_scsi_init()
1460 mbs.param[7] = DMA_WD2(isp->isp_result_dma); in isp_scsi_init()
1461 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1465 isp->isp_reqidx = isp->isp_reqodx = mbs.param[4]; in isp_scsi_init()
1468 mbs.param[1] = RESULT_QUEUE_LEN(isp); in isp_scsi_init()
1469 mbs.param[2] = DMA_WD1(isp->isp_result_dma); in isp_scsi_init()
1470 mbs.param[3] = DMA_WD0(isp->isp_result_dma); in isp_scsi_init()
1472 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1476 isp->isp_residx = isp->isp_resodx = mbs.param[5]; in isp_scsi_init()
1479 mbs.param[1] = RQUEST_QUEUE_LEN(isp); in isp_scsi_init()
1480 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_scsi_init()
1481 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_scsi_init()
1483 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1487 isp->isp_reqidx = isp->isp_reqodx = mbs.param[4]; in isp_scsi_init()
1501 if (IS_ULTRA2(isp)) in isp_scsi_init()
1504 if (IS_ULTRA3(isp)) in isp_scsi_init()
1507 if (IS_ULTRA3(isp)) in isp_scsi_init()
1512 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1514 isp_prt(isp, ISP_LOGINFO, in isp_scsi_init()
1519 isp->isp_state = ISP_RUNSTATE; in isp_scsi_init()
1523 isp_scsi_channel_init(ispsoftc_t *isp, int chan) in isp_scsi_channel_init() argument
1529 sdp = SDPARAM(isp, chan); in isp_scsi_channel_init()
1536 isp_mboxcmd(isp, &mbs); in isp_scsi_channel_init()
1540 isp_prt(isp, ISP_LOGINFO, "Chan %d Initiator ID is %d", in isp_scsi_channel_init()
1563 if (isp->isp_loaded_fw) { in isp_scsi_channel_init()
1587 isp_prt(isp, ISP_LOGDEBUG0, "Initial Settings bus%d tgt%d flags 0x%x off 0x%x per 0x%x", in isp_scsi_channel_init()
1589 isp_mboxcmd(isp, &mbs); in isp_scsi_channel_init()
1596 isp_mboxcmd(isp, &mbs); in isp_scsi_channel_init()
1614 for (lun = 0; lun < (int) isp->isp_maxluns; lun++) { in isp_scsi_channel_init()
1619 isp_mboxcmd(isp, &mbs); in isp_scsi_channel_init()
1638 isp_fibre_init(ispsoftc_t *isp) in isp_fibre_init() argument
1648 fcp = FCPARAM(isp, 0); in isp_fibre_init()
1652 isp->isp_state = ISP_INITSTATE; in isp_fibre_init()
1667 if (IS_2100(isp) && isp->isp_revision < 5) { in isp_fibre_init()
1676 if (!ISP_FW_NEWER_THAN(isp, 1, 17, 0)) { in isp_fibre_init()
1699 if ((fcp->role & ISP_ROLE_INITIATOR) || IS_2100(isp) || IS_2200(isp)) { in isp_fibre_init()
1705 icbp->icb_maxfrmlen = DEFAULT_FRAMESIZE(isp); in isp_fibre_init()
1707 …isp_prt(isp, ISP_LOGERR, "bad frame length (%d) from NVRAM- using %d", DEFAULT_FRAMESIZE(isp), ICB… in isp_fibre_init()
1712 isp_prt(isp, ISP_LOGERR, "bad maximum allocation (%d)- using 16", fcp->isp_maxalloc); in isp_fibre_init()
1715 icbp->icb_execthrottle = DEFAULT_EXEC_THROTTLE(isp); in isp_fibre_init()
1717 …isp_prt(isp, ISP_LOGERR, "bad execution throttle of %d- using %d", DEFAULT_EXEC_THROTTLE(isp), ICB… in isp_fibre_init()
1723 ownloopid = (isp->isp_confopts & ISP_CFG_OWNLOOPID) != 0; in isp_fibre_init()
1733 if (ownloopid || ISP_FW_NEWER_THAN(isp, 2, 2, 5)) { in isp_fibre_init()
1743 if (IS_2100(isp)) { in isp_fibre_init()
1749 } else if (IS_2200(isp) || IS_23XX(isp)) { in isp_fibre_init()
1754 if (ISP_CAP_FCTAPE(isp)) { in isp_fibre_init()
1755 if (isp->isp_confopts & ISP_CFG_NOFCTAPE) in isp_fibre_init()
1758 if (isp->isp_confopts & ISP_CFG_FCTAPE) in isp_fibre_init()
1764 FCPARAM(isp, 0)->fctape_enabled = 1; in isp_fibre_init()
1766 FCPARAM(isp, 0)->fctape_enabled = 0; in isp_fibre_init()
1770 FCPARAM(isp, 0)->fctape_enabled = 0; in isp_fibre_init()
1776 switch (isp->isp_confopts & ISP_CFG_PORT_PREF) { in isp_fibre_init()
1807 if (IS_2200(isp)) { in isp_fibre_init()
1831 if (isp->isp_confopts & ISP_CFG_1GB) { in isp_fibre_init()
1834 } else if (isp->isp_confopts & ISP_CFG_2GB) { in isp_fibre_init()
1856 if (ISP_FW_NEWER_THAN(isp, 2, 26, 0)) { in isp_fibre_init()
1861 if (ISP_FW_NEWER_THAN(isp, 3, 16, 0)) { in isp_fibre_init()
1864 if (ISP_FW_NEWER_THAN(isp, 3, 25, 0)) { in isp_fibre_init()
1870 isp_mboxcmd(isp, &mbs); in isp_fibre_init()
1889 isp_prt(isp, ISP_LOGDEBUG1, in isp_fibre_init()
1898 isp_prt(isp, ISP_LOGDEBUG1, in isp_fibre_init()
1903 isp_prt(isp, ISP_LOGERR, "No valid WWNs to use"); in isp_fibre_init()
1906 icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp); in isp_fibre_init()
1908 isp_prt(isp, ISP_LOGERR, "bad request queue length"); in isp_fibre_init()
1910 icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp); in isp_fibre_init()
1912 isp_prt(isp, ISP_LOGERR, "bad result queue length"); in isp_fibre_init()
1914 icbp->icb_rqstaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_rquest_dma); in isp_fibre_init()
1915 icbp->icb_rqstaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_rquest_dma); in isp_fibre_init()
1916 icbp->icb_rqstaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_rquest_dma); in isp_fibre_init()
1917 icbp->icb_rqstaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_rquest_dma); in isp_fibre_init()
1918 icbp->icb_respaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_result_dma); in isp_fibre_init()
1919 icbp->icb_respaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_result_dma); in isp_fibre_init()
1920 icbp->icb_respaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_result_dma); in isp_fibre_init()
1921 icbp->icb_respaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_result_dma); in isp_fibre_init()
1923 if (FC_SCRATCH_ACQUIRE(isp, 0)) { in isp_fibre_init()
1924 isp_prt(isp, ISP_LOGERR, sacq); in isp_fibre_init()
1927 isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init: fwopt 0x%x xfwopt 0x%x zfwopt 0x%x", in isp_fibre_init()
1930 isp_put_icb(isp, icbp, (isp_icb_t *)fcp->isp_scratch); in isp_fibre_init()
1931 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_fibre_init()
1932 isp_print_bytes(isp, "isp_fibre_init", in isp_fibre_init()
1945 isp_prt(isp, ISP_LOGDEBUG0, "INIT F/W from %p (%08x%08x)", in isp_fibre_init()
1948 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (*icbp), 0); in isp_fibre_init()
1949 isp_mboxcmd(isp, &mbs); in isp_fibre_init()
1950 FC_SCRATCH_RELEASE(isp, 0); in isp_fibre_init()
1953 isp->isp_reqidx = 0; in isp_fibre_init()
1954 isp->isp_reqodx = 0; in isp_fibre_init()
1955 isp->isp_residx = 0; in isp_fibre_init()
1956 isp->isp_resodx = 0; in isp_fibre_init()
1961 isp->isp_state = ISP_RUNSTATE; in isp_fibre_init()
1965 isp_fibre_init_2400(ispsoftc_t *isp) in isp_fibre_init_2400() argument
1976 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_fibre_init_2400()
1977 fcp = FCPARAM(isp, chan); in isp_fibre_init_2400()
1982 if (chan == isp->isp_nchan) { in isp_fibre_init_2400()
1983 isp_prt(isp, ISP_LOG_WARN1, "all %d channels with role 'none'", chan); in isp_fibre_init_2400()
1987 isp->isp_state = ISP_INITSTATE; in isp_fibre_init_2400()
1992 fcp = FCPARAM(isp, 0); in isp_fibre_init_2400()
1999 isp_mboxcmd(isp, &mbs); in isp_fibre_init_2400()
2008 if (isp->isp_nchan > 1 && ISP_CAP_VP0(isp)) { in isp_fibre_init_2400()
2023 icbp->icb_maxfrmlen = DEFAULT_FRAMESIZE(isp); in isp_fibre_init_2400()
2025 …isp_prt(isp, ISP_LOGERR, "bad frame length (%d) from NVRAM- using %d", DEFAULT_FRAMESIZE(isp), ICB… in isp_fibre_init_2400()
2029 icbp->icb_execthrottle = DEFAULT_EXEC_THROTTLE(isp); in isp_fibre_init_2400()
2030 if (icbp->icb_execthrottle < 1 && !IS_26XX(isp)) { in isp_fibre_init_2400()
2031 …isp_prt(isp, ISP_LOGERR, "bad execution throttle of %d- using %d", DEFAULT_EXEC_THROTTLE(isp), ICB… in isp_fibre_init_2400()
2039 icbp->icb_xchgcnt = isp->isp_maxcmds; in isp_fibre_init_2400()
2045 ownloopid = (isp->isp_confopts & ISP_CFG_OWNLOOPID) != 0; in isp_fibre_init_2400()
2055 if (isp->isp_confopts & ISP_CFG_NOFCTAPE) { in isp_fibre_init_2400()
2058 if (isp->isp_confopts & ISP_CFG_FCTAPE) { in isp_fibre_init_2400()
2062 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_fibre_init_2400()
2064 FCPARAM(isp, chan)->fctape_enabled = 1; in isp_fibre_init_2400()
2066 FCPARAM(isp, chan)->fctape_enabled = 0; in isp_fibre_init_2400()
2069 switch (isp->isp_confopts & ISP_CFG_PORT_PREF) { in isp_fibre_init_2400()
2106 …isp_prt(isp, ISP_LOGWARN, "bad value %x in fwopt2 timer field", icbp->icb_fwoptions2 & ICB2400_OPT… in isp_fibre_init_2400()
2111 if (IS_26XX(isp)) { in isp_fibre_init_2400()
2120 if (isp->isp_confopts & ISP_CFG_1GB) { in isp_fibre_init_2400()
2123 } else if (isp->isp_confopts & ISP_CFG_2GB) { in isp_fibre_init_2400()
2126 } else if (isp->isp_confopts & ISP_CFG_4GB) { in isp_fibre_init_2400()
2129 } else if (isp->isp_confopts & ISP_CFG_8GB) { in isp_fibre_init_2400()
2132 } else if (isp->isp_confopts & ISP_CFG_16GB) { in isp_fibre_init_2400()
2135 } else if (isp->isp_confopts & ISP_CFG_32GB) { in isp_fibre_init_2400()
2147 if (isp->isp_type <= ISP_HA_FC_2500) in isp_fibre_init_2400()
2151 if (isp->isp_type <= ISP_HA_FC_2400) in isp_fibre_init_2400()
2169 …isp_prt(isp, ISP_LOGDEBUG1, "Setting ICB Node 0x%08x%08x Port 0x%08x%08x", ((uint32_t) (fcp->isp_w… in isp_fibre_init_2400()
2174 …isp_prt(isp, ISP_LOGDEBUG1, "Setting ICB Node to be same as Port 0x%08x%08x", ((uint32_t) (fcp->is… in isp_fibre_init_2400()
2176 isp_prt(isp, ISP_LOGERR, "No valid WWNs to use"); in isp_fibre_init_2400()
2181 icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp); in isp_fibre_init_2400()
2183 isp_prt(isp, ISP_LOGERR, "bad request queue length %d", icbp->icb_rqstqlen); in isp_fibre_init_2400()
2186 icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp); in isp_fibre_init_2400()
2188 isp_prt(isp, ISP_LOGERR, "bad result queue length %d", in isp_fibre_init_2400()
2192 icbp->icb_rqstaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_rquest_dma); in isp_fibre_init_2400()
2193 icbp->icb_rqstaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_rquest_dma); in isp_fibre_init_2400()
2194 icbp->icb_rqstaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_rquest_dma); in isp_fibre_init_2400()
2195 icbp->icb_rqstaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_rquest_dma); in isp_fibre_init_2400()
2197 icbp->icb_respaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_result_dma); in isp_fibre_init_2400()
2198 icbp->icb_respaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_result_dma); in isp_fibre_init_2400()
2199 icbp->icb_respaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_result_dma); in isp_fibre_init_2400()
2200 icbp->icb_respaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_result_dma); in isp_fibre_init_2400()
2204 icbp->icb_atioqlen = RESULT_QUEUE_LEN(isp); in isp_fibre_init_2400()
2206 isp_prt(isp, ISP_LOGERR, "bad ATIO queue length %d", icbp->icb_atioqlen); in isp_fibre_init_2400()
2209 icbp->icb_atioqaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_atioq_dma); in isp_fibre_init_2400()
2210 icbp->icb_atioqaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_atioq_dma); in isp_fibre_init_2400()
2211 icbp->icb_atioqaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_atioq_dma); in isp_fibre_init_2400()
2212 icbp->icb_atioqaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_atioq_dma); in isp_fibre_init_2400()
2213 …isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: atioq %04x%04x%04x%04x", DMA_WD3(isp->isp_atioq_… in isp_fibre_init_2400()
2214 DMA_WD1(isp->isp_atioq_dma), DMA_WD0(isp->isp_atioq_dma)); in isp_fibre_init_2400()
2217 if (ISP_CAP_MSIX(isp) && isp->isp_nirq >= 2) { in isp_fibre_init_2400()
2219 if (IS_26XX(isp) && isp->isp_nirq >= 3) in isp_fibre_init_2400()
2223 …isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: fwopt1 0x%x fwopt2 0x%x fwopt3 0x%x", icbp->icb_… in isp_fibre_init_2400()
2225 …isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: rqst %04x%04x%04x%04x rsp %04x%04x%04x%04x", DMA… in isp_fibre_init_2400()
2226 …DMA_WD1(isp->isp_rquest_dma), DMA_WD0(isp->isp_rquest_dma), DMA_WD3(isp->isp_result_dma), DMA_WD2(… in isp_fibre_init_2400()
2227 DMA_WD1(isp->isp_result_dma), DMA_WD0(isp->isp_result_dma)); in isp_fibre_init_2400()
2229 if (FC_SCRATCH_ACQUIRE(isp, 0)) { in isp_fibre_init_2400()
2230 isp_prt(isp, ISP_LOGERR, sacq); in isp_fibre_init_2400()
2234 isp_put_icb_2400(isp, icbp, fcp->isp_scratch); in isp_fibre_init_2400()
2235 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_fibre_init_2400()
2236 isp_print_bytes(isp, "isp_fibre_init_2400", in isp_fibre_init_2400()
2243 if (isp->isp_nchan > 1) { in isp_fibre_init_2400()
2250 if (ISP_CAP_VP0(isp)) { in isp_fibre_init_2400()
2252 vpinfo.vp_count = isp->isp_nchan; in isp_fibre_init_2400()
2255 vpinfo.vp_count = isp->isp_nchan - 1; in isp_fibre_init_2400()
2261 isp_put_icb_2400_vpinfo(isp, &vpinfo, vdst); in isp_fibre_init_2400()
2263 for (; chan < isp->isp_nchan; chan++) { in isp_fibre_init_2400()
2267 fcp2 = FCPARAM(isp, chan); in isp_fibre_init_2400()
2277 if (isp->isp_confopts & ISP_CFG_OWNLOOPID) in isp_fibre_init_2400()
2285 if (ISP_CAP_VP0(isp)) in isp_fibre_init_2400()
2290 isp_put_vp_port_info(isp, &pi, pdst); in isp_fibre_init_2400()
2293 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_fibre_init_2400()
2294 isp_print_bytes(isp, "isp_fibre_init_2400", in isp_fibre_init_2400()
2304 if (isp->isp_nchan > 1) { in isp_fibre_init_2400()
2314 …isp_prt(isp, ISP_LOGDEBUG0, "INIT F/W from %04x%04x%04x%04x", DMA_WD3(fcp->isp_scdma), DMA_WD2(fcp… in isp_fibre_init_2400()
2315 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (*icbp), 0); in isp_fibre_init_2400()
2316 isp_mboxcmd(isp, &mbs); in isp_fibre_init_2400()
2317 FC_SCRATCH_RELEASE(isp, 0); in isp_fibre_init_2400()
2322 isp->isp_reqidx = 0; in isp_fibre_init_2400()
2323 isp->isp_reqodx = 0; in isp_fibre_init_2400()
2324 isp->isp_residx = 0; in isp_fibre_init_2400()
2325 isp->isp_resodx = 0; in isp_fibre_init_2400()
2326 isp->isp_atioodx = 0; in isp_fibre_init_2400()
2331 isp->isp_state = ISP_RUNSTATE; in isp_fibre_init_2400()
2335 isp_fc_enable_vp(ispsoftc_t *isp, int chan) in isp_fc_enable_vp() argument
2337 fcparam *fcp = FCPARAM(isp, chan); in isp_fc_enable_vp()
2357 if (isp->isp_confopts & ISP_CFG_OWNLOOPID) in isp_fc_enable_vp()
2365 vp.vp_mod_hdl = isp_allocate_handle(isp, resp, ISP_HANDLE_CTRL); in isp_fc_enable_vp()
2367 isp_prt(isp, ISP_LOGERR, in isp_fc_enable_vp()
2373 reqp = isp_getrqentry(isp); in isp_fc_enable_vp()
2375 isp_prt(isp, ISP_LOGERR, in isp_fc_enable_vp()
2377 isp_destroy_handle(isp, vp.vp_mod_hdl); in isp_fc_enable_vp()
2380 isp_put_vp_modify(isp, &vp, (vp_modify_t *)reqp); in isp_fc_enable_vp()
2381 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_fc_enable_vp()
2382 isp_print_bytes(isp, "IOCB VP_MODIFY", QENTRY_LEN, reqp); in isp_fc_enable_vp()
2383 ISP_SYNC_REQUEST(isp); in isp_fc_enable_vp()
2384 if (msleep(resp, &isp->isp_lock, 0, "VP_MODIFY", 5*hz) == EWOULDBLOCK) { in isp_fc_enable_vp()
2385 isp_prt(isp, ISP_LOGERR, in isp_fc_enable_vp()
2387 isp_destroy_handle(isp, vp.vp_mod_hdl); in isp_fc_enable_vp()
2390 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_fc_enable_vp()
2391 isp_print_bytes(isp, "IOCB VP_MODIFY response", QENTRY_LEN, resp); in isp_fc_enable_vp()
2392 isp_get_vp_modify(isp, (vp_modify_t *)resp, &vp); in isp_fc_enable_vp()
2395 isp_prt(isp, ISP_LOGERR, in isp_fc_enable_vp()
2404 isp_fc_disable_vp(ispsoftc_t *isp, int chan) in isp_fc_disable_vp() argument
2414 if (ISP_CAP_VP0(isp)) { in isp_fc_disable_vp()
2426 vp.vp_ctrl_handle = isp_allocate_handle(isp, resp, ISP_HANDLE_CTRL); in isp_fc_disable_vp()
2428 isp_prt(isp, ISP_LOGERR, in isp_fc_disable_vp()
2434 reqp = isp_getrqentry(isp); in isp_fc_disable_vp()
2436 isp_prt(isp, ISP_LOGERR, in isp_fc_disable_vp()
2438 isp_destroy_handle(isp, vp.vp_ctrl_handle); in isp_fc_disable_vp()
2441 isp_put_vp_ctrl_info(isp, &vp, (vp_ctrl_info_t *)reqp); in isp_fc_disable_vp()
2442 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_fc_disable_vp()
2443 isp_print_bytes(isp, "IOCB VP_CTRL", QENTRY_LEN, reqp); in isp_fc_disable_vp()
2444 ISP_SYNC_REQUEST(isp); in isp_fc_disable_vp()
2445 if (msleep(resp, &isp->isp_lock, 0, "VP_CTRL", 5*hz) == EWOULDBLOCK) { in isp_fc_disable_vp()
2446 isp_prt(isp, ISP_LOGERR, in isp_fc_disable_vp()
2448 isp_destroy_handle(isp, vp.vp_ctrl_handle); in isp_fc_disable_vp()
2451 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_fc_disable_vp()
2452 isp_print_bytes(isp, "IOCB VP_CTRL response", QENTRY_LEN, resp); in isp_fc_disable_vp()
2453 isp_get_vp_ctrl_info(isp, (vp_ctrl_info_t *)resp, &vp); in isp_fc_disable_vp()
2456 isp_prt(isp, ISP_LOGERR, in isp_fc_disable_vp()
2466 isp_fc_change_role(ispsoftc_t *isp, int chan, int new_role) in isp_fc_change_role() argument
2468 fcparam *fcp = FCPARAM(isp, chan); in isp_fc_change_role()
2471 if (chan >= isp->isp_nchan) { in isp_fc_change_role()
2472 isp_prt(isp, ISP_LOGWARN, "%s: bad channel %d", __func__, chan); in isp_fc_change_role()
2477 for (was = 0, i = 0; i < isp->isp_nchan; i++) { in isp_fc_change_role()
2478 if (FCPARAM(isp, i)->role != ISP_ROLE_NONE) in isp_fc_change_role()
2483 return (isp_reinit(isp, 0)); in isp_fc_change_role()
2486 res = isp_fc_disable_vp(isp, chan); in isp_fc_change_role()
2487 isp_clear_portdb(isp, chan); in isp_fc_change_role()
2491 res = isp_fc_enable_vp(isp, chan); in isp_fc_change_role()
2496 isp_clear_portdb(ispsoftc_t *isp, int chan) in isp_clear_portdb() argument
2498 fcparam *fcp = FCPARAM(isp, chan); in isp_clear_portdb()
2509 isp_async(isp, ISPASYNC_DEV_GONE, chan, lp); in isp_clear_portdb()
2524 isp_mark_portdb(ispsoftc_t *isp, int chan) in isp_mark_portdb() argument
2526 fcparam *fcp = FCPARAM(isp, chan); in isp_mark_portdb()
2546 isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags) in isp_plogx() argument
2556 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d PLOGX %s PortID 0x%06x nphdl 0x%x", in isp_plogx()
2559 if (!IS_24XX(isp)) { in isp_plogx()
2562 return (isp_port_login(isp, handle, portid)); in isp_plogx()
2564 return (isp_port_logout(isp, handle, portid)); in isp_plogx()
2581 pl.plogx_handle = isp_allocate_handle(isp, resp, ISP_HANDLE_CTRL); in isp_plogx()
2583 isp_prt(isp, ISP_LOGERR, in isp_plogx()
2589 reqp = isp_getrqentry(isp); in isp_plogx()
2591 isp_prt(isp, ISP_LOGERR, in isp_plogx()
2593 isp_destroy_handle(isp, pl.plogx_handle); in isp_plogx()
2596 isp_put_plogx(isp, &pl, (isp_plogx_t *)reqp); in isp_plogx()
2597 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_plogx()
2598 isp_print_bytes(isp, "IOCB LOGX", QENTRY_LEN, reqp); in isp_plogx()
2599 FCPARAM(isp, chan)->isp_login_hdl = handle; in isp_plogx()
2600 ISP_SYNC_REQUEST(isp); in isp_plogx()
2601 if (msleep(resp, &isp->isp_lock, 0, "PLOGX", 3 * ICB_LOGIN_TOV * hz) in isp_plogx()
2603 isp_prt(isp, ISP_LOGERR, in isp_plogx()
2605 isp_destroy_handle(isp, pl.plogx_handle); in isp_plogx()
2608 FCPARAM(isp, chan)->isp_login_hdl = NIL_HANDLE; in isp_plogx()
2609 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_plogx()
2610 isp_print_bytes(isp, "IOCB LOGX response", QENTRY_LEN, resp); in isp_plogx()
2611 isp_get_plogx(isp, (isp_plogx_t *)resp, &pl); in isp_plogx()
2616 isp_prt(isp, ISP_LOGWARN, in isp_plogx()
2689 isp_prt(isp, lev, "Chan %d PLOGX PortID 0x%06x to N-Port handle 0x%x: %s", in isp_plogx()
2696 isp_port_login(ispsoftc_t *isp, uint16_t handle, uint32_t portid) in isp_port_login() argument
2701 if (ISP_CAP_2KLOGIN(isp)) { in isp_port_login()
2711 isp_mboxcmd(isp, &mbs); in isp_port_login()
2715 …isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: portid 0x%06x already logged in as 0x%… in isp_port_login()
2719 …isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: handle 0x%x in use for port id 0x%02xX… in isp_port_login()
2726 …isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: error 0x%x in PLOGI to port 0x%06x", m… in isp_port_login()
2730 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: all IDs used for fabric login"); in isp_port_login()
2734 …isp_prt(isp, ISP_LOG_SANCFG, "isp_port_login: error 0x%x on port login of 0x%06x@0x%0x", mbs.param… in isp_port_login()
2745 isp_port_logout(ispsoftc_t *isp, uint16_t handle, uint32_t portid) in isp_port_logout() argument
2750 if (ISP_CAP_2KLOGIN(isp)) { in isp_port_logout()
2756 isp_mboxcmd(isp, &mbs); in isp_port_logout()
2761 isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb) in isp_getpdb() argument
2771 if (IS_24XX(isp)) { in isp_getpdb()
2775 } else if (ISP_CAP_2KLOGIN(isp)) { in isp_getpdb()
2780 mbs.param[2] = DMA_WD1(isp->isp_iocb_dma); in isp_getpdb()
2781 mbs.param[3] = DMA_WD0(isp->isp_iocb_dma); in isp_getpdb()
2782 mbs.param[6] = DMA_WD3(isp->isp_iocb_dma); in isp_getpdb()
2783 mbs.param[7] = DMA_WD2(isp->isp_iocb_dma); in isp_getpdb()
2784 MEMORYBARRIER(isp, SYNC_IFORDEV, 0, sizeof(un), chan); in isp_getpdb()
2786 isp_mboxcmd(isp, &mbs); in isp_getpdb()
2790 MEMORYBARRIER(isp, SYNC_IFORCPU, 0, sizeof(un), chan); in isp_getpdb()
2791 if (IS_24XX(isp)) { in isp_getpdb()
2792 isp_get_pdb_24xx(isp, isp->isp_iocb, &un.bill); in isp_getpdb()
2799 isp_prt(isp, ISP_LOGDEBUG0, in isp_getpdb()
2809 isp_get_pdb_21xx(isp, isp->isp_iocb, &un.fred); in isp_getpdb()
2816 isp_prt(isp, ISP_LOGDEBUG1, in isp_getpdb()
2823 isp_gethandles(ispsoftc_t *isp, int chan, uint16_t *handles, int *num, int loop) in isp_gethandles() argument
2825 fcparam *fcp = FCPARAM(isp, chan); in isp_gethandles()
2835 if (IS_24XX(isp)) { in isp_gethandles()
2849 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_gethandles()
2850 isp_prt(isp, ISP_LOGERR, sacq); in isp_gethandles()
2853 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, ISP_FC_SCRLEN, chan); in isp_gethandles()
2854 isp_mboxcmd(isp, &mbs); in isp_gethandles()
2856 FC_SCRATCH_RELEASE(isp, chan); in isp_gethandles()
2859 MEMORYBARRIER(isp, SYNC_SFORCPU, 0, ISP_FC_SCRLEN, chan); in isp_gethandles()
2864 if (IS_24XX(isp)) { in isp_gethandles()
2865 isp_get_pnhle_24xx(isp, &elp4[i], &el4); in isp_gethandles()
2869 } else if (IS_23XX(isp)) { in isp_gethandles()
2870 isp_get_pnhle_23xx(isp, &elp3[i], &el3); in isp_gethandles()
2875 isp_get_pnhle_21xx(isp, &elp1[i], &el1); in isp_gethandles()
2885 FC_SCRATCH_RELEASE(isp, chan); in isp_gethandles()
2890 isp_dump_chip_portdb(ispsoftc_t *isp, int chan) in isp_dump_chip_portdb() argument
2895 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGINFO, "Chan %d chip port dump", chan); in isp_dump_chip_portdb()
2896 if (ISP_CAP_2KLOGIN(isp)) { in isp_dump_chip_portdb()
2902 if (isp_getpdb(isp, chan, nphdl, &pdb)) { in isp_dump_chip_portdb()
2905 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGINFO, "Chan %d Handle 0x%04x " in isp_dump_chip_portdb()
2914 isp_get_wwn(ispsoftc_t *isp, int chan, int nphdl, int nodename) in isp_get_wwn() argument
2921 if (ISP_CAP_2KLOGIN(isp)) { in isp_get_wwn()
2934 isp_mboxcmd(isp, &mbs); in isp_get_wwn()
2938 if (IS_24XX(isp)) { in isp_get_wwn()
2967 isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) in isp_fclink_test() argument
2976 fcp = FCPARAM(isp, chan); in isp_fclink_test()
2983 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC link test", chan); in isp_fclink_test()
2990 isp_change_fw_state(isp, chan, isp_fw_state(isp, chan)); in isp_fclink_test()
2999 ISP_SLEEP(isp, 1000); in isp_fclink_test()
3002 isp_prt(isp, ISP_LOG_SANCFG, in isp_fclink_test()
3013 isp_mboxcmd(isp, &mbs); in isp_fclink_test()
3018 if (IS_2100(isp)) { in isp_fclink_test()
3023 if (ISP_FW_NEWER_THAN(isp, 1, 15, 37)) in isp_fclink_test()
3055 nphdl = IS_24XX(isp) ? NPH_FL_ID : FL_ID; in isp_fclink_test()
3056 r = isp_getpdb(isp, chan, nphdl, &pdb); in isp_fclink_test()
3058 if (IS_2100(isp)) { in isp_fclink_test()
3061 isp_prt(isp, ISP_LOGWARN, in isp_fclink_test()
3068 if (IS_24XX(isp)) { in isp_fclink_test()
3071 r = isp_register_fc4_type(isp, chan); in isp_fclink_test()
3076 r = isp_register_fc4_features_24xx(isp, chan); in isp_fclink_test()
3081 r = isp_register_port_name_24xx(isp, chan); in isp_fclink_test()
3086 isp_register_node_name_24xx(isp, chan); in isp_fclink_test()
3091 r = isp_register_fc4_type(isp, chan); in isp_fclink_test()
3095 isp_send_change_request(isp, chan); in isp_fclink_test()
3102 if (IS_23XX(isp) || IS_24XX(isp)) { in isp_fclink_test()
3106 isp_mboxcmd(isp, &mbs); in isp_fclink_test()
3127 isp_prt(isp, ISP_LOG_SANCFG, in isp_fclink_test()
3132 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGCONFIG, in isp_fclink_test()
3135 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGCONFIG, in isp_fclink_test()
3139 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC link test done", chan); in isp_fclink_test()
3155 isp_pdb_sync(ispsoftc_t *isp, int chan) in isp_pdb_sync() argument
3157 fcparam *fcp = FCPARAM(isp, chan); in isp_pdb_sync()
3166 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC PDB sync", chan); in isp_pdb_sync()
3180 isp_async(isp, ISPASYNC_DEV_GONE, chan, lp); in isp_pdb_sync()
3182 (void) isp_plogx(isp, chan, lp->handle, in isp_pdb_sync()
3195 isp_async(isp, ISPASYNC_DEV_ARRIVED, chan, lp); in isp_pdb_sync()
3199 isp_async(isp, ISPASYNC_DEV_CHANGED, chan, lp); in isp_pdb_sync()
3205 isp_async(isp, ISPASYNC_DEV_STAYED, chan, lp); in isp_pdb_sync()
3210 isp_prt(isp, ISP_LOGWARN, in isp_pdb_sync()
3213 isp_dump_portdb(isp, chan); in isp_pdb_sync()
3218 isp_prt(isp, ISP_LOG_SANCFG, in isp_pdb_sync()
3224 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC PDB sync done", chan); in isp_pdb_sync()
3229 isp_pdb_add_update(ispsoftc_t *isp, int chan, isp_pdb_t *pdb) in isp_pdb_add_update() argument
3238 if (isp_find_pdb_by_wwpn(isp, chan, wwpn, &lp)) { in isp_pdb_add_update()
3240 isp_prt(isp, ISP_LOGERR, in isp_pdb_add_update()
3243 FC_PORTDB_TGT(isp, chan, lp), lp->state); in isp_pdb_add_update()
3244 isp_dump_portdb(isp, chan); in isp_pdb_add_update()
3258 isp_prt(isp, ISP_LOG_SANCFG, in isp_pdb_add_update()
3270 isp_prt(isp, ISP_LOG_SANCFG, in isp_pdb_add_update()
3277 if (!isp_find_pdb_empty(isp, chan, &lp)) { in isp_pdb_add_update()
3278 isp_prt(isp, ISP_LOGERR, "Chan %d out of portdb entries", chan); in isp_pdb_add_update()
3291 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Port 0x%06x@0x%04x is new", in isp_pdb_add_update()
3301 isp_fix_portids(ispsoftc_t *isp, int chan) in isp_fix_portids() argument
3303 fcparam *fcp = FCPARAM(isp, chan); in isp_fix_portids()
3317 r = isp_getpdb(isp, chan, lp->handle, &pdb); in isp_fix_portids()
3321 isp_prt(isp, ISP_LOGDEBUG1, in isp_fix_portids()
3331 isp_prt(isp, ISP_LOG_SANCFG, in isp_fix_portids()
3341 isp_scan_loop(ispsoftc_t *isp, int chan) in isp_scan_loop() argument
3343 fcparam *fcp = FCPARAM(isp, chan); in isp_scan_loop()
3354 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC loop scan", chan); in isp_scan_loop()
3357 if (!IS_24XX(isp)) { in isp_scan_loop()
3358 isp_fix_portids(isp, chan); in isp_scan_loop()
3362 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_loop()
3370 r = isp_gethandles(isp, chan, handles, &lim, 1); in isp_scan_loop()
3372 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_loop()
3374 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_loop()
3379 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Got %d handles", in isp_scan_loop()
3385 isp_mark_portdb(isp, chan); in isp_scan_loop()
3392 if (ISP_CAP_2KLOGIN(isp)) { in isp_scan_loop()
3404 if (IS_2100(isp) || IS_2200(isp)) { in isp_scan_loop()
3405 uint64_t node_wwn = isp_get_wwn(isp, chan, handle, 1); in isp_scan_loop()
3408 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_loop()
3420 r = isp_getpdb(isp, chan, handle, &pdb); in isp_scan_loop()
3424 isp_prt(isp, ISP_LOGDEBUG1, in isp_scan_loop()
3430 isp_pdb_add_update(isp, chan, &pdb); in isp_scan_loop()
3435 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC loop scan done", chan); in isp_scan_loop()
3440 isp_ct_sns(ispsoftc_t *isp, int chan, uint32_t cmd_bcnt, uint32_t rsp_bcnt) in isp_ct_sns() argument
3442 fcparam *fcp = FCPARAM(isp, chan); in isp_ct_sns()
3445 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_ct_sns()
3446 isp_print_bytes(isp, "CT SNS request", cmd_bcnt, fcp->isp_scratch); in isp_ct_sns()
3447 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, cmd_bcnt, chan); in isp_ct_sns()
3455 isp_mboxcmd(isp, &mbs); in isp_ct_sns()
3464 MEMORYBARRIER(isp, SYNC_SFORCPU, 0, rsp_bcnt, chan); in isp_ct_sns()
3465 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_ct_sns()
3466 isp_print_bytes(isp, "CT response", rsp_bcnt, fcp->isp_scratch); in isp_ct_sns()
3471 isp_ct_passthru(ispsoftc_t *isp, int chan, uint32_t cmd_bcnt, uint32_t rsp_bcnt) in isp_ct_passthru() argument
3473 fcparam *fcp = FCPARAM(isp, chan); in isp_ct_passthru()
3478 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_ct_passthru()
3479 isp_print_bytes(isp, "CT request", cmd_bcnt, fcp->isp_scratch); in isp_ct_passthru()
3489 pt.ctp_vpidx = ISP_GET_VPIDX(isp, chan); in isp_ct_passthru()
3503 pt.ctp_handle = isp_allocate_handle(isp, resp, ISP_HANDLE_CTRL); in isp_ct_passthru()
3505 isp_prt(isp, ISP_LOGERR, in isp_ct_passthru()
3511 reqp = isp_getrqentry(isp); in isp_ct_passthru()
3513 isp_prt(isp, ISP_LOGERR, in isp_ct_passthru()
3515 isp_destroy_handle(isp, pt.ctp_handle); in isp_ct_passthru()
3518 isp_put_ct_pt(isp, &pt, (isp_ct_pt_t *)reqp); in isp_ct_passthru()
3519 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_ct_passthru()
3520 isp_print_bytes(isp, "CT IOCB request", QENTRY_LEN, reqp); in isp_ct_passthru()
3521 ISP_SYNC_REQUEST(isp); in isp_ct_passthru()
3522 if (msleep(resp, &isp->isp_lock, 0, "CTP", pt.ctp_time*hz) == EWOULDBLOCK) { in isp_ct_passthru()
3523 isp_prt(isp, ISP_LOGERR, in isp_ct_passthru()
3525 isp_destroy_handle(isp, pt.ctp_handle); in isp_ct_passthru()
3528 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_ct_passthru()
3529 isp_print_bytes(isp, "CT IOCB response", QENTRY_LEN, resp); in isp_ct_passthru()
3531 isp_get_ct_pt(isp, (isp_ct_pt_t *)resp, &pt); in isp_ct_passthru()
3533 isp_prt(isp, ISP_LOGWARN, in isp_ct_passthru()
3539 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_ct_passthru()
3540 isp_print_bytes(isp, "CT response", rsp_bcnt, fcp->isp_scratch); in isp_ct_passthru()
3560 isp_gid_pt(ispsoftc_t *isp, int chan) in isp_gid_pt() argument
3562 fcparam *fcp = FCPARAM(isp, chan); in isp_gid_pt()
3567 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d requesting GID_PT", chan); in isp_gid_pt()
3568 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_gid_pt()
3569 isp_prt(isp, ISP_LOGERR, sacq); in isp_gid_pt()
3573 if (IS_24XX(isp)) { in isp_gid_pt()
3581 isp_put_ct_hdr(isp, &ct, (ct_hdr_t *)scp); in isp_gid_pt()
3587 if (isp_ct_passthru(isp, chan, sizeof(ct) + sizeof(uint32_t), GIDLEN)) { in isp_gid_pt()
3588 FC_SCRATCH_RELEASE(isp, chan); in isp_gid_pt()
3606 isp_put_gid_pt_request(isp, &rq, (sns_gid_pt_req_t *)scp); in isp_gid_pt()
3608 if (isp_ct_sns(isp, chan, sizeof(rq), NGENT)) { in isp_gid_pt()
3609 FC_SCRATCH_RELEASE(isp, chan); in isp_gid_pt()
3614 isp_get_gid_xx_response(isp, (sns_gid_xx_rsp_t *)scp, in isp_gid_pt()
3616 FC_SCRATCH_RELEASE(isp, chan); in isp_gid_pt()
3621 isp_gff_id(ispsoftc_t *isp, int chan, uint32_t portid) in isp_gff_id() argument
3623 fcparam *fcp = FCPARAM(isp, chan); in isp_gff_id()
3633 if (!IS_24XX(isp)) /* Old chips can't request GFF_ID. */ in isp_gff_id()
3636 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d requesting GFF_ID", chan); in isp_gff_id()
3637 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_gff_id()
3638 isp_prt(isp, ISP_LOGERR, sacq); in isp_gff_id()
3649 isp_put_ct_hdr(isp, &ct, (ct_hdr_t *)scp); in isp_gff_id()
3651 ISP_IOZPUT_32(isp, portid, rp); in isp_gff_id()
3653 if (isp_ct_passthru(isp, chan, sizeof(ct) + sizeof(uint32_t), in isp_gff_id()
3655 FC_SCRATCH_RELEASE(isp, chan); in isp_gff_id()
3659 isp_get_gff_id_response(isp, (sns_gff_id_rsp_t *)scp, &rsp); in isp_gff_id()
3671 if (((ISP_SWAP32(isp, rsp.snscb_fc4_features[FC4_SCSI / 8]) >> in isp_gff_id()
3675 FC_SCRATCH_RELEASE(isp, chan); in isp_gff_id()
3676 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d GFF_ID result is %d", chan, res); in isp_gff_id()
3681 isp_gft_id(ispsoftc_t *isp, int chan, uint32_t portid) in isp_gft_id() argument
3683 fcparam *fcp = FCPARAM(isp, chan); in isp_gft_id()
3694 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d requesting GFT_ID", chan); in isp_gft_id()
3695 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_gft_id()
3696 isp_prt(isp, ISP_LOGERR, sacq); in isp_gft_id()
3700 if (IS_24XX(isp)) { in isp_gft_id()
3708 isp_put_ct_hdr(isp, &ct, (ct_hdr_t *)scp); in isp_gft_id()
3710 ISP_IOZPUT_32(isp, portid, rp); in isp_gft_id()
3712 if (isp_ct_passthru(isp, chan, sizeof(ct) + sizeof(uint32_t), in isp_gft_id()
3714 FC_SCRATCH_RELEASE(isp, chan); in isp_gft_id()
3729 isp_put_gxx_id_request(isp, &rq, (sns_gxx_id_req_t *)scp); in isp_gft_id()
3731 if (isp_ct_sns(isp, chan, sizeof(rq), SNS_GFT_ID_RESP_SIZE)) { in isp_gft_id()
3732 FC_SCRATCH_RELEASE(isp, chan); in isp_gft_id()
3737 isp_get_gft_id_response(isp, (sns_gft_id_rsp_t *)scp, &rsp); in isp_gft_id()
3749 FC_SCRATCH_RELEASE(isp, chan); in isp_gft_id()
3750 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d GFT_ID result is %d", chan, res); in isp_gft_id()
3755 isp_scan_fabric(ispsoftc_t *isp, int chan) in isp_scan_fabric() argument
3757 fcparam *fcp = FCPARAM(isp, chan); in isp_scan_fabric()
3770 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC fabric scan", chan); in isp_scan_fabric()
3774 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3781 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3782 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3790 nphdl = IS_24XX(isp) ? NPH_FL_ID : FL_ID; in isp_scan_fabric()
3791 r = isp_getpdb(isp, chan, nphdl, &pdb); in isp_scan_fabric()
3793 isp_dump_chip_portdb(isp, chan); in isp_scan_fabric()
3798 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3804 r = isp_gid_pt(isp, chan); in isp_scan_fabric()
3828 isp_prt(isp, level, "Chan %d Fabric Nameserver rejected GID_PT" in isp_scan_fabric()
3842 isp_prt(isp, ISP_LOGWARN, in isp_scan_fabric()
3846 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3872 …isp_prt(isp, ISP_LOG_SANCFG, "Chan %d removing duplicate PortID 0x%06x entry from list", chan, por… in isp_scan_fabric()
3890 isp_mark_portdb(isp, chan); in isp_scan_fabric()
3895 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3898 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3904 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3910 if (isp_find_pdb_by_portid(isp, chan, portid, &lp)) { in isp_scan_fabric()
3912 isp_prt(isp, ISP_LOGERR, in isp_scan_fabric()
3915 FC_PORTDB_TGT(isp, chan, lp), lp->state); in isp_scan_fabric()
3916 isp_dump_portdb(isp, chan); in isp_scan_fabric()
3938 r = isp_getpdb(isp, chan, lp->handle, &pdb); in isp_scan_fabric()
3943 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3949 isp_pdb_add_update(isp, chan, &pdb); in isp_scan_fabric()
3955 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3960 r = isp_gff_id(isp, chan, portid); in isp_scan_fabric()
3962 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3967 r = isp_gft_id(isp, chan, portid); in isp_scan_fabric()
3969 isp_prt(isp, ISP_LOG_SANCFG, in isp_scan_fabric()
3974 if (isp_login_device(isp, chan, portid, &pdb, in isp_scan_fabric()
3975 &FCPARAM(isp, 0)->isp_lasthdl)) { in isp_scan_fabric()
3981 isp_pdb_add_update(isp, chan, &pdb); in isp_scan_fabric()
3987 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC fabric scan done", chan); in isp_scan_fabric()
3995 isp_login_device(ispsoftc_t *isp, int chan, uint32_t portid, isp_pdb_t *p, uint16_t *ohp) in isp_login_device() argument
4000 if (ISP_CAP_2KLOGIN(isp)) { in isp_login_device()
4006 handle = isp_next_handle(isp, ohp); in isp_login_device()
4008 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) in isp_login_device()
4012 r = isp_getpdb(isp, chan, handle, p); in isp_login_device()
4016 handle = isp_next_handle(isp, ohp); in isp_login_device()
4021 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) in isp_login_device()
4027 r = isp_plogx(isp, chan, handle, portid, PLOGX_FLG_CMD_PLOGI); in isp_login_device()
4036 …if (isp_plogx(isp, chan, r >> 16, portid, PLOGX_FLG_CMD_LOGO | PLOGX_FLG_IMPLICIT | PLOGX_FLG_FREE… in isp_login_device()
4037 isp_prt(isp, ISP_LOGERR, "baw... logout of %x failed", r >> 16); in isp_login_device()
4039 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) in isp_login_device()
4041 r = isp_plogx(isp, chan, handle, portid, PLOGX_FLG_CMD_PLOGI); in isp_login_device()
4047 handle = isp_next_handle(isp, ohp); in isp_login_device()
4056 isp_prt(isp, ISP_LOGWARN, "Chan %d PLOGI 0x%06x failed", chan, portid); in isp_login_device()
4065 r = isp_getpdb(isp, chan, handle, p); in isp_login_device()
4067 isp_prt(isp, ISP_LOGERR, "Chan %d new device 0x%06x@0x%x disappeared", chan, portid, handle); in isp_login_device()
4072 isp_prt(isp, ISP_LOGERR, "Chan %d new device 0x%06x@0x%x changed (0x%06x@0x%0x)", in isp_login_device()
4080 isp_send_change_request(ispsoftc_t *isp, int chan) in isp_send_change_request() argument
4087 isp_mboxcmd(isp, &mbs); in isp_send_change_request()
4091 isp_prt(isp, ISP_LOGWARN, "Chan %d Send Change Request: 0x%x", in isp_send_change_request()
4098 isp_register_fc4_type(ispsoftc_t *isp, int chan) in isp_register_fc4_type() argument
4100 fcparam *fcp = FCPARAM(isp, chan); in isp_register_fc4_type()
4107 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_fc4_type()
4108 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_fc4_type()
4112 if (IS_24XX(isp)) { in isp_register_fc4_type()
4124 isp_put_rft_id(isp, &rp, (rft_id_t *)scp); in isp_register_fc4_type()
4126 if (isp_ct_passthru(isp, chan, sizeof(rft_id_t), sizeof(ct_hdr_t))) { in isp_register_fc4_type()
4127 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type()
4143 isp_put_sns_request(isp, reqp, (sns_screq_t *)scp); in isp_register_fc4_type()
4145 if (isp_ct_sns(isp, chan, SNS_RFT_ID_REQ_SIZE, sizeof(ct_hdr_t))) { in isp_register_fc4_type()
4146 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type()
4151 isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); in isp_register_fc4_type()
4152 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type()
4154 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "Chan %d Register FC4 Type rejected", chan); in isp_register_fc4_type()
4157 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Register FC4 Type accepted", chan); in isp_register_fc4_type()
4159 isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Type: 0x%x", chan, ct->ct_cmd_resp); in isp_register_fc4_type()
4166 isp_register_fc4_features_24xx(ispsoftc_t *isp, int chan) in isp_register_fc4_features_24xx() argument
4168 fcparam *fcp = FCPARAM(isp, chan); in isp_register_fc4_features_24xx()
4173 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_fc4_features_24xx()
4174 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_fc4_features_24xx()
4197 isp_put_rff_id(isp, &rp, (rff_id_t *)scp); in isp_register_fc4_features_24xx()
4198 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_register_fc4_features_24xx()
4199 isp_print_bytes(isp, "CT request", sizeof(rft_id_t), scp); in isp_register_fc4_features_24xx()
4201 if (isp_ct_passthru(isp, chan, sizeof(rft_id_t), sizeof(ct_hdr_t))) { in isp_register_fc4_features_24xx()
4202 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_features_24xx()
4206 isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); in isp_register_fc4_features_24xx()
4207 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_features_24xx()
4209 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, in isp_register_fc4_features_24xx()
4213 isp_prt(isp, ISP_LOG_SANCFG, in isp_register_fc4_features_24xx()
4216 isp_prt(isp, ISP_LOGWARN, in isp_register_fc4_features_24xx()
4224 isp_register_port_name_24xx(ispsoftc_t *isp, int chan) in isp_register_port_name_24xx() argument
4226 fcparam *fcp = FCPARAM(isp, chan); in isp_register_port_name_24xx()
4232 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_port_name_24xx()
4233 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_port_name_24xx()
4256 ":%s", device_get_nameunit(isp->isp_dev)); in isp_register_port_name_24xx()
4263 isp_put_rspn_id(isp, &rp, (rspn_id_t *)scp); in isp_register_port_name_24xx()
4265 if (isp_ct_passthru(isp, chan, len, sizeof(ct_hdr_t))) { in isp_register_port_name_24xx()
4266 FC_SCRATCH_RELEASE(isp, chan); in isp_register_port_name_24xx()
4270 isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); in isp_register_port_name_24xx()
4271 FC_SCRATCH_RELEASE(isp, chan); in isp_register_port_name_24xx()
4273 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, in isp_register_port_name_24xx()
4277 isp_prt(isp, ISP_LOG_SANCFG, in isp_register_port_name_24xx()
4280 isp_prt(isp, ISP_LOGWARN, in isp_register_port_name_24xx()
4288 isp_register_node_name_24xx(ispsoftc_t *isp, int chan) in isp_register_node_name_24xx() argument
4290 fcparam *fcp = FCPARAM(isp, chan); in isp_register_node_name_24xx()
4296 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_node_name_24xx()
4297 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_node_name_24xx()
4319 isp_put_rsnn_nn(isp, &rp, (rsnn_nn_t *)scp); in isp_register_node_name_24xx()
4321 if (isp_ct_passthru(isp, chan, len, sizeof(ct_hdr_t))) { in isp_register_node_name_24xx()
4322 FC_SCRATCH_RELEASE(isp, chan); in isp_register_node_name_24xx()
4326 isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); in isp_register_node_name_24xx()
4327 FC_SCRATCH_RELEASE(isp, chan); in isp_register_node_name_24xx()
4329 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, in isp_register_node_name_24xx()
4333 isp_prt(isp, ISP_LOG_SANCFG, in isp_register_node_name_24xx()
4336 isp_prt(isp, ISP_LOGWARN, in isp_register_node_name_24xx()
4344 isp_next_handle(ispsoftc_t *isp, uint16_t *ohp) in isp_next_handle() argument
4351 if (ISP_CAP_2KLOGIN(isp)) { in isp_next_handle()
4367 isp_prt(isp, ISP_LOGERR, "Out of port handles!"); in isp_next_handle()
4373 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_next_handle()
4374 fcp = FCPARAM(isp, chan); in isp_next_handle()
4394 ispsoftc_t *isp; in isp_start() local
4404 isp = XS_ISP(xs); in isp_start()
4413 if (XS_CDBLEN(xs) > (IS_FC(isp)? 16 : 44) || XS_CDBLEN(xs) == 0) { in isp_start()
4414 …isp_prt(isp, ISP_LOGERR, "unsupported cdb length (%d, CDB[0]=0x%x)", XS_CDBLEN(xs), XS_CDBP(xs)[0]… in isp_start()
4424 if (IS_FC(isp)) { in isp_start()
4425 fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs)); in isp_start()
4428 isp_prt(isp, ISP_LOG_WARN1, in isp_start()
4435 if (isp->isp_state != ISP_RUNSTATE) { in isp_start()
4436 isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE"); in isp_start()
4441 isp_prt(isp, ISP_LOGDEBUG2, "XS_TGT(xs)=%d", target); in isp_start()
4449 isp_prt(isp, ISP_LOGDEBUG1, in isp_start()
4455 isp_prt(isp, ISP_LOGDEBUG1, in isp_start()
4461 isp_prt(isp, ISP_LOGDEBUG1, in isp_start()
4468 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_start()
4469 if (isp->isp_state != ISP_RUNSTATE) { in isp_start()
4470 isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE"); in isp_start()
4476 isp_spi_update(isp, XS_CHANNEL(xs)); in isp_start()
4483 qep = isp_getrqentry(isp); in isp_start()
4485 isp_prt(isp, ISP_LOG_WARN1, "Request Queue Overflow"); in isp_start()
4498 if (ISP_TST_SENDMARKER(isp, XS_CHANNEL(xs))) { in isp_start()
4499 if (IS_24XX(isp)) { in isp_start()
4505 isp_put_marker_24xx(isp, m, qep); in isp_start()
4512 isp_put_marker(isp, m, qep); in isp_start()
4514 ISP_SYNC_REQUEST(isp); in isp_start()
4515 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 0); in isp_start()
4528 if (IS_24XX(isp)) { in isp_start()
4530 } else if (IS_FC(isp)) { in isp_start()
4543 if (IS_24XX(isp)) { in isp_start()
4558 } else if (IS_FC(isp)) { in isp_start()
4575 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_start()
4586 if (IS_SCSI(isp)) { in isp_start()
4588 isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen); in isp_start()
4597 } else if (IS_24XX(isp)) { in isp_start()
4601 isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen); in isp_start()
4609 t7->req_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(xs)); in isp_start()
4611 if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) { in isp_start()
4612 if (FCP_NEXT_CRN(isp, &t7->req_crn, xs)) { in isp_start()
4613 isp_prt(isp, ISP_LOG_WARN1, in isp_start()
4626 isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen); in isp_start()
4630 if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) { in isp_start()
4631 if (FCP_NEXT_CRN(isp, &t2->req_crn, xs)) { in isp_start()
4632 isp_prt(isp, ISP_LOG_WARN1, in isp_start()
4639 if (ISP_CAP_2KLOGIN(isp)) { in isp_start()
4645 } else if (ISP_CAP_SCCFW(isp)) { in isp_start()
4661 reqp->req_handle = isp_allocate_handle(isp, xs, ISP_HANDLE_INITIATOR); in isp_start()
4663 isp_prt(isp, ISP_LOG_WARN1, "out of xflist pointers"); in isp_start()
4674 dmaresult = ISP_DMASETUP(isp, xs, reqp); in isp_start()
4676 isp_destroy_handle(isp, reqp->req_handle); in isp_start()
4683 …isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "START cmd cdb[0]=0x%x datalen %ld", XS_CDBP(xs)[0], (long) XS_… in isp_start()
4693 isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) in isp_control() argument
4706 if (IS_24XX(isp)) { in isp_control()
4707 isp_prt(isp, ISP_LOGERR, "BUS RESET NOT IMPLEMENTED"); in isp_control()
4709 } else if (IS_FC(isp)) { in isp_control()
4716 mbs.param[1] = SDPARAM(isp, chan)->isp_bus_reset_delay; in isp_control()
4723 ISP_SET_SENDMARKER(isp, chan, 1); in isp_control()
4724 isp_mboxcmd(isp, &mbs); in isp_control()
4728 isp_prt(isp, ISP_LOGINFO, "driver initiated bus reset of bus %d", chan); in isp_control()
4736 if (IS_24XX(isp)) { in isp_control()
4740 fcparam *fcp = FCPARAM(isp, chan); in isp_control()
4744 isp_prt(isp, ISP_LOGWARN, "Chan %d trying to reset bad target %d", chan, tgt); in isp_control()
4750 isp_prt(isp, ISP_LOGWARN, "Chan %d abort of no longer valid target %d", chan, tgt); in isp_control()
4764 tmf->tmf_vpidx = ISP_GET_VPIDX(isp, chan); in isp_control()
4765 isp_put_24xx_tmf(isp, tmf, isp->isp_iocb); in isp_control()
4766 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_control()
4767 isp_print_bytes(isp, "TMF IOCB request", QENTRY_LEN, isp->isp_iocb); in isp_control()
4768 MEMORYBARRIER(isp, SYNC_IFORDEV, 0, QENTRY_LEN, chan); in isp_control()
4771 …isp_prt(isp, ISP_LOGALL, "Chan %d Reset N-Port Handle 0x%04x @ Port 0x%06x", chan, lp->handle, lp-… in isp_control()
4775 mbs.param[2] = DMA_WD1(isp->isp_iocb_dma); in isp_control()
4776 mbs.param[3] = DMA_WD0(isp->isp_iocb_dma); in isp_control()
4777 mbs.param[6] = DMA_WD3(isp->isp_iocb_dma); in isp_control()
4778 mbs.param[7] = DMA_WD2(isp->isp_iocb_dma); in isp_control()
4779 isp_mboxcmd(isp, &mbs); in isp_control()
4783 MEMORYBARRIER(isp, SYNC_IFORCPU, QENTRY_LEN, QENTRY_LEN, chan); in isp_control()
4784 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_control()
4785 … isp_print_bytes(isp, "TMF IOCB response", QENTRY_LEN, &((isp24xx_statusreq_t *)isp->isp_iocb)[1]); in isp_control()
4787 isp_get_24xx_response(isp, &((isp24xx_statusreq_t *)isp->isp_iocb)[1], sp); in isp_control()
4791 …isp_prt(isp, ISP_LOGWARN, "Chan %d reset of target %d returned 0x%x", chan, tgt, sp->req_completio… in isp_control()
4793 } else if (IS_FC(isp)) { in isp_control()
4794 if (ISP_CAP_2KLOGIN(isp)) { in isp_control()
4805 isp_mboxcmd(isp, &mbs); in isp_control()
4809 isp_prt(isp, ISP_LOGINFO, "Target %d on Bus %d Reset Succeeded", tgt, chan); in isp_control()
4810 ISP_SET_SENDMARKER(isp, chan, 1); in isp_control()
4821 handle = isp_find_handle(isp, xs); in isp_control()
4823 isp_prt(isp, ISP_LOGWARN, "cannot find handle for command to abort"); in isp_control()
4826 if (IS_24XX(isp)) { in isp_control()
4831 fcp = FCPARAM(isp, chan); in isp_control()
4833 isp_prt(isp, ISP_LOGWARN, "Chan %d trying to abort bad target %d", chan, tgt); in isp_control()
4839 isp_prt(isp, ISP_LOGWARN, "Chan %d abort of no longer valid target %d", chan, tgt); in isp_control()
4842 …isp_prt(isp, ISP_LOGALL, "Chan %d Abort Cmd for N-Port 0x%04x @ Port 0x%06x", chan, lp->handle, lp… in isp_control()
4850 ab->abrt_vpidx = ISP_GET_VPIDX(isp, chan); in isp_control()
4851 isp_put_24xx_abrt(isp, ab, isp->isp_iocb); in isp_control()
4852 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_control()
4853 isp_print_bytes(isp, "AB IOCB quest", QENTRY_LEN, isp->isp_iocb); in isp_control()
4854 MEMORYBARRIER(isp, SYNC_IFORDEV, 0, 2 * QENTRY_LEN, chan); in isp_control()
4859 mbs.param[2] = DMA_WD1(isp->isp_iocb_dma); in isp_control()
4860 mbs.param[3] = DMA_WD0(isp->isp_iocb_dma); in isp_control()
4861 mbs.param[6] = DMA_WD3(isp->isp_iocb_dma); in isp_control()
4862 mbs.param[7] = DMA_WD2(isp->isp_iocb_dma); in isp_control()
4864 isp_mboxcmd(isp, &mbs); in isp_control()
4868 MEMORYBARRIER(isp, SYNC_IFORCPU, QENTRY_LEN, QENTRY_LEN, chan); in isp_control()
4869 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_control()
4870 isp_print_bytes(isp, "AB IOCB response", QENTRY_LEN, &((isp24xx_abrt_t *)isp->isp_iocb)[1]); in isp_control()
4871 isp_get_24xx_abrt(isp, &((isp24xx_abrt_t *)isp->isp_iocb)[1], ab); in isp_control()
4875 isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d abort returned 0x%x", chan, tgt, ab->abrt_nphdl); in isp_control()
4877 } else if (IS_FC(isp)) { in isp_control()
4878 if (ISP_CAP_SCCFW(isp)) { in isp_control()
4879 if (ISP_CAP_2KLOGIN(isp)) { in isp_control()
4894 isp_mboxcmd(isp, &mbs); in isp_control()
4905 isp_spi_update(isp, chan); in isp_control()
4910 if (IS_FC(isp)) { in isp_control()
4919 return (isp_fclink_test(isp, chan, usdelay)); in isp_control()
4925 if (IS_FC(isp)) { in isp_control()
4929 return (isp_scan_fabric(isp, chan)); in isp_control()
4935 if (IS_FC(isp)) { in isp_control()
4939 return (isp_scan_loop(isp, chan)); in isp_control()
4945 if (IS_FC(isp)) { in isp_control()
4949 return (isp_pdb_sync(isp, chan)); in isp_control()
4955 if (IS_FC(isp) && !IS_24XX(isp)) { in isp_control()
4957 if (ISP_CAP_2KLOGIN(isp)) { in isp_control()
4960 isp_mboxcmd(isp, &mbs); in isp_control()
4968 if (IS_FC(isp)) { in isp_control()
4975 return (isp_getpdb(isp, chan, tgt, pdb)); in isp_control()
4992 *wwnn = isp_get_wwn(isp, chan, tgt, 1); in isp_control()
4998 *wwnp = isp_get_wwn(isp, chan, tgt, 0); in isp_control()
5010 isp_mboxcmd(isp, mbr); in isp_control()
5023 return (isp_plogx(isp, p->channel, p->handle, p->portid, p->flags)); in isp_control()
5026 isp_next_handle(isp, &p->handle); in isp_control()
5027 r = isp_plogx(isp, p->channel, p->handle, p->portid, p->flags); in isp_control()
5037 if (IS_FC(isp)) { in isp_control()
5044 r = isp_fc_change_role(isp, chan, role); in isp_control()
5049 isp_prt(isp, ISP_LOGERR, "Unknown Control Opcode 0x%x", ctl); in isp_control()
5065 isp_intr_atioq(ispsoftc_t *isp) in isp_intr_atioq() argument
5072 iptr = ISP_READ(isp, BIU2400_ATIO_RSPINP); in isp_intr_atioq()
5073 optr = isp->isp_atioodx; in isp_intr_atioq()
5076 MEMORYBARRIER(isp, SYNC_ATIOQ, oop, QENTRY_LEN, -1); in isp_intr_atioq()
5077 addr = ISP_QUEUE_ENTRY(isp->isp_atioq, oop); in isp_intr_atioq()
5078 isp_get_hdr(isp, addr, (isphdr_t *)qe); in isp_intr_atioq()
5083 (void) isp_target_notify(isp, addr, &oop); in isp_intr_atioq()
5086 isp_print_qentry(isp, "?ATIOQ entry?", oop, addr); in isp_intr_atioq()
5089 optr = ISP_NXT_QENTRY(oop, RESULT_QUEUE_LEN(isp)); in isp_intr_atioq()
5091 if (isp->isp_atioodx != optr) { in isp_intr_atioq()
5092 ISP_WRITE(isp, BIU2400_ATIO_RSPOUTP, optr); in isp_intr_atioq()
5093 isp->isp_atioodx = optr; in isp_intr_atioq()
5099 isp_intr_async(ispsoftc_t *isp, uint16_t event) in isp_intr_async() argument
5102 if (IS_FC(isp)) in isp_intr_async()
5103 isp_parse_async_fc(isp, event); in isp_intr_async()
5105 isp_parse_async(isp, event); in isp_intr_async()
5109 isp_intr_mbox(ispsoftc_t *isp, uint16_t mbox0) in isp_intr_mbox() argument
5113 if (!isp->isp_mboxbsy) { in isp_intr_mbox()
5114 isp_prt(isp, ISP_LOGWARN, "mailbox 0x%x with no waiters", mbox0); in isp_intr_mbox()
5117 obits = isp->isp_obits; in isp_intr_mbox()
5118 isp->isp_mboxtmp[0] = mbox0; in isp_intr_mbox()
5119 for (i = 1; i < ISP_NMBOX(isp); i++) { in isp_intr_mbox()
5122 isp->isp_mboxtmp[i] = ISP_READ(isp, MBOX_OFF(i)); in isp_intr_mbox()
5124 MBOX_NOTIFY_COMPLETE(isp); in isp_intr_mbox()
5128 isp_intr_respq(ispsoftc_t *isp) in isp_intr_respq() argument
5143 if (isp->isp_state != ISP_RUNSTATE) { in isp_intr_respq()
5144 isp_prt(isp, ISP_LOGINFO, "respq interrupt when not ready"); in isp_intr_respq()
5148 iptr = ISP_READ(isp, isp->isp_respinrp); in isp_intr_respq()
5150 if (IS_2100(isp) || (IS_2300(isp) && isp->isp_revision < 2)) { in isp_intr_respq()
5153 iptr = ISP_READ(isp, isp->isp_respinrp); in isp_intr_respq()
5156 isp->isp_residx = iptr; in isp_intr_respq()
5158 optr = isp->isp_resodx; in isp_intr_respq()
5161 hp = (isphdr_t *) ISP_QUEUE_ENTRY(isp->isp_result, cptr); in isp_intr_respq()
5162 optr = ISP_NXT_QENTRY(optr, RESULT_QUEUE_LEN(isp)); in isp_intr_respq()
5167 MEMORYBARRIER(isp, SYNC_RESULT, cptr, QENTRY_LEN, -1); in isp_intr_respq()
5168 if (isp->isp_dblev & ISP_LOGDEBUG1) in isp_intr_respq()
5169 isp_print_qentry(isp, "Response Queue Entry", cptr, hp); in isp_intr_respq()
5170 isp_get_hdr(isp, hp, &sp->req_header); in isp_intr_respq()
5179 if (IS_24XX(isp) && etype == RQSTYPE_RESPONSE) { in isp_intr_respq()
5180 isp_get_24xx_response(isp, (isp24xx_statusreq_t *)hp, sp2); in isp_intr_respq()
5190 isp_get_response(isp, (ispstatusreq_t *) hp, sp); in isp_intr_respq()
5198 isp_get_rio1(isp, (isp_rio1_t *) hp, rio); in isp_intr_respq()
5200 isp_fastpost_complete(isp, rio->req_handles[i]); in isp_intr_respq()
5205 isp_prt(isp, ISP_LOGERR, "dropping RIO2 response"); in isp_intr_respq()
5210 isp_get_cont_response(isp, (ispstatus_cont_t *)hp, scp); in isp_intr_respq()
5218 isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, in isp_intr_respq()
5223 isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response"); in isp_intr_respq()
5227 } else if (isp_handle_other_response(isp, etype, hp, &cptr)) { in isp_intr_respq()
5231 sptr = ISP_NXT_QENTRY(sptr, RESULT_QUEUE_LEN(isp)); in isp_intr_respq()
5232 hp = (isphdr_t *)ISP_QUEUE_ENTRY(isp->isp_result, sptr); in isp_intr_respq()
5235 optr = ISP_NXT_QENTRY(cptr, RESULT_QUEUE_LEN(isp)); in isp_intr_respq()
5239 isp_prt(isp, ISP_LOGERR, notresp, etype, cptr, optr); in isp_intr_respq()
5247 isp_print_qentry(isp, "unexpected continuation segment", in isp_intr_respq()
5252 isp_prt(isp, ISP_LOG_WARN1, "internal queues full"); in isp_intr_respq()
5258 isp_print_qentry(isp, "bad header flag", in isp_intr_respq()
5263 isp_print_qentry(isp, "bad request packet", in isp_intr_respq()
5268 isp_print_qentry(isp, "invalid entry count", in isp_intr_respq()
5273 isp_print_qentry(isp, "invalid IOCB ordering", in isp_intr_respq()
5279 xs = isp_find_xs(isp, sp->req_handle); in isp_intr_respq()
5287 isp_prt(isp, ISP_LOGERR, "cannot find handle 0x%x (type 0x%x)", sp->req_handle, etype); in isp_intr_respq()
5289 isp_prt(isp, ISP_LOGERR, "cannot find handle 0x%x (status 0x%x)", sp->req_handle, ts); in isp_intr_respq()
5295 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%jx bus was reset", in isp_intr_respq()
5298 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1); in isp_intr_respq()
5301 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%jx buddaboom", in isp_intr_respq()
5308 if (IS_24XX(isp) && (scsi_status & (RQCS_RV|RQCS_SV)) != 0) { in isp_intr_respq()
5311 } else if (IS_FC(isp) && (scsi_status & RQCS_RV) != 0) { in isp_intr_respq()
5315 if (IS_FC(isp) && (scsi_status & RQCS_SV) != 0) { in isp_intr_respq()
5322 if (IS_24XX(isp)) { in isp_intr_respq()
5332 } else if (IS_SCSI(isp) && (req_state_flags & RQSF_GOT_SENSE)) { in isp_intr_respq()
5365 isp_xs_prt(isp, xs, ISP_LOGWARN, in isp_intr_respq()
5371 if (IS_24XX(isp)) in isp_intr_respq()
5372 isp_parse_status_24xx(isp, sp2, xs, &resid); in isp_intr_respq()
5374 isp_parse_status(isp, sp, xs, &resid); in isp_intr_respq()
5378 if (IS_SCSI(isp)) { in isp_intr_respq()
5387 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_intr_respq()
5405 isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, in isp_intr_respq()
5410 isp_prt(isp, ISP_LOGDEBUG2, "asked for %lu got raw resid %lu settled for %lu", in isp_intr_respq()
5414 ISP_DMAFREE(isp, xs, sp->req_handle); in isp_intr_respq()
5415 isp_destroy_handle(isp, sp->req_handle); in isp_intr_respq()
5429 if (optr != isp->isp_resodx) { in isp_intr_respq()
5430 ISP_WRITE(isp, isp->isp_respoutrp, optr); in isp_intr_respq()
5431 isp->isp_resodx = optr; in isp_intr_respq()
5439 isp_parse_async(ispsoftc_t *isp, uint16_t mbox) in isp_parse_async() argument
5449 if (IS_DUALBUS(isp)) { in isp_parse_async()
5450 chan = ISP_READ(isp, OUTMAILBOX6); in isp_parse_async()
5453 isp_prt(isp, ISP_LOGDEBUG2, "Async Mbox 0x%x", mbox); in isp_parse_async()
5457 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async()
5459 isp_target_async(isp, chan, mbox); in isp_parse_async()
5461 isp_async(isp, ISPASYNC_BUS_RESET, chan); in isp_parse_async()
5464 isp->isp_state = ISP_CRASHED; in isp_parse_async()
5469 if (isp->isp_mboxbsy) { in isp_parse_async()
5470 isp->isp_obits = 1; in isp_parse_async()
5471 isp->isp_mboxtmp[0] = MBOX_HOST_INTERFACE_ERROR; in isp_parse_async()
5472 MBOX_NOTIFY_COMPLETE(isp); in isp_parse_async()
5478 isp_async(isp, ISPASYNC_FW_CRASH); in isp_parse_async()
5482 isp_prt(isp, ISP_LOGERR, "Request Queue Transfer Error"); in isp_parse_async()
5486 isp_prt(isp, ISP_LOGERR, "Response Queue Transfer Error"); in isp_parse_async()
5495 mbox = ISP_READ(isp, isp->isp_rqstoutrp); in isp_parse_async()
5499 isp_prt(isp, ISP_LOGWARN, "timeout initiated SCSI bus reset of chan %d", chan); in isp_parse_async()
5500 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async()
5502 isp_target_async(isp, chan, mbox); in isp_parse_async()
5507 isp_prt(isp, ISP_LOGINFO, "device reset on chan %d", chan); in isp_parse_async()
5508 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async()
5510 isp_target_async(isp, chan, mbox); in isp_parse_async()
5515 isp_prt(isp, ISP_LOGWARN, "extended message underrun"); in isp_parse_async()
5519 isp_prt(isp, ISP_LOGINFO, "SCAM interrupt"); in isp_parse_async()
5523 isp_prt(isp, ISP_LOGERR, "stalled SCSI Bus after DATA Overrun"); in isp_parse_async()
5528 isp_prt(isp, ISP_LOGERR, "SCSI Bus reset after DATA Overrun"); in isp_parse_async()
5532 mbox = ISP_READ(isp, OUTMAILBOX2); in isp_parse_async()
5535 isp_prt(isp, ISP_LOGINFO, "Transition to LVD mode"); in isp_parse_async()
5536 SDPARAM(isp, chan)->isp_diffmode = 0; in isp_parse_async()
5537 SDPARAM(isp, chan)->isp_ultramode = 0; in isp_parse_async()
5538 SDPARAM(isp, chan)->isp_lvdmode = 1; in isp_parse_async()
5541 isp_prt(isp, ISP_LOGINFO, in isp_parse_async()
5543 SDPARAM(isp, chan)->isp_diffmode = 1; in isp_parse_async()
5544 SDPARAM(isp, chan)->isp_ultramode = 0; in isp_parse_async()
5545 SDPARAM(isp, chan)->isp_lvdmode = 0; in isp_parse_async()
5548 isp_prt(isp, ISP_LOGINFO, in isp_parse_async()
5550 SDPARAM(isp, chan)->isp_diffmode = 0; in isp_parse_async()
5551 SDPARAM(isp, chan)->isp_ultramode = 1; in isp_parse_async()
5552 SDPARAM(isp, chan)->isp_lvdmode = 0; in isp_parse_async()
5555 isp_prt(isp, ISP_LOGWARN, in isp_parse_async()
5563 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async()
5568 if (!IS_ULTRA3(isp)) { in isp_parse_async()
5569 isp_prt(isp, ISP_LOGERR, "unexpected fast posting completion"); in isp_parse_async()
5573 h1 = (ISP_READ(isp, OUTMAILBOX2) << 16) | ISP_READ(isp, OUTMAILBOX1); in isp_parse_async()
5577 h1 = (ISP_READ(isp, OUTMAILBOX2) << 16) | ISP_READ(isp, OUTMAILBOX1); in isp_parse_async()
5578 h2 = (ISP_READ(isp, OUTMAILBOX7) << 16) | ISP_READ(isp, OUTMAILBOX6); in isp_parse_async()
5586 isp_prt(isp, ISP_LOGERR, "unexpected 16 bit RIO handle"); in isp_parse_async()
5589 isp_prt(isp, ISP_LOGWARN, "%s: unhandled async code 0x%x", __func__, mbox); in isp_parse_async()
5594 isp_prt(isp, ISP_LOGDEBUG3, "fast post/rio completion of 0x%08x", h1); in isp_parse_async()
5595 isp_fastpost_complete(isp, h1); in isp_parse_async()
5597 isp_prt(isp, ISP_LOGDEBUG3, "fast post/rio completion of 0x%08x", h2); in isp_parse_async()
5598 isp_fastpost_complete(isp, h2); in isp_parse_async()
5604 isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox) in isp_parse_async_fc() argument
5609 if (IS_DUALBUS(isp)) { in isp_parse_async_fc()
5610 chan = ISP_READ(isp, OUTMAILBOX6); in isp_parse_async_fc()
5614 isp_prt(isp, ISP_LOGDEBUG2, "Async Mbox 0x%x", mbox); in isp_parse_async_fc()
5618 isp->isp_state = ISP_CRASHED; in isp_parse_async_fc()
5619 FCPARAM(isp, chan)->isp_loopstate = LOOP_NIL; in isp_parse_async_fc()
5620 isp_change_fw_state(isp, chan, FW_CONFIG_WAIT); in isp_parse_async_fc()
5625 if (isp->isp_mboxbsy) { in isp_parse_async_fc()
5626 isp->isp_obits = 1; in isp_parse_async_fc()
5627 isp->isp_mboxtmp[0] = MBOX_HOST_INTERFACE_ERROR; in isp_parse_async_fc()
5628 MBOX_NOTIFY_COMPLETE(isp); in isp_parse_async_fc()
5634 isp_async(isp, ISPASYNC_FW_CRASH); in isp_parse_async_fc()
5638 isp_prt(isp, ISP_LOGERR, "Request Queue Transfer Error"); in isp_parse_async_fc()
5642 isp_prt(isp, ISP_LOGERR, "Response Queue Transfer Error"); in isp_parse_async_fc()
5647 if (IS_24XX(isp)) { in isp_parse_async_fc()
5648 isp_prt(isp, ISP_LOGERR, "ATIO Queue Transfer Error"); in isp_parse_async_fc()
5652 isp_prt(isp, ISP_LOGERR, "%s: unexpected ASYNC_QWAKEUP code", __func__); in isp_parse_async_fc()
5656 isp_fastpost_complete(isp, (ISP_READ(isp, OUTMAILBOX2) << 16) | ISP_READ(isp, OUTMAILBOX1)); in isp_parse_async_fc()
5660 isp_intr_respq(isp); in isp_parse_async_fc()
5665 isp_target_async(isp, (ISP_READ(isp, OUTMAILBOX2) << 16) | in isp_parse_async_fc()
5666 ISP_READ(isp, OUTMAILBOX1), mbox); in isp_parse_async_fc()
5668 isp_prt(isp, ISP_LOGWARN, "unexpected ASYNC CTIO done"); in isp_parse_async_fc()
5679 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5680 fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5687 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5688 isp_async(isp, ISPASYNC_LIP, chan); in isp_parse_async_fc()
5690 isp_target_async(isp, chan, mbox); in isp_parse_async_fc()
5701 for (i = j = 0; i < isp->isp_maxcmds; i++) { in isp_parse_async_fc()
5705 hdp = &isp->isp_xflist[i]; in isp_parse_async_fc()
5714 isp_prt(isp, ISP_LOG_WARN1, in isp_parse_async_fc()
5722 isp_prt(isp, ISP_LOGERR, lipd, chan, j); in isp_parse_async_fc()
5733 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5734 fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5740 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5741 isp_async(isp, ISPASYNC_LOOP_UP, chan); in isp_parse_async_fc()
5743 isp_target_async(isp, chan, mbox); in isp_parse_async_fc()
5753 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5754 fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5757 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5760 isp_async(isp, ISPASYNC_LOOP_DOWN, chan); in isp_parse_async_fc()
5762 isp_target_async(isp, chan, mbox); in isp_parse_async_fc()
5772 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5773 fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5776 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5779 isp_async(isp, ISPASYNC_LOOP_RESET, chan); in isp_parse_async_fc()
5781 isp_target_async(isp, chan, mbox); in isp_parse_async_fc()
5790 if (IS_23XX(isp) || IS_24XX(isp)) { in isp_parse_async_fc()
5791 nphdl = ISP_READ(isp, OUTMAILBOX1); in isp_parse_async_fc()
5792 nlstate = ISP_READ(isp, OUTMAILBOX2); in isp_parse_async_fc()
5796 if (IS_24XX(isp)) in isp_parse_async_fc()
5797 reason = ISP_READ(isp, OUTMAILBOX3) >> 8; in isp_parse_async_fc()
5800 if (ISP_CAP_MULTI_ID(isp)) { in isp_parse_async_fc()
5801 chan = ISP_READ(isp, OUTMAILBOX3) & 0xff; in isp_parse_async_fc()
5804 echan = isp->isp_nchan - 1; in isp_parse_async_fc()
5805 } else if (chan >= isp->isp_nchan) { in isp_parse_async_fc()
5814 fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5825 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, chan, in isp_parse_async_fc()
5834 portid = ((ISP_READ(isp, OUTMAILBOX1) & 0xff) << 16) | in isp_parse_async_fc()
5835 ISP_READ(isp, OUTMAILBOX2); in isp_parse_async_fc()
5836 if (ISP_CAP_MULTI_ID(isp)) { in isp_parse_async_fc()
5837 chan = ISP_READ(isp, OUTMAILBOX3) & 0xff; in isp_parse_async_fc()
5838 if (chan >= isp->isp_nchan) in isp_parse_async_fc()
5843 fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5850 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, chan, in isp_parse_async_fc()
5855 isp_prt(isp, ISP_LOGWARN, "Error logging disabled (reason 0x%x)", in isp_parse_async_fc()
5856 ISP_READ(isp, OUTMAILBOX1)); in isp_parse_async_fc()
5862 if (!IS_2200(isp) && !IS_2100(isp)) { in isp_parse_async_fc()
5863 isp_prt(isp, ISP_LOGWARN, "bad card for ASYNC_CONNMODE event"); in isp_parse_async_fc()
5867 mbox = ISP_READ(isp, OUTMAILBOX1); in isp_parse_async_fc()
5870 isp_prt(isp, ISP_LOGINFO, in isp_parse_async_fc()
5874 isp_prt(isp, ISP_LOGINFO, in isp_parse_async_fc()
5878 isp_prt(isp, ISP_LOGWARN, in isp_parse_async_fc()
5882 isp->isp_state = ISP_CRASHED; in isp_parse_async_fc()
5883 isp_prt(isp, ISP_LOGERR, "FATAL CONNECTION ERROR"); in isp_parse_async_fc()
5884 isp_async(isp, ISPASYNC_FW_CRASH); in isp_parse_async_fc()
5887 isp_prt(isp, ISP_LOGWARN, in isp_parse_async_fc()
5891 isp_prt(isp, ISP_LOGWARN, in isp_parse_async_fc()
5895 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5896 FCPARAM(isp, chan)->isp_loopstate = LOOP_HAVE_LINK; in isp_parse_async_fc()
5897 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, chan, ISPASYNC_CHANGE_OTHER); in isp_parse_async_fc()
5900 isp_prt(isp, ISP_LOGWARN, "P2P init error (reason 0x%x)", in isp_parse_async_fc()
5901 ISP_READ(isp, OUTMAILBOX1)); in isp_parse_async_fc()
5904 if (IS_24XX(isp)) { in isp_parse_async_fc()
5905 isp_prt(isp, ISP_LOGWARN, "Receive Error"); in isp_parse_async_fc()
5907 isp_prt(isp, ISP_LOGWARN, "unexpected ASYNC_RCV_ERR"); in isp_parse_async_fc()
5911 if (IS_24XX(isp)) { in isp_parse_async_fc()
5912 isp_prt(isp, ISP_LOGTDEBUG0, "LS_RJT sent"); in isp_parse_async_fc()
5915 isp_prt(isp, ISP_LOGTDEBUG0, "QFULL sent"); in isp_parse_async_fc()
5919 isp_prt(isp, ISP_LOGDEBUG0, "FW restart complete"); in isp_parse_async_fc()
5922 isp_prt(isp, ISP_LOGERR, "Temperature alert (subcode 0x%x)", in isp_parse_async_fc()
5923 ISP_READ(isp, OUTMAILBOX1)); in isp_parse_async_fc()
5926 isp_prt(isp, ISP_LOGDEBUG0, "Transceiver insertion (0x%x)", in isp_parse_async_fc()
5927 ISP_READ(isp, OUTMAILBOX1)); in isp_parse_async_fc()
5930 isp_prt(isp, ISP_LOGDEBUG0, "Transceiver removal"); in isp_parse_async_fc()
5933 isp_prt(isp, ISP_LOGDEBUG0, "Autoload FW init complete"); in isp_parse_async_fc()
5936 isp_prt(isp, ISP_LOGERR, "Autoload FW init failure"); in isp_parse_async_fc()
5939 isp_prt(isp, ISP_LOGWARN, "Unknown Async Code 0x%x", mbox); in isp_parse_async_fc()
5951 isp_handle_other_response(ispsoftc_t *isp, int type, isphdr_t *hp, uint32_t *optrp) in isp_handle_other_response() argument
5960 isp_prt(isp, ISP_LOG_WARN1, "Marker Response"); in isp_handle_other_response()
5963 isp_get_ridacq(isp, (isp_ridacq_t *)hp, &rid); in isp_handle_other_response()
5967 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_handle_other_response()
5968 fcparam *fcp = FCPARAM(isp, chan); in isp_handle_other_response()
5975 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, in isp_handle_other_response()
5979 isp_async(isp, ISPASYNC_LOOP_DOWN, in isp_handle_other_response()
5984 fcparam *fcp = FCPARAM(isp, rid.ridacq_vp_index); in isp_handle_other_response()
5990 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, in isp_handle_other_response()
5994 isp_async(isp, ISPASYNC_LOOP_DOWN, in isp_handle_other_response()
6003 ISP_IOXGET_32(isp, (uint32_t *)(hp + 1), hdl); in isp_handle_other_response()
6004 ptr = isp_find_xs(isp, hdl); in isp_handle_other_response()
6006 isp_destroy_handle(isp, hdl); in isp_handle_other_response()
6023 return (isp_target_notify(isp, (ispstatusreq_t *) hp, optrp)); in isp_handle_other_response()
6033 isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, uint32_t *rp) in isp_parse_status() argument
6044 isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Selection Timeout @ %s:%d", __func__, __LINE__); in isp_parse_status()
6051 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Incomplete, state 0x%x", sp->req_state_flags); in isp_parse_status()
6055 isp_xs_prt(isp, xs, ISP_LOGERR, "DMA Error"); in isp_parse_status()
6109 isp_xs_prt(isp, xs, ISP_LOGERR, "Transport Error: %s", buf); in isp_parse_status()
6116 isp_xs_prt(isp, xs, ISP_LOGWARN, "Bus Reset destroyed command"); in isp_parse_status()
6117 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_status()
6118 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_status()
6127 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Aborted"); in isp_parse_status()
6128 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1); in isp_parse_status()
6135 isp_xs_prt(isp, xs, ISP_LOGWARN, "Command timed out"); in isp_parse_status()
6146 isp_xs_prt(isp, xs, ISP_LOGERR, "data overrun (%ld)", (long) XS_GET_RESID(xs)); in isp_parse_status()
6153 isp_xs_prt(isp, xs, ISP_LOGERR, "command overrun"); in isp_parse_status()
6157 isp_xs_prt(isp, xs, ISP_LOGERR, "status overrun"); in isp_parse_status()
6161 isp_xs_prt(isp, xs, ISP_LOGERR, "msg not COMMAND COMPLETE after status"); in isp_parse_status()
6165 isp_xs_prt(isp, xs, ISP_LOGERR, "No MESSAGE OUT phase after selection"); in isp_parse_status()
6169 isp_xs_prt(isp, xs, ISP_LOGERR, "EXTENDED IDENTIFY failed"); in isp_parse_status()
6173 isp_xs_prt(isp, xs, ISP_LOGERR, "INITIATOR DETECTED ERROR rejected"); in isp_parse_status()
6177 isp_xs_prt(isp, xs, ISP_LOGERR, "ABORT OPERATION rejected"); in isp_parse_status()
6181 isp_xs_prt(isp, xs, ISP_LOGERR, "MESSAGE REJECT rejected"); in isp_parse_status()
6185 isp_xs_prt(isp, xs, ISP_LOGERR, "NOP rejected"); in isp_parse_status()
6189 isp_xs_prt(isp, xs, ISP_LOGERR, "MESSAGE PARITY ERROR rejected"); in isp_parse_status()
6193 isp_xs_prt(isp, xs, ISP_LOGWARN, "BUS DEVICE RESET rejected"); in isp_parse_status()
6197 isp_xs_prt(isp, xs, ISP_LOGERR, "IDENTIFY rejected"); in isp_parse_status()
6201 isp_xs_prt(isp, xs, ISP_LOGERR, "Unexpected Bus Free"); in isp_parse_status()
6206 if (IS_FC(isp)) { in isp_parse_status()
6209 …isp_xs_prt(isp, xs, ISP_LOGWARN, bun, XS_XFRLEN(xs), sp->req_resid, (ru_marked)? "marked" : "not m… in isp_parse_status()
6224 isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued transaction with disconnect not set"); in isp_parse_status()
6228 isp_xs_prt(isp, xs, ISP_LOGERR, in isp_parse_status()
6234 isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued cmd when queueing disabled"); in isp_parse_status()
6238 isp_prt(isp, ISP_LOGERR, "Invalid IOCB entry type detected"); in isp_parse_status()
6242 isp_xs_prt(isp, xs, ISP_LOG_WARN1, "internal queues full status 0x%x", *XS_STSP(xs)); in isp_parse_status()
6263 isp_xs_prt(isp, xs, ISP_LOGERR, "SCSI phase skipped"); in isp_parse_status()
6267 isp_xs_prt(isp, xs, ISP_LOGERR, "Auto Request Sense Failed"); in isp_parse_status()
6274 isp_xs_prt(isp, xs, ISP_LOGERR, "Wide Negotiation Failed"); in isp_parse_status()
6275 if (IS_SCSI(isp)) { in isp_parse_status()
6276 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_parse_status()
6287 isp_xs_prt(isp, xs, ISP_LOGERR, "SDTR Message Failed"); in isp_parse_status()
6288 if (IS_SCSI(isp)) { in isp_parse_status()
6289 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_parse_status()
6298 isp_xs_prt(isp, xs, ISP_LOGERR, "Bad LVD condition"); in isp_parse_status()
6309 fcparam *fcp = FCPARAM(isp, 0); in isp_parse_status()
6321 isp_prt(isp, ISP_LOGINFO, "port %s for target %d", reason, XS_TGT(xs)); in isp_parse_status()
6336 isp_prt(isp, ISP_LOGWARN, "port changed for target %d", XS_TGT(xs)); in isp_parse_status()
6344 isp_prt(isp, ISP_LOGWARN, "port busy for target %d", XS_TGT(xs)); in isp_parse_status()
6352 isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x", sp->req_completion_status); in isp_parse_status()
6361 isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, uint32_t *rp) in isp_parse_status_24xx() argument
6374 isp_xs_prt(isp, xs, ISP_LOGERR, "DMA error"); in isp_parse_status_24xx()
6378 isp_xs_prt(isp, xs, ISP_LOGERR, "Transport Error"); in isp_parse_status_24xx()
6382 isp_xs_prt(isp, xs, ISP_LOGWARN, "reset destroyed command"); in isp_parse_status_24xx()
6383 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_status_24xx()
6390 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Aborted"); in isp_parse_status_24xx()
6391 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_status_24xx()
6398 isp_xs_prt(isp, xs, ISP_LOGWARN, "Command Timed Out"); in isp_parse_status_24xx()
6406 isp_xs_prt(isp, xs, ISP_LOGERR, "Data Overrun"); in isp_parse_status_24xx()
6413 isp_prt(isp, ISP_LOGERR, "Chan %d data reassembly error for target %d", chan, XS_TGT(xs)); in isp_parse_status_24xx()
6421 isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", chan, XS_TGT(xs)); in isp_parse_status_24xx()
6436 …isp_xs_prt(isp, xs, ISP_LOGWARN, bun, XS_XFRLEN(xs), sp->req_resid, (ru_marked)? "marked" : "not m… in isp_parse_status_24xx()
6443 …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()
6457 fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs)); in isp_parse_status_24xx()
6469 isp_prt(isp, ISP_LOGINFO, "Chan %d port %s for target %d", in isp_parse_status_24xx()
6485 isp_prt(isp, ISP_LOGWARN, "port changed for target %d chan %d", XS_TGT(xs), chan); in isp_parse_status_24xx()
6493 isp_prt(isp, ISP_LOGWARN, "f/w resource unavailable for target %d chan %d", XS_TGT(xs), chan); in isp_parse_status_24xx()
6501 …isp_prt(isp, ISP_LOGWARN, "command for target %d overlapped task management for chan %d", XS_TGT(x… in isp_parse_status_24xx()
6509 …isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x on chan %d", sp->req_completion_status, c… in isp_parse_status_24xx()
6518 isp_fastpost_complete(ispsoftc_t *isp, uint32_t fph) in isp_fastpost_complete() argument
6525 xs = isp_find_xs(isp, fph); in isp_fastpost_complete()
6527 isp_prt(isp, ISP_LOGWARN, in isp_fastpost_complete()
6531 isp_destroy_handle(isp, fph); in isp_fastpost_complete()
6541 ISP_DMAFREE(isp, xs, fph); in isp_fastpost_complete()
7020 isp_mboxcmd(ispsoftc_t *isp, mbreg_t *mbp) in isp_mboxcmd() argument
7027 if (IS_FC(isp)) { in isp_mboxcmd()
7030 isp_prt(isp, ISP_LOGERR, "Unknown Command 0x%x", opcode); in isp_mboxcmd()
7039 isp_prt(isp, ISP_LOGERR, "Unknown Command 0x%x", opcode); in isp_mboxcmd()
7050 isp_prt(isp, ISP_LOGDEBUG3, "Mailbox Command '%s'", cname); in isp_mboxcmd()
7067 isp_prt(isp, ISP_LOGERR, "no parameters for 0x%x", opcode); in isp_mboxcmd()
7074 if (MBOX_ACQUIRE(isp)) { in isp_mboxcmd()
7079 for (box = 0; box < ISP_NMBOX(isp); box++) { in isp_mboxcmd()
7081 isp_prt(isp, ISP_LOGDEBUG3, "IN mbox %d = 0x%04x", box, in isp_mboxcmd()
7083 ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]); in isp_mboxcmd()
7085 isp->isp_mboxtmp[box] = mbp->param[box] = 0; in isp_mboxcmd()
7088 isp->isp_lastmbxcmd = opcode; in isp_mboxcmd()
7093 isp->isp_obits = obits; in isp_mboxcmd()
7094 isp->isp_mboxbsy = 1; in isp_mboxcmd()
7099 if (IS_24XX(isp)) { in isp_mboxcmd()
7100 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_SET_HOST_INT); in isp_mboxcmd()
7102 ISP_WRITE(isp, HCCR, HCCR_CMD_SET_HOST_INT); in isp_mboxcmd()
7108 MBOX_WAIT_COMPLETE(isp, mbp); in isp_mboxcmd()
7114 isp->isp_mboxbsy = 0; in isp_mboxcmd()
7115 MBOX_RELEASE(isp); in isp_mboxcmd()
7122 for (box = 0; box < ISP_NMBOX(isp); box++) { in isp_mboxcmd()
7124 mbp->param[box] = isp->isp_mboxtmp[box]; in isp_mboxcmd()
7125 isp_prt(isp, ISP_LOGDEBUG3, "OUT mbox %d = 0x%04x", box, in isp_mboxcmd()
7130 isp->isp_mboxbsy = 0; in isp_mboxcmd()
7131 MBOX_RELEASE(isp); in isp_mboxcmd()
7197 isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s%s)", in isp_mboxcmd()
7203 isp_fw_state(ispsoftc_t *isp, int chan) in isp_fw_state() argument
7205 if (IS_FC(isp)) { in isp_fw_state()
7209 isp_mboxcmd(isp, &mbs); in isp_fw_state()
7218 isp_spi_update(ispsoftc_t *isp, int chan) in isp_spi_update() argument
7224 if (IS_FC(isp)) { in isp_spi_update()
7230 sdp = SDPARAM(isp, chan); in isp_spi_update()
7240 isp_prt(isp, ISP_LOGDEBUG0, "skipping target %d bus %d update", tgt, chan); in isp_spi_update()
7296 isp_prt(isp, ISP_LOGDEBUG0, "bus %d set tgt %d flags 0x%x off 0x%x period 0x%x", in isp_spi_update()
7303 isp_mboxcmd(isp, &mbs); in isp_spi_update()
7319 isp_async(isp, ISPASYNC_NEW_TGT_PARAMS, chan, tgt); in isp_spi_update()
7333 isp_setdfltsdparm(ispsoftc_t *isp) in isp_setdfltsdparm() argument
7338 sdp = SDPARAM(isp, 0); in isp_setdfltsdparm()
7339 if (IS_DUALBUS(isp)) in isp_setdfltsdparm()
7350 sdp->isp_initiator_id = DEFAULT_IID(isp, 0); in isp_setdfltsdparm()
7351 if (isp->isp_type >= ISP_HA_SCSI_1040) { in isp_setdfltsdparm()
7357 sdp->isp_max_queue_depth = MAXISPREQUEST(isp); in isp_setdfltsdparm()
7391 if (IS_ULTRA3(isp)) { in isp_setdfltsdparm()
7394 } else if (IS_ULTRA2(isp)) { in isp_setdfltsdparm()
7397 } else if (IS_1240(isp)) { in isp_setdfltsdparm()
7400 } else if ((isp->isp_bustype == ISP_BT_SBUS && in isp_setdfltsdparm()
7401 isp->isp_type < ISP_HA_SCSI_1020A) || in isp_setdfltsdparm()
7402 (isp->isp_bustype == ISP_BT_PCI && in isp_setdfltsdparm()
7403 isp->isp_type < ISP_HA_SCSI_1040) || in isp_setdfltsdparm()
7404 (isp->isp_clock && isp->isp_clock < 60) || in isp_setdfltsdparm()
7424 sdp1->isp_initiator_id = DEFAULT_IID(isp, 1); in isp_setdfltsdparm()
7433 if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) { in isp_setdfltsdparm()
7436 if (isp_read_nvram(isp, 0) == 0) { in isp_setdfltsdparm()
7437 if (IS_DUALBUS(isp)) { in isp_setdfltsdparm()
7438 if (isp_read_nvram(isp, 1) == 0) { in isp_setdfltsdparm()
7444 isp_mboxcmd(isp, &mbs); in isp_setdfltsdparm()
7469 isp_setdfltfcparm(ispsoftc_t *isp, int chan) in isp_setdfltfcparm() argument
7471 fcparam *fcp = FCPARAM(isp, chan); in isp_setdfltfcparm()
7476 fcp->role = DEFAULT_ROLE(isp, chan); in isp_setdfltfcparm()
7480 fcp->isp_loopid = DEFAULT_LOOPID(isp, chan); in isp_setdfltfcparm()
7481 fcp->isp_wwnn_nvram = DEFAULT_NODEWWN(isp, chan); in isp_setdfltfcparm()
7482 fcp->isp_wwpn_nvram = DEFAULT_PORTWWN(isp, chan); in isp_setdfltfcparm()
7489 if (IS_24XX(isp)) { in isp_setdfltfcparm()
7492 if (isp->isp_confopts & ISP_CFG_FULL_DUPLEX) in isp_setdfltfcparm()
7501 if (isp->isp_confopts & ISP_CFG_FULL_DUPLEX) in isp_setdfltfcparm()
7517 if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) { in isp_setdfltfcparm()
7523 j = isp_read_nvram(isp, chan); in isp_setdfltfcparm()
7529 isp->isp_confopts |= ISP_CFG_NONVRAM; in isp_setdfltfcparm()
7533 fcp->isp_wwnn = ACTIVE_NODEWWN(isp, chan); in isp_setdfltfcparm()
7534 fcp->isp_wwpn = ACTIVE_PORTWWN(isp, chan); in isp_setdfltfcparm()
7535 isp_prt(isp, ISP_LOGCONFIG, "Chan %d 0x%08x%08x/0x%08x%08x Role %s", in isp_setdfltfcparm()
7548 isp_reinit(ispsoftc_t *isp, int do_load_defaults) in isp_reinit() argument
7552 if (isp->isp_state > ISP_RESETSTATE) in isp_reinit()
7553 isp_stop(isp); in isp_reinit()
7554 if (isp->isp_state != ISP_RESETSTATE) in isp_reinit()
7555 isp_reset(isp, do_load_defaults); in isp_reinit()
7556 if (isp->isp_state != ISP_RESETSTATE) { in isp_reinit()
7558 isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__); in isp_reinit()
7562 isp_init(isp); in isp_reinit()
7563 if (isp->isp_state > ISP_RESETSTATE && in isp_reinit()
7564 isp->isp_state != ISP_RUNSTATE) { in isp_reinit()
7566 isp_prt(isp, ISP_LOGERR, "%s: cannot init card", __func__); in isp_reinit()
7567 ISP_DISABLE_INTS(isp); in isp_reinit()
7568 if (IS_FC(isp)) { in isp_reinit()
7572 if (!IS_24XX(isp)) { in isp_reinit()
7573 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS); in isp_reinit()
7574 ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET); in isp_reinit()
7575 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS); in isp_reinit()
7576 ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL); in isp_reinit()
7577 ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS); in isp_reinit()
7583 isp_clear_commands(isp); in isp_reinit()
7584 if (IS_FC(isp)) { in isp_reinit()
7585 for (i = 0; i < isp->isp_nchan; i++) in isp_reinit()
7586 isp_clear_portdb(isp, i); in isp_reinit()
7595 isp_read_nvram(ispsoftc_t *isp, int bus) in isp_read_nvram() argument
7606 if (IS_24XX(isp)) { in isp_read_nvram()
7607 return (isp_read_nvram_2400(isp, nvram_data)); in isp_read_nvram()
7608 } else if (IS_FC(isp)) { in isp_read_nvram()
7611 } else if (IS_ULTRA2(isp)) { in isp_read_nvram()
7620 isp_rdnvram_word(isp, i, &nvram_words[i]); in isp_read_nvram()
7625 if (isp->isp_bustype != ISP_BT_SBUS) { in isp_read_nvram()
7626 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM header"); in isp_read_nvram()
7627 isp_prt(isp, ISP_LOGDEBUG0, "%x %x %x", nvram_data[0], nvram_data[1], nvram_data[2]); in isp_read_nvram()
7637 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM checksum"); in isp_read_nvram()
7643 isp_prt(isp, ISP_LOGWARN, "version %d NVRAM not understood", in isp_read_nvram()
7649 if (IS_ULTRA3(isp)) { in isp_read_nvram()
7650 isp_parse_nvram_12160(isp, bus, nvram_data); in isp_read_nvram()
7651 } else if (IS_1080(isp)) { in isp_read_nvram()
7652 isp_parse_nvram_1080(isp, bus, nvram_data); in isp_read_nvram()
7653 } else if (IS_1280(isp) || IS_1240(isp)) { in isp_read_nvram()
7654 isp_parse_nvram_1080(isp, bus, nvram_data); in isp_read_nvram()
7655 } else if (IS_SCSI(isp)) { in isp_read_nvram()
7656 isp_parse_nvram_1020(isp, nvram_data); in isp_read_nvram()
7658 isp_parse_nvram_2100(isp, nvram_data); in isp_read_nvram()
7668 isp_read_nvram_2400(ispsoftc_t *isp, uint8_t *nvram_data) in isp_read_nvram_2400() argument
7673 if (isp->isp_port) { in isp_read_nvram_2400()
7681 isp_rd_2400_nvram(isp, addr++, dptr++); in isp_read_nvram_2400()
7685 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM header (%x %x %x)", in isp_read_nvram_2400()
7693 ISP_IOXGET_32(isp, &dptr[lwrds], tmp); in isp_read_nvram_2400()
7697 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM checksum"); in isp_read_nvram_2400()
7701 isp_parse_nvram_2400(isp, nvram_data); in isp_read_nvram_2400()
7707 isp_rdnvram_word(ispsoftc_t *isp, int wo, uint16_t *rp) in isp_rdnvram_word() argument
7712 ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT); in isp_rdnvram_word()
7714 ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT|BIU_NVRAM_CLOCK); in isp_rdnvram_word()
7717 if (IS_FC(isp)) { in isp_rdnvram_word()
7719 if (IS_2312(isp) && isp->isp_port) { in isp_rdnvram_word()
7724 } else if (IS_ULTRA2(isp)) { in isp_rdnvram_word()
7743 ISP_WRITE(isp, BIU_NVRAM, bit); in isp_rdnvram_word()
7745 junk = ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7746 ISP_WRITE(isp, BIU_NVRAM, bit | BIU_NVRAM_CLOCK); in isp_rdnvram_word()
7748 junk = ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7749 ISP_WRITE(isp, BIU_NVRAM, bit); in isp_rdnvram_word()
7751 junk = ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7760 ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT|BIU_NVRAM_CLOCK); in isp_rdnvram_word()
7762 rv = ISP_READ(isp, BIU_NVRAM); in isp_rdnvram_word()
7767 ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT); in isp_rdnvram_word()
7769 junk = ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7771 ISP_WRITE(isp, BIU_NVRAM, 0); in isp_rdnvram_word()
7773 junk = ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7774 ISP_SWIZZLE_NVRAM_WORD(isp, rp); in isp_rdnvram_word()
7778 isp_rd_2400_nvram(ispsoftc_t *isp, uint32_t addr, uint32_t *rp) in isp_rd_2400_nvram() argument
7784 if (IS_26XX(isp)) { in isp_rd_2400_nvram()
7786 } else if (IS_25XX(isp)) { in isp_rd_2400_nvram()
7789 ISP_WRITE(isp, BIU2400_FLASH_ADDR, base | addr); in isp_rd_2400_nvram()
7792 tmp = ISP_READ(isp, BIU2400_FLASH_ADDR); in isp_rd_2400_nvram()
7798 *rp = ISP_READ(isp, BIU2400_FLASH_DATA); in isp_rd_2400_nvram()
7799 ISP_SWIZZLE_NVRAM_LONG(isp, rp); in isp_rd_2400_nvram()
7806 isp_parse_nvram_1020(ispsoftc_t *isp, uint8_t *nvram_data) in isp_parse_nvram_1020() argument
7808 sdparam *sdp = SDPARAM(isp, 0); in isp_parse_nvram_1020()
7815 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) in isp_parse_nvram_1020()
7830 if (isp->isp_type >= ISP_HA_SCSI_1040) { in isp_parse_nvram_1020()
7877 if (isp->isp_type < ISP_HA_SCSI_1040) { in isp_parse_nvram_1020()
7918 isp_parse_nvram_1080(ispsoftc_t *isp, int bus, uint8_t *nvram_data) in isp_parse_nvram_1080() argument
7920 sdparam *sdp = SDPARAM(isp, bus); in isp_parse_nvram_1080()
7926 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) in isp_parse_nvram_1080()
7993 isp_parse_nvram_12160(ispsoftc_t *isp, int bus, uint8_t *nvram_data) in isp_parse_nvram_12160() argument
7995 sdparam *sdp = SDPARAM(isp, bus); in isp_parse_nvram_12160()
8001 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) in isp_parse_nvram_12160()
8068 isp_parse_nvram_2100(ispsoftc_t *isp, uint8_t *nvram_data) in isp_parse_nvram_2100() argument
8070 fcparam *fcp = FCPARAM(isp, 0); in isp_parse_nvram_2100()
8086 isp_prt(isp, ISP_LOGCONFIG, "NVRAM Port WWN 0x%08x%08x", in isp_parse_nvram_2100()
8093 if (IS_2200(isp) || IS_23XX(isp)) { in isp_parse_nvram_2100()
8096 isp_prt(isp, ISP_LOGCONFIG, "NVRAM Node WWN 0x%08x%08x", in isp_parse_nvram_2100()
8111 if ((isp->isp_confopts & ISP_CFG_OWNFSZ) == 0) { in isp_parse_nvram_2100()
8112 DEFAULT_FRAMESIZE(isp) = in isp_parse_nvram_2100()
8117 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) { in isp_parse_nvram_2100()
8120 if ((isp->isp_confopts & ISP_CFG_OWNEXCTHROTTLE) == 0) { in isp_parse_nvram_2100()
8121 DEFAULT_EXEC_THROTTLE(isp) = in isp_parse_nvram_2100()
8125 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2100()
8133 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2100()
8141 isp_prt(isp, ISP_LOGDEBUG0, "xfwoptions 0x%x zfw options 0x%x", in isp_parse_nvram_2100()
8146 isp_parse_nvram_2400(ispsoftc_t *isp, uint8_t *nvram_data) in isp_parse_nvram_2400() argument
8148 fcparam *fcp = FCPARAM(isp, 0); in isp_parse_nvram_2400()
8151 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2400()
8159 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2400()
8185 if ((isp->isp_confopts & ISP_CFG_OWNFSZ) == 0) { in isp_parse_nvram_2400()
8186 DEFAULT_FRAMESIZE(isp) = in isp_parse_nvram_2400()
8189 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) { in isp_parse_nvram_2400()
8192 if ((isp->isp_confopts & ISP_CFG_OWNEXCTHROTTLE) == 0) { in isp_parse_nvram_2400()
8193 DEFAULT_EXEC_THROTTLE(isp) = in isp_parse_nvram_2400()