Lines Matching refs:isp

69     isp_prt(isp, ISP_LOGSANCFG, 				\
160 isp_reset(ispsoftc_t *isp, int do_load_defaults) in isp_reset() argument
168 isp->isp_state = ISP_NILSTATE; in isp_reset()
169 if (isp->isp_dead) { in isp_reset()
170 isp_shutdown(isp); in isp_reset()
171 ISP_DISABLE_INTS(isp); in isp_reset()
185 ISP_DISABLE_INTS(isp); in isp_reset()
192 if (IS_24XX(isp)) { in isp_reset()
193 isp->isp_maxcmds = 4096; in isp_reset()
194 } else if (IS_2322(isp)) { in isp_reset()
195 isp->isp_maxcmds = 2048; in isp_reset()
196 } else if (IS_23XX(isp) || IS_2200(isp)) { in isp_reset()
197 isp->isp_maxcmds = 1024; in isp_reset()
199 isp->isp_maxcmds = 512; in isp_reset()
208 if (ISP_MBOXDMASETUP(isp) != 0) { in isp_reset()
209 isp_prt(isp, ISP_LOGERR, "Cannot setup DMA"); in isp_reset()
217 if (IS_24XX(isp)) { in isp_reset()
218 isp->isp_rqstinrp = BIU2400_REQINP; in isp_reset()
219 isp->isp_rqstoutrp = BIU2400_REQOUTP; in isp_reset()
220 isp->isp_respinrp = BIU2400_RSPINP; in isp_reset()
221 isp->isp_respoutrp = BIU2400_RSPOUTP; in isp_reset()
222 } else if (IS_23XX(isp)) { in isp_reset()
223 isp->isp_rqstinrp = BIU_REQINP; in isp_reset()
224 isp->isp_rqstoutrp = BIU_REQOUTP; in isp_reset()
225 isp->isp_respinrp = BIU_RSPINP; in isp_reset()
226 isp->isp_respoutrp = BIU_RSPOUTP; in isp_reset()
228 isp->isp_rqstinrp = INMAILBOX4; in isp_reset()
229 isp->isp_rqstoutrp = OUTMAILBOX4; in isp_reset()
230 isp->isp_respinrp = OUTMAILBOX5; in isp_reset()
231 isp->isp_respoutrp = INMAILBOX5; in isp_reset()
238 if (IS_24XX(isp)) { in isp_reset()
239 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_HOST_INT); in isp_reset()
240 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); in isp_reset()
241 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_PAUSE); in isp_reset()
243 ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE); in isp_reset()
246 if (IS_FC(isp)) { in isp_reset()
247 switch (isp->isp_type) { in isp_reset()
273 if (!IS_24XX(isp)) { in isp_reset()
278 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS); in isp_reset()
279 ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET); in isp_reset()
280 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS); in isp_reset()
281 ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL); in isp_reset()
282 ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS); in isp_reset()
284 } else if (IS_1240(isp)) { in isp_reset()
288 isp->isp_clock = 60; in isp_reset()
289 sdp = SDPARAM(isp, 0); in isp_reset()
291 sdp = SDPARAM(isp, 1); in isp_reset()
296 } else if (IS_ULTRA3(isp)) { in isp_reset()
297 sdparam *sdp = isp->isp_param; in isp_reset()
299 isp->isp_clock = 100; in isp_reset()
301 if (IS_10160(isp)) in isp_reset()
303 else if (IS_12160(isp)) in isp_reset()
309 if (IS_DUALBUS(isp)) { in isp_reset()
313 } else if (IS_ULTRA2(isp)) { in isp_reset()
316 sdparam *sdp = SDPARAM(isp, 0); in isp_reset()
318 isp->isp_clock = 100; in isp_reset()
320 if (IS_1280(isp)) in isp_reset()
322 else if (IS_1080(isp)) in isp_reset()
327 l = ISP_READ(isp, SXP_PINS_DIFF) & ISP1080_MODE_MASK; in isp_reset()
331 isp_prt(isp, ISP_LOGCONFIG, m, 0, "LVD"); in isp_reset()
335 isp_prt(isp, ISP_LOGCONFIG, m, 0, "Differential"); in isp_reset()
339 isp_prt(isp, ISP_LOGCONFIG, m, 0, "Single-Ended"); in isp_reset()
342 isp_prt(isp, ISP_LOGERR, in isp_reset()
347 if (IS_DUALBUS(isp)) { in isp_reset()
348 sdp = SDPARAM(isp, 1); in isp_reset()
349 l = ISP_READ(isp, SXP_PINS_DIFF|SXP_BANK1_SELECT); in isp_reset()
354 isp_prt(isp, ISP_LOGCONFIG, m, 1, "LVD"); in isp_reset()
358 isp_prt(isp, ISP_LOGCONFIG, in isp_reset()
363 isp_prt(isp, ISP_LOGCONFIG, in isp_reset()
367 isp_prt(isp, ISP_LOGERR, in isp_reset()
373 sdparam *sdp = SDPARAM(isp, 0); in isp_reset()
374 i = ISP_READ(isp, BIU_CONF0) & BIU_CONF0_HW_MASK; in isp_reset()
377 isp_prt(isp, ISP_LOGALL, "Unknown Chip Type 0x%x", i); in isp_reset()
381 isp->isp_type = ISP_HA_SCSI_1020; in isp_reset()
382 isp->isp_clock = 40; in isp_reset()
391 isp->isp_type = ISP_HA_SCSI_1020A; in isp_reset()
392 isp->isp_clock = 40; in isp_reset()
396 isp->isp_type = ISP_HA_SCSI_1040; in isp_reset()
397 isp->isp_clock = 60; in isp_reset()
401 isp->isp_type = ISP_HA_SCSI_1040A; in isp_reset()
402 isp->isp_clock = 60; in isp_reset()
406 isp->isp_type = ISP_HA_SCSI_1040B; in isp_reset()
407 isp->isp_clock = 60; in isp_reset()
411 isp->isp_type = ISP_HA_SCSI_1040C; in isp_reset()
412 isp->isp_clock = 60; in isp_reset()
419 if (ISP_READ(isp, SXP_PINS_DIFF) & SXP_PINS_DIFF_MODE) { in isp_reset()
420 isp_prt(isp, ISP_LOGCONFIG, "Differential Mode"); in isp_reset()
425 i = ISP_READ(isp, RISC_PSR); in isp_reset()
426 if (isp->isp_bustype == ISP_BT_SBUS) { in isp_reset()
432 isp_prt(isp, ISP_LOGCONFIG, "Ultra Mode Capable"); in isp_reset()
438 isp->isp_clock = 60; in isp_reset()
450 if (isp->isp_mdvec->dv_clock) { in isp_reset()
451 if (isp->isp_mdvec->dv_clock < isp->isp_clock) { in isp_reset()
452 isp->isp_clock = isp->isp_mdvec->dv_clock; in isp_reset()
461 isp->isp_intcnt = isp->isp_intbogus = 0; in isp_reset()
466 ISP_RESET0(isp); in isp_reset()
473 if (IS_SCSI(isp)) { in isp_reset()
474 ISP_WRITE(isp, BIU_ICR, BIU_ICR_SOFT_RESET); in isp_reset()
483 ISP_WRITE(isp, CDMA_CONTROL, DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT); in isp_reset()
484 ISP_WRITE(isp, DDMA_CONTROL, DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT); in isp_reset()
487 } else if (IS_24XX(isp)) { in isp_reset()
491 ISP_WRITE(isp, BIU2400_CSR, BIU2400_DMA_STOP|(3 << 4)); in isp_reset()
494 val = ISP_READ(isp, BIU2400_CSR); in isp_reset()
500 ISP_RESET0(isp); in isp_reset()
501 isp_prt(isp, ISP_LOGERR, "DMA Failed to Stop on Reset"); in isp_reset()
507 ISP_WRITE(isp, BIU2400_CSR, BIU2400_SOFT_RESET|BIU2400_DMA_STOP|(3 << 4)); in isp_reset()
511 val = ISP_READ(isp, OUTMAILBOX0); in isp_reset()
514 val = ISP_READ(isp, BIU2400_CSR); in isp_reset()
520 ISP_RESET0(isp); in isp_reset()
521 isp_prt(isp, ISP_LOGERR, "Failed to come out of reset"); in isp_reset()
525 ISP_WRITE(isp, BIU2100_CSR, BIU2100_SOFT_RESET); in isp_reset()
534 ISP_WRITE(isp, CDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); in isp_reset()
535 ISP_WRITE(isp, TDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); in isp_reset()
536 ISP_WRITE(isp, RDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); in isp_reset()
544 if (IS_SCSI(isp)) { in isp_reset()
545 if (!(ISP_READ(isp, BIU_ICR) & BIU_ICR_SOFT_RESET)) { in isp_reset()
548 } else if (IS_24XX(isp)) { in isp_reset()
549 if (ISP_READ(isp, OUTMAILBOX0) == 0) { in isp_reset()
553 if (!(ISP_READ(isp, BIU2100_CSR) & BIU2100_SOFT_RESET)) in isp_reset()
558 ISP_DUMPREGS(isp, "chip reset timed out"); in isp_reset()
559 ISP_RESET0(isp); in isp_reset()
569 if (IS_SCSI(isp)) { in isp_reset()
570 ISP_WRITE(isp, BIU_CONF1, 0); in isp_reset()
571 } else if (!IS_24XX(isp)) { in isp_reset()
572 ISP_WRITE(isp, BIU2100_CSR, 0); in isp_reset()
578 if (IS_24XX(isp)) { in isp_reset()
579 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_RESET); in isp_reset()
580 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_RELEASE); in isp_reset()
581 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RESET); in isp_reset()
583 ISP_WRITE(isp, HCCR, HCCR_CMD_RESET); in isp_reset()
585 ISP_WRITE(isp, BIU_SEMA, 0); in isp_reset()
591 if (IS_24XX(isp)) { in isp_reset()
594 val = ISP_READ(isp, OUTMAILBOX0); in isp_reset()
600 ISP_RESET0(isp); in isp_reset()
601 isp_prt(isp, ISP_LOGERR, "reset didn't clear"); in isp_reset()
604 } else if (IS_SCSI(isp)) { in isp_reset()
605 uint16_t tmp = isp->isp_mdvec->dv_conf1; in isp_reset()
609 if (isp->isp_type == ISP_HA_SCSI_1040A) { in isp_reset()
612 ISP_SETBITS(isp, BIU_CONF1, tmp); in isp_reset()
614 ISP_SETBITS(isp, CDMA_CONF, DMA_ENABLE_BURST); in isp_reset()
615 ISP_SETBITS(isp, DDMA_CONF, DMA_ENABLE_BURST); in isp_reset()
617 if (SDPARAM(isp, 0)->isp_ptisp) { in isp_reset()
618 if (SDPARAM(isp, 0)->isp_ultramode) { in isp_reset()
619 while (ISP_READ(isp, RISC_MTR) != 0x1313) { in isp_reset()
620 ISP_WRITE(isp, RISC_MTR, 0x1313); in isp_reset()
621 ISP_WRITE(isp, HCCR, HCCR_CMD_STEP); in isp_reset()
624 ISP_WRITE(isp, RISC_MTR, 0x1212); in isp_reset()
629 ISP_WRITE(isp, RISC_EMB, DUAL_BANK); in isp_reset()
631 ISP_WRITE(isp, RISC_MTR, 0x1212); in isp_reset()
633 ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); in isp_reset()
635 ISP_WRITE(isp, RISC_MTR2100, 0x1212); in isp_reset()
636 if (IS_2200(isp) || IS_23XX(isp)) { in isp_reset()
637 ISP_WRITE(isp, HCCR, HCCR_2X00_DISABLE_PARITY_PAUSE); in isp_reset()
639 ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); in isp_reset()
642 ISP_WRITE(isp, isp->isp_rqstinrp, 0); in isp_reset()
643 ISP_WRITE(isp, isp->isp_rqstoutrp, 0); in isp_reset()
644 ISP_WRITE(isp, isp->isp_respinrp, 0); in isp_reset()
645 ISP_WRITE(isp, isp->isp_respoutrp, 0); in isp_reset()
646 if (IS_24XX(isp)) { in isp_reset()
647 ISP_WRITE(isp, BIU2400_PRI_REQINP, 0); in isp_reset()
648 ISP_WRITE(isp, BIU2400_PRI_REQOUTP, 0); in isp_reset()
649 ISP_WRITE(isp, BIU2400_ATIO_RSPINP, 0); in isp_reset()
650 ISP_WRITE(isp, BIU2400_ATIO_RSPOUTP, 0); in isp_reset()
656 ISP_RESET1(isp); in isp_reset()
664 if (IS_2312(isp) && isp->isp_revision < 2) { in isp_reset()
668 while (ISP_READ(isp, OUTMAILBOX0) == MBOX_BUSY) { in isp_reset()
671 ISP_RESET0(isp); in isp_reset()
672 isp_prt(isp, ISP_LOGERR, in isp_reset()
692 isp_mboxcmd(isp, &mbs); in isp_reset()
694 isp_prt(isp, ISP_LOGERR, "NOP command failed (%x)", mbs.param[0]); in isp_reset()
695 ISP_RESET0(isp); in isp_reset()
703 if (IS_SCSI(isp) || IS_24XX(isp)) { in isp_reset()
714 isp_mboxcmd(isp, &mbs); in isp_reset()
716 ISP_RESET0(isp); in isp_reset()
722 ISP_RESET0(isp); in isp_reset()
723 …isp_prt(isp, ISP_LOGERR, "Register Test Failed (0x%x 0x%x 0x%x 0x%x 0x%x)", mbs.param[1], mbs.para… in isp_reset()
738 if ((isp->isp_mdvec->dv_ispfw == NULL) || (isp->isp_confopts & ISP_CFG_NORELOAD)) { in isp_reset()
742 if (IS_24XX(isp)) { in isp_reset()
744 } else if (IS_23XX(isp)) { in isp_reset()
750 if (dodnld && IS_24XX(isp)) { in isp_reset()
751 const uint32_t *ptr = isp->isp_mdvec->dv_ispfw; in isp_reset()
761 isp_prt(isp, ISP_LOGDEBUG0, "load 0x%x words of code at load address 0x%x", ptr[3], ptr[2]); in isp_reset()
771 nw = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)) >> 2; in isp_reset()
775 cp = isp->isp_rquest; in isp_reset()
777 ISP_IOXPUT_32(isp, ptr[wi++], &cp[i]); in isp_reset()
780 MEMORYBARRIER(isp, SYNC_REQUEST, 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)), -1); in isp_reset()
785 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_reset()
786 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_reset()
788 mbs.param[6] = DMA_WD3(isp->isp_rquest_dma); in isp_reset()
789 mbs.param[7] = DMA_WD2(isp->isp_rquest_dma); in isp_reset()
793 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_reset()
794 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_reset()
797 mbs.param[6] = DMA_WD3(isp->isp_rquest_dma); in isp_reset()
798 mbs.param[7] = DMA_WD2(isp->isp_rquest_dma); in isp_reset()
802 isp_mboxcmd(isp, &mbs); in isp_reset()
804 isp_prt(isp, ISP_LOGERR, "F/W Risc Ram Load Failed"); in isp_reset()
805 ISP_RESET0(isp); in isp_reset()
816 isp->isp_loaded_fw = 1; in isp_reset()
817 } else if (dodnld && IS_23XX(isp)) { in isp_reset()
818 const uint16_t *ptr = isp->isp_mdvec->dv_ispfw; in isp_reset()
828 isp_prt(isp, ISP_LOGDEBUG0, "load 0x%x words of code at load address 0x%x", ptr[3], la); in isp_reset()
837 nw = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)) >> 1; in isp_reset()
844 cp = isp->isp_rquest; in isp_reset()
846 ISP_IOXPUT_16(isp, ptr[wi++], &cp[i]); in isp_reset()
849 MEMORYBARRIER(isp, SYNC_REQUEST, 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)), -1); in isp_reset()
854 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_reset()
855 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_reset()
857 mbs.param[6] = DMA_WD3(isp->isp_rquest_dma); in isp_reset()
858 mbs.param[7] = DMA_WD2(isp->isp_rquest_dma); in isp_reset()
862 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_reset()
863 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_reset()
865 mbs.param[6] = DMA_WD3(isp->isp_rquest_dma); in isp_reset()
866 mbs.param[7] = DMA_WD2(isp->isp_rquest_dma); in isp_reset()
870 isp_mboxcmd(isp, &mbs); in isp_reset()
872 isp_prt(isp, ISP_LOGERR, "F/W Risc Ram Load Failed"); in isp_reset()
873 ISP_RESET0(isp); in isp_reset()
879 if (!IS_2322(isp)) { in isp_reset()
899 isp->isp_loaded_fw = 1; in isp_reset()
905 ucd.cp = isp->isp_mdvec->dv_ispfw; in isp_reset()
906 isp->isp_mbxworkp = &ucd.np[1]; in isp_reset()
907 isp->isp_mbxwrk0 = ucd.np[3] - 1; in isp_reset()
908 isp->isp_mbxwrk1 = code_org + 1; in isp_reset()
914 isp_mboxcmd(isp, &mbs); in isp_reset()
916 isp_prt(isp, ISP_LOGERR, "F/W download failed at word %d", isp->isp_mbxwrk1 - code_org); in isp_reset()
917 ISP_RESET0(isp); in isp_reset()
921 isp->isp_loaded_fw = 0; in isp_reset()
922 isp_prt(isp, ISP_LOGDEBUG2, "skipping f/w download"); in isp_reset()
928 if (isp->isp_loaded_fw) { in isp_reset()
931 if (IS_24XX(isp)) { in isp_reset()
937 isp_mboxcmd(isp, &mbs); in isp_reset()
939 isp_prt(isp, ISP_LOGERR, dcrc); in isp_reset()
940 ISP_RESET0(isp); in isp_reset()
954 if (IS_24XX(isp)) { in isp_reset()
957 if (isp->isp_loaded_fw) { in isp_reset()
962 if (IS_25XX(isp)) { in isp_reset()
965 } else if (IS_2322(isp)) { in isp_reset()
967 if (isp->isp_loaded_fw) { in isp_reset()
975 isp_mboxcmd(isp, &mbs); in isp_reset()
976 if (IS_2322(isp) || IS_24XX(isp)) { in isp_reset()
978 ISP_RESET0(isp); in isp_reset()
987 if (IS_24XX(isp)) { in isp_reset()
993 isp_prt(isp, ISP_LOGERR, "f/w didn't *really* start"); in isp_reset()
994 ISP_RESET0(isp); in isp_reset()
999 if (IS_SCSI(isp)) { in isp_reset()
1003 if (isp->isp_clock) { in isp_reset()
1005 mbs.param[1] = isp->isp_clock; in isp_reset()
1007 isp_mboxcmd(isp, &mbs); in isp_reset()
1018 isp_mboxcmd(isp, &mbs); in isp_reset()
1020 ISP_RESET0(isp); in isp_reset()
1029 if (ISP_SBUS_SUPPORTED && isp->isp_bustype == ISP_BT_SBUS) { in isp_reset()
1032 isp->isp_fwrev[0] = 7; in isp_reset()
1033 isp->isp_fwrev[1] = 55; in isp_reset()
1035 isp->isp_fwrev[0] = 1; in isp_reset()
1036 isp->isp_fwrev[1] = 37; in isp_reset()
1038 isp->isp_fwrev[2] = 0; in isp_reset()
1041 isp->isp_fwrev[0] = mbs.param[1]; in isp_reset()
1042 isp->isp_fwrev[1] = mbs.param[2]; in isp_reset()
1043 isp->isp_fwrev[2] = mbs.param[3]; in isp_reset()
1046 isp_prt(isp, ISP_LOGCONFIG, "Board Type %s, Chip Revision 0x%x, %s F/W Revision %d.%d.%d", in isp_reset()
1047 …btype, isp->isp_revision, dodnld? "loaded" : "resident", isp->isp_fwrev[0], isp->isp_fwrev[1], isp in isp_reset()
1049 if (IS_FC(isp)) { in isp_reset()
1057 if ((ISP_FW_OLDER_THAN(isp, 1, 17, 1))) { in isp_reset()
1059 isp->isp_fwattr = ISP_FW_ATTR_SCCLUN; in isp_reset()
1061 isp->isp_fwattr = 0; in isp_reset()
1064 isp->isp_fwattr = mbs.param[6]; in isp_reset()
1065 isp_prt(isp, ISP_LOGDEBUG0, "Firmware Attributes = 0x%x", mbs.param[6]); in isp_reset()
1069 isp->isp_fwattr = ISP_FW_ATTR_TMODE; in isp_reset()
1071 isp->isp_fwattr = 0; in isp_reset()
1075 if (!IS_24XX(isp)) { in isp_reset()
1077 isp_mboxcmd(isp, &mbs); in isp_reset()
1079 ISP_RESET0(isp); in isp_reset()
1082 if (isp->isp_maxcmds >= mbs.param[2]) { in isp_reset()
1083 isp->isp_maxcmds = mbs.param[2]; in isp_reset()
1086 isp_prt(isp, ISP_LOGCONFIG, "%d max I/O command limit set", isp->isp_maxcmds); in isp_reset()
1093 if (IS_FC(isp) && ISP_CAP_MULTI_ID(isp) == 0 && isp->isp_nchan > 1) { in isp_reset()
1094 …isp_prt(isp, ISP_LOGWARN, "non-MULTIID f/w loaded, only can enable 1 of %d channels", isp->isp_nch… in isp_reset()
1095 isp->isp_nchan = 1; in isp_reset()
1098 for (i = 0; i < isp->isp_nchan; i++) { in isp_reset()
1099 isp_fw_state(isp, i); in isp_reset()
1101 if (isp->isp_dead) { in isp_reset()
1102 isp_shutdown(isp); in isp_reset()
1103 ISP_DISABLE_INTS(isp); in isp_reset()
1107 isp->isp_state = ISP_RESETSTATE; in isp_reset()
1126 if (IS_SCSI(isp)) { in isp_reset()
1128 if (IS_ULTRA2(isp) || IS_ULTRA3(isp)) { in isp_reset()
1129 isp->isp_maxluns = 32; in isp_reset()
1131 isp->isp_maxluns = 8; in isp_reset()
1134 isp->isp_maxluns = 8; in isp_reset()
1137 if (ISP_CAP_SCCFW(isp)) { in isp_reset()
1138 isp->isp_maxluns = 16384; in isp_reset()
1140 isp->isp_maxluns = 16; in isp_reset()
1150 if (IS_SCSI(isp)) { in isp_reset()
1151 isp_setdfltsdparm(isp); in isp_reset()
1153 for (i = 0; i < isp->isp_nchan; i++) { in isp_reset()
1154 isp_setdfltfcparm(isp, i); in isp_reset()
1167 isp_init(ispsoftc_t *isp) in isp_init() argument
1169 if (IS_FC(isp)) { in isp_init()
1170 if (IS_24XX(isp)) { in isp_init()
1171 isp_fibre_init_2400(isp); in isp_init()
1173 isp_fibre_init(isp); in isp_init()
1176 isp_scsi_init(isp); in isp_init()
1178 GET_NANOTIME(&isp->isp_init_time); in isp_init()
1182 isp_scsi_init(ispsoftc_t *isp) in isp_scsi_init() argument
1187 sdp_chan0 = SDPARAM(isp, 0); in isp_scsi_init()
1189 if (IS_DUALBUS(isp)) { in isp_scsi_init()
1190 sdp_chan1 = SDPARAM(isp, 1); in isp_scsi_init()
1199 ISP_WRITE(isp, RISC_MTR, 0x1313); in isp_scsi_init()
1211 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1222 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1237 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1239 isp_prt(isp, ISP_LOGERR, in isp_scsi_init()
1256 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1258 isp_prt(isp, ISP_LOGERR, "failed to set tag age limit (%d,%d)", in isp_scsi_init()
1269 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1275 isp_scsi_channel_init(isp, 0); in isp_scsi_init()
1276 if (IS_DUALBUS(isp)) in isp_scsi_init()
1277 isp_scsi_channel_init(isp, 1); in isp_scsi_init()
1283 if (IS_ULTRA2(isp) || IS_1240(isp)) { in isp_scsi_init()
1285 mbs.param[1] = RESULT_QUEUE_LEN(isp); in isp_scsi_init()
1286 mbs.param[2] = DMA_WD1(isp->isp_result_dma); in isp_scsi_init()
1287 mbs.param[3] = DMA_WD0(isp->isp_result_dma); in isp_scsi_init()
1289 mbs.param[6] = DMA_WD3(isp->isp_result_dma); in isp_scsi_init()
1290 mbs.param[7] = DMA_WD2(isp->isp_result_dma); in isp_scsi_init()
1291 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1295 isp->isp_residx = mbs.param[5]; in isp_scsi_init()
1298 mbs.param[1] = RQUEST_QUEUE_LEN(isp); in isp_scsi_init()
1299 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_scsi_init()
1300 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_scsi_init()
1302 mbs.param[6] = DMA_WD3(isp->isp_result_dma); in isp_scsi_init()
1303 mbs.param[7] = DMA_WD2(isp->isp_result_dma); in isp_scsi_init()
1304 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1308 isp->isp_reqidx = isp->isp_reqodx = mbs.param[4]; in isp_scsi_init()
1311 mbs.param[1] = RESULT_QUEUE_LEN(isp); in isp_scsi_init()
1312 mbs.param[2] = DMA_WD1(isp->isp_result_dma); in isp_scsi_init()
1313 mbs.param[3] = DMA_WD0(isp->isp_result_dma); in isp_scsi_init()
1315 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1319 isp->isp_residx = mbs.param[5]; in isp_scsi_init()
1322 mbs.param[1] = RQUEST_QUEUE_LEN(isp); in isp_scsi_init()
1323 mbs.param[2] = DMA_WD1(isp->isp_rquest_dma); in isp_scsi_init()
1324 mbs.param[3] = DMA_WD0(isp->isp_rquest_dma); in isp_scsi_init()
1326 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1330 isp->isp_reqidx = isp->isp_reqodx = mbs.param[4]; in isp_scsi_init()
1344 if (IS_ULTRA2(isp)) in isp_scsi_init()
1347 if (IS_ULTRA3(isp)) in isp_scsi_init()
1350 if (IS_ULTRA3(isp)) in isp_scsi_init()
1355 isp_mboxcmd(isp, &mbs); in isp_scsi_init()
1357 isp_prt(isp, ISP_LOGINFO, in isp_scsi_init()
1362 isp->isp_state = ISP_INITSTATE; in isp_scsi_init()
1366 isp_scsi_channel_init(ispsoftc_t *isp, int chan) in isp_scsi_channel_init() argument
1372 sdp = SDPARAM(isp, chan); in isp_scsi_channel_init()
1379 isp_mboxcmd(isp, &mbs); in isp_scsi_channel_init()
1383 isp_prt(isp, ISP_LOGINFO, "Chan %d Initiator ID is %d", in isp_scsi_channel_init()
1406 if (isp->isp_loaded_fw) { in isp_scsi_channel_init()
1430 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()
1432 isp_mboxcmd(isp, &mbs); in isp_scsi_channel_init()
1439 isp_mboxcmd(isp, &mbs); in isp_scsi_channel_init()
1457 for (lun = 0; lun < (int) isp->isp_maxluns; lun++) { in isp_scsi_channel_init()
1462 isp_mboxcmd(isp, &mbs); in isp_scsi_channel_init()
1481 isp_fibre_init(ispsoftc_t *isp) in isp_fibre_init() argument
1491 fcp = FCPARAM(isp, 0); in isp_fibre_init()
1493 isp->isp_state = ISP_INITSTATE; in isp_fibre_init()
1511 if (IS_2100(isp) && isp->isp_revision < 5) { in isp_fibre_init()
1520 if (!ISP_FW_NEWER_THAN(isp, 1, 17, 0)) { in isp_fibre_init()
1544 icbp->icb_maxfrmlen = DEFAULT_FRAMESIZE(isp); in isp_fibre_init()
1546 …isp_prt(isp, ISP_LOGERR, "bad frame length (%d) from NVRAM- using %d", DEFAULT_FRAMESIZE(isp), ICB… in isp_fibre_init()
1551 isp_prt(isp, ISP_LOGERR, "bad maximum allocation (%d)- using 16", fcp->isp_maxalloc); in isp_fibre_init()
1554 icbp->icb_execthrottle = DEFAULT_EXEC_THROTTLE(isp); in isp_fibre_init()
1556 …isp_prt(isp, ISP_LOGERR, "bad execution throttle of %d- using %d", DEFAULT_EXEC_THROTTLE(isp), ICB… in isp_fibre_init()
1562 ownloopid = (isp->isp_confopts & ISP_CFG_OWNLOOPID) != 0; in isp_fibre_init()
1572 if (ownloopid || ISP_FW_NEWER_THAN(isp, 2, 2, 5)) { in isp_fibre_init()
1582 if (IS_2100(isp)) { in isp_fibre_init()
1588 } else if (IS_2200(isp) || IS_23XX(isp)) { in isp_fibre_init()
1593 switch (isp->isp_confopts & ISP_CFG_PORT_PREF) { in isp_fibre_init()
1607 if (IS_2200(isp)) { in isp_fibre_init()
1630 if (isp->isp_confopts & ISP_CFG_ONEGB) { in isp_fibre_init()
1632 } else if (isp->isp_confopts & ISP_CFG_TWOGB) { in isp_fibre_init()
1647 if (ISP_FW_NEWER_THAN(isp, 2, 26, 0)) { in isp_fibre_init()
1652 if (ISP_FW_NEWER_THAN(isp, 3, 16, 0)) { in isp_fibre_init()
1658 isp_mboxcmd(isp, &mbs); in isp_fibre_init()
1670 isp_prt(isp, ISP_LOGDEBUG1, in isp_fibre_init()
1679 isp_prt(isp, ISP_LOGDEBUG1, in isp_fibre_init()
1684 isp_prt(isp, ISP_LOGERR, "No valid WWNs to use"); in isp_fibre_init()
1687 icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp); in isp_fibre_init()
1689 isp_prt(isp, ISP_LOGERR, "bad request queue length"); in isp_fibre_init()
1691 icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp); in isp_fibre_init()
1693 isp_prt(isp, ISP_LOGERR, "bad result queue length"); in isp_fibre_init()
1695 icbp->icb_rqstaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_rquest_dma); in isp_fibre_init()
1696 icbp->icb_rqstaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_rquest_dma); in isp_fibre_init()
1697 icbp->icb_rqstaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_rquest_dma); in isp_fibre_init()
1698 icbp->icb_rqstaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_rquest_dma); in isp_fibre_init()
1699 icbp->icb_respaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_result_dma); in isp_fibre_init()
1700 icbp->icb_respaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_result_dma); in isp_fibre_init()
1701 icbp->icb_respaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_result_dma); in isp_fibre_init()
1702 icbp->icb_respaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_result_dma); in isp_fibre_init()
1704 if (FC_SCRATCH_ACQUIRE(isp, 0)) { in isp_fibre_init()
1705 isp_prt(isp, ISP_LOGERR, sacq); in isp_fibre_init()
1708 isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init: fwopt 0x%x xfwopt 0x%x zfwopt 0x%x", in isp_fibre_init()
1711 isp_put_icb(isp, icbp, (isp_icb_t *)fcp->isp_scratch); in isp_fibre_init()
1722 isp_prt(isp, ISP_LOGDEBUG0, "INIT F/W from %p (%08x%08x)", in isp_fibre_init()
1725 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (*icbp), 0); in isp_fibre_init()
1726 isp_mboxcmd(isp, &mbs); in isp_fibre_init()
1727 FC_SCRATCH_RELEASE(isp, 0); in isp_fibre_init()
1729 isp_print_bytes(isp, "isp_fibre_init", sizeof (*icbp), icbp); in isp_fibre_init()
1732 isp->isp_reqidx = 0; in isp_fibre_init()
1733 isp->isp_reqodx = 0; in isp_fibre_init()
1734 isp->isp_residx = 0; in isp_fibre_init()
1739 isp->isp_state = ISP_INITSTATE; in isp_fibre_init()
1743 isp_fibre_init_2400(ispsoftc_t *isp) in isp_fibre_init_2400() argument
1753 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_fibre_init_2400()
1754 fcp = FCPARAM(isp, chan); in isp_fibre_init_2400()
1759 if (chan == isp->isp_nchan) { in isp_fibre_init_2400()
1760 isp_prt(isp, ISP_LOGDEBUG0, "all %d channels with role 'none'", chan); in isp_fibre_init_2400()
1761 isp->isp_state = ISP_INITSTATE; in isp_fibre_init_2400()
1768 fcp = FCPARAM(isp, 0); in isp_fibre_init_2400()
1775 isp_mboxcmd(isp, &mbs); in isp_fibre_init_2400()
1795 icbp->icb_maxfrmlen = DEFAULT_FRAMESIZE(isp); in isp_fibre_init_2400()
1797 …isp_prt(isp, ISP_LOGERR, "bad frame length (%d) from NVRAM- using %d", DEFAULT_FRAMESIZE(isp), ICB… in isp_fibre_init_2400()
1801 icbp->icb_execthrottle = DEFAULT_EXEC_THROTTLE(isp); in isp_fibre_init_2400()
1803 …isp_prt(isp, ISP_LOGERR, "bad execution throttle of %d- using %d", DEFAULT_EXEC_THROTTLE(isp), ICB… in isp_fibre_init_2400()
1813 isp_mboxcmd(isp, &mbs); in isp_fibre_init_2400()
1832 switch (isp->isp_confopts & ISP_CFG_PORT_PREF) { in isp_fibre_init_2400()
1867 …isp_prt(isp, ISP_LOGWARN, "bad value %x in fwopt2 timer field", icbp->icb_fwoptions2 & ICB2400_OPT… in isp_fibre_init_2400()
1879 if (isp->isp_confopts & ISP_CFG_ONEGB) { in isp_fibre_init_2400()
1881 } else if (isp->isp_confopts & ISP_CFG_TWOGB) { in isp_fibre_init_2400()
1883 } else if (isp->isp_confopts & ISP_CFG_FOURGB) { in isp_fibre_init_2400()
1889 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) { in isp_fibre_init_2400()
1898 …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()
1903 …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()
1905 isp_prt(isp, ISP_LOGERR, "No valid WWNs to use"); in isp_fibre_init_2400()
1910 icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp); in isp_fibre_init_2400()
1912 isp_prt(isp, ISP_LOGERR, "bad request queue length %d", icbp->icb_rqstqlen); in isp_fibre_init_2400()
1915 icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp); in isp_fibre_init_2400()
1917 isp_prt(isp, ISP_LOGERR, "bad result queue length %d", in isp_fibre_init_2400()
1921 icbp->icb_rqstaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_rquest_dma); in isp_fibre_init_2400()
1922 icbp->icb_rqstaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_rquest_dma); in isp_fibre_init_2400()
1923 icbp->icb_rqstaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_rquest_dma); in isp_fibre_init_2400()
1924 icbp->icb_rqstaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_rquest_dma); in isp_fibre_init_2400()
1926 icbp->icb_respaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_result_dma); in isp_fibre_init_2400()
1927 icbp->icb_respaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_result_dma); in isp_fibre_init_2400()
1928 icbp->icb_respaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_result_dma); in isp_fibre_init_2400()
1929 icbp->icb_respaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_result_dma); in isp_fibre_init_2400()
1933 icbp->icb_atioqlen = RESULT_QUEUE_LEN(isp); in isp_fibre_init_2400()
1935 isp_prt(isp, ISP_LOGERR, "bad ATIO queue length %d", icbp->icb_atioqlen); in isp_fibre_init_2400()
1938 icbp->icb_atioqaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_atioq_dma); in isp_fibre_init_2400()
1939 icbp->icb_atioqaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_atioq_dma); in isp_fibre_init_2400()
1940 icbp->icb_atioqaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_atioq_dma); in isp_fibre_init_2400()
1941 icbp->icb_atioqaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_atioq_dma); in isp_fibre_init_2400()
1942 …isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: atioq %04x%04x%04x%04x", DMA_WD3(isp->isp_atioq_… in isp_fibre_init_2400()
1943 DMA_WD1(isp->isp_atioq_dma), DMA_WD0(isp->isp_atioq_dma)); in isp_fibre_init_2400()
1946 …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()
1948 …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()
1949 …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()
1950 DMA_WD1(isp->isp_result_dma), DMA_WD0(isp->isp_result_dma)); in isp_fibre_init_2400()
1952 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_fibre_init_2400()
1953 isp_print_bytes(isp, "isp_fibre_init_2400", sizeof (*icbp), icbp); in isp_fibre_init_2400()
1956 if (FC_SCRATCH_ACQUIRE(isp, 0)) { in isp_fibre_init_2400()
1957 isp_prt(isp, ISP_LOGERR, sacq); in isp_fibre_init_2400()
1961 isp_put_icb_2400(isp, icbp, fcp->isp_scratch); in isp_fibre_init_2400()
1966 if (isp->isp_nchan > 1) { in isp_fibre_init_2400()
1972 vpinfo.vp_count = isp->isp_nchan - 1; in isp_fibre_init_2400()
1977 isp_put_icb_2400_vpinfo(isp, &vpinfo, vdst); in isp_fibre_init_2400()
1979 for (chan = 1; chan < isp->isp_nchan; chan++) { in isp_fibre_init_2400()
1983 fcp2 = FCPARAM(isp, chan); in isp_fibre_init_2400()
1998 isp_put_vp_port_info(isp, &pi, pdst); in isp_fibre_init_2400()
2007 if (isp->isp_nchan > 1) { in isp_fibre_init_2400()
2016 …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()
2017 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (*icbp), 0); in isp_fibre_init_2400()
2018 isp_mboxcmd(isp, &mbs); in isp_fibre_init_2400()
2019 FC_SCRATCH_RELEASE(isp, 0); in isp_fibre_init_2400()
2024 isp->isp_reqidx = 0; in isp_fibre_init_2400()
2025 isp->isp_reqodx = 0; in isp_fibre_init_2400()
2026 isp->isp_residx = 0; in isp_fibre_init_2400()
2031 isp->isp_state = ISP_INITSTATE; in isp_fibre_init_2400()
2035 isp_mark_portdb(ispsoftc_t *isp, int chan, int disposition) in isp_mark_portdb() argument
2037 fcparam *fcp = FCPARAM(isp, chan); in isp_mark_portdb()
2040 if (chan < 0 || chan >= isp->isp_nchan) { in isp_mark_portdb()
2041 isp_prt(isp, ISP_LOGWARN, "isp_mark_portdb: bad channel %d", chan); in isp_mark_portdb()
2047 … isp_prt(isp, ISP_LOGTINFO, "isp_mark_portdb: Chan %d zeroing handle 0x" "%04x port 0x%06x", chan, in isp_mark_portdb()
2080 isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags, int gs) in isp_plogx() argument
2092 if (!IS_24XX(isp)) { in isp_plogx()
2095 return (isp_port_login(isp, handle, portid)); in isp_plogx()
2097 return (isp_port_logout(isp, handle, portid)); in isp_plogx()
2114 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_plogx()
2115 isp_print_bytes(isp, "IOCB LOGX", QENTRY_LEN, plp); in isp_plogx()
2119 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_plogx()
2120 isp_prt(isp, ISP_LOGERR, sacq); in isp_plogx()
2124 fcp = FCPARAM(isp, chan); in isp_plogx()
2126 isp_put_plogx(isp, plp, (isp_plogx_t *) scp); in isp_plogx()
2134 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, QENTRY_LEN, chan); in isp_plogx()
2135 isp_mboxcmd(isp, &mbs); in isp_plogx()
2140 MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan); in isp_plogx()
2142 isp_get_plogx(isp, (isp_plogx_t *) scp, plp); in isp_plogx()
2143 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_plogx()
2144 isp_print_bytes(isp, "IOCB LOGX response", QENTRY_LEN, plp); in isp_plogx()
2151 isp_prt(isp, ISP_LOGWARN, in isp_plogx()
2222 …isp_prt(isp, ISP_LOGERR, "Chan %d PLOGX PortID 0x%06x to N-Port handle 0x%x: %s", chan, portid, ha… in isp_plogx()
2226 FC_SCRATCH_RELEASE(isp, chan); in isp_plogx()
2232 isp_port_login(ispsoftc_t *isp, uint16_t handle, uint32_t portid) in isp_port_login() argument
2237 if (ISP_CAP_2KLOGIN(isp)) { in isp_port_login()
2247 isp_mboxcmd(isp, &mbs); in isp_port_login()
2251 isp_prt(isp, ISP_LOGDEBUG0, in isp_port_login()
2257 isp_prt(isp, ISP_LOGDEBUG0, in isp_port_login()
2266 isp_prt(isp, ISP_LOGINFO, in isp_port_login()
2272 isp_prt(isp, ISP_LOGINFO, in isp_port_login()
2277 isp_prt(isp, ISP_LOGINFO, in isp_port_login()
2285 isp_port_logout(ispsoftc_t *isp, uint16_t handle, uint32_t portid) in isp_port_logout() argument
2290 if (ISP_CAP_2KLOGIN(isp)) { in isp_port_logout()
2296 isp_mboxcmd(isp, &mbs); in isp_port_logout()
2301 isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb, int dolock) in isp_getpdb() argument
2303 fcparam *fcp = FCPARAM(isp, chan); in isp_getpdb()
2311 if (IS_24XX(isp)) { in isp_getpdb()
2315 } else if (ISP_CAP_2KLOGIN(isp)) { in isp_getpdb()
2325 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_getpdb()
2326 isp_prt(isp, ISP_LOGERR, sacq); in isp_getpdb()
2330 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (un), chan); in isp_getpdb()
2331 isp_mboxcmd(isp, &mbs); in isp_getpdb()
2334 FC_SCRATCH_RELEASE(isp, chan); in isp_getpdb()
2338 if (IS_24XX(isp)) { in isp_getpdb()
2339 isp_get_pdb_24xx(isp, fcp->isp_scratch, &un.bill); in isp_getpdb()
2345 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_getpdb()
2353 FC_SCRATCH_RELEASE(isp, chan); in isp_getpdb()
2358 isp_get_pdb_21xx(isp, fcp->isp_scratch, &un.fred); in isp_getpdb()
2366 FC_SCRATCH_RELEASE(isp, chan); in isp_getpdb()
2372 isp_dump_chip_portdb(ispsoftc_t *isp, int chan, int dolock) in isp_dump_chip_portdb() argument
2377 if (ISP_CAP_2KLOGIN(isp)) { in isp_dump_chip_portdb()
2383 if (isp_getpdb(isp, chan, loopid, &pdb, dolock)) { in isp_dump_chip_portdb()
2386 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x " in isp_dump_chip_portdb()
2395 isp_get_wwn(ispsoftc_t *isp, int chan, int loopid, int nodename) in isp_get_wwn() argument
2398 fcparam *fcp = FCPARAM(isp, chan); in isp_get_wwn()
2406 if (ISP_CAP_2KLOGIN(isp)) { in isp_get_wwn()
2412 if (ISP_CAP_MULTI_ID(isp)) { in isp_get_wwn()
2422 isp_mboxcmd(isp, &mbs); in isp_get_wwn()
2426 if (IS_24XX(isp)) { in isp_get_wwn()
2455 isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) in isp_fclink_test() argument
2465 fcp = FCPARAM(isp, chan); in isp_fclink_test()
2467 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Entry", chan); in isp_fclink_test()
2468 ISP_MARK_PORTDB(isp, chan, 1); in isp_fclink_test()
2481 isp_fw_state(isp, chan); in isp_fclink_test()
2483 …isp_prt(isp, ISP_LOGCONFIG|ISP_LOGSANCFG, "Chan %d Firmware State <%s->%s>", chan, isp_fc_fw_state… in isp_fclink_test()
2497 …isp_prt(isp, ISP_LOGDEBUG1, "usec%d: 0x%lx->0x%lx enano 0x%x%08x", count, (long) GET_NANOSEC(&hra)… in isp_fclink_test()
2512 ISP_SLEEP(isp, 4000000); in isp_fclink_test()
2517 ISP_SLEEP(isp, wrk); in isp_fclink_test()
2534 isp_prt(isp, ISP_LOGSANCFG, "%s: chan %d not at FW_READY state", __func__, chan); in isp_fclink_test()
2542 if (ISP_CAP_MULTI_ID(isp)) { in isp_fclink_test()
2547 isp_mboxcmd(isp, &mbs); in isp_fclink_test()
2552 if (ISP_CAP_2KLOGIN(isp)) { in isp_fclink_test()
2558 if (IS_2100(isp)) { in isp_fclink_test()
2569 if (IS_2100(isp)) { in isp_fclink_test()
2574 if (ISP_FW_NEWER_THAN(isp, 1, 15, 37)) { in isp_fclink_test()
2594 isp_prt(isp, ISP_LOGWARN, "Zero AL_PA for Loop Topology?"); in isp_fclink_test()
2603 …isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d deriving loopid %d from AL_PA map (AL_PA 0x%x)… in isp_fclink_test()
2610 if (IS_24XX(isp)) { /* XXX SHOULDN'T THIS BE FOR 2K F/W? XXX */ in isp_fclink_test()
2616 r = isp_getpdb(isp, chan, loopid, &pdb, 1); in isp_fclink_test()
2618 …isp_prt(isp, ISP_LOGWARN, "fabric topology but cannot get info about fabric controller (0x%x)", r); in isp_fclink_test()
2625 if (IS_2100(isp)) { in isp_fclink_test()
2648 if (IS_24XX(isp)) { in isp_fclink_test()
2650 if (ISP_FW_NEWER_THAN(isp, 4, 0, 27)) { in isp_fclink_test()
2653 isp_prt(isp, ISP_LOGCONFIG, "fabric supports NP-IV"); in isp_fclink_test()
2658 …r = isp_plogx(isp, chan, fcp->isp_sns_hdl, SNS_PORT_ID, PLOGX_FLG_CMD_PLOGI | PLOGX_FLG_COND_PLOGI… in isp_fclink_test()
2660 isp_prt(isp, ISP_LOGWARN, "%s: Chan %d cannot log into SNS", __func__, chan); in isp_fclink_test()
2666 r = isp_register_fc4_type_24xx(isp, chan); in isp_fclink_test()
2669 r = isp_register_fc4_type(isp, chan); in isp_fclink_test()
2672 isp_prt(isp, ISP_LOGWARN|ISP_LOGSANCFG, "%s: register fc4 type failed", __func__); in isp_fclink_test()
2681 if (IS_23XX(isp) || IS_24XX(isp)) { in isp_fclink_test()
2685 isp_mboxcmd(isp, &mbs); in isp_fclink_test()
2688 isp_prt(isp, ISP_LOGINFO, "Chan %d 8Gb link speed", chan); in isp_fclink_test()
2691 isp_prt(isp, ISP_LOGINFO, "Chan %d 4Gb link speed", chan); in isp_fclink_test()
2694 isp_prt(isp, ISP_LOGINFO, "Chan %d 2Gb link speed", chan); in isp_fclink_test()
2697 isp_prt(isp, ISP_LOGINFO, "Chan %d 1Gb link speed", chan); in isp_fclink_test()
2706 …isp_prt(isp, ISP_LOGSANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fcp->isp_wwpn >> 32), (uint3… in isp_fclink_test()
2707 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Complete", chan); in isp_fclink_test()
2732 isp_pdb_sync(ispsoftc_t *isp, int chan) in isp_pdb_sync() argument
2734 fcparam *fcp = FCPARAM(isp, chan); in isp_pdb_sync()
2748 isp_prt(isp, ISP_LOGWARN, "isp_pdb_sync: bad loopstate %d", in isp_pdb_sync()
2757 if (isp_scan_loop(isp, chan) != 0) { in isp_pdb_sync()
2758 isp_prt(isp, ISP_LOGWARN, in isp_pdb_sync()
2767 if (isp_scan_fabric(isp, chan) != 0) { in isp_pdb_sync()
2768 isp_prt(isp, ISP_LOGWARN, in isp_pdb_sync()
2775 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_pdb_sync()
2789 isp_prt(isp, in isp_pdb_sync()
2803 isp_async(isp, ISPASYNC_DEV_GONE, chan, lp); in isp_pdb_sync()
2805 (void) isp_plogx(isp, chan, lp->handle, in isp_pdb_sync()
2828 isp_async(isp, ISPASYNC_DEV_ARRIVED, chan, lp); in isp_pdb_sync()
2839 isp_async(isp, ISPASYNC_DEV_CHANGED, chan, lp); in isp_pdb_sync()
2853 isp_async(isp, ISPASYNC_DEV_STAYED, chan, lp); in isp_pdb_sync()
2864 isp_prt(isp, ISP_LOGWARN, in isp_pdb_sync()
2867 isp_dump_portdb(isp, chan); in isp_pdb_sync()
2885 isp_scan_loop(ispsoftc_t *isp, int chan) in isp_scan_loop() argument
2888 fcparam *fcp = FCPARAM(isp, chan); in isp_scan_loop()
2916 if (IS_24XX(isp) && isp->isp_nchan > 1) { in isp_scan_loop()
2917 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
2928 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
2936 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
2951 if (ISP_CAP_2KLOGIN(isp)) { in isp_scan_loop()
2960 if (IS_2100(isp) || IS_2200(isp)) { in isp_scan_loop()
2961 uint64_t node_wwn = isp_get_wwn(isp, chan, handle, 1); in isp_scan_loop()
2963 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
2975 r = isp_getpdb(isp, chan, handle, &pdb, 1); in isp_scan_loop()
2977 isp_prt(isp, ISP_LOGDEBUG1, in isp_scan_loop()
2981 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_loop()
2982 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
2990 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_loop()
2991 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
3002 if (IS_2100(isp) && pdb.handle != handle) { in isp_scan_loop()
3003 isp_prt(isp, ISP_LOGWARN, in isp_scan_loop()
3005 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_loop()
3006 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
3032 isp_get_wwn(isp, chan, handle, 1); in isp_scan_loop()
3034 isp_get_wwn(isp, chan, handle, 0); in isp_scan_loop()
3036 isp_prt(isp, ISP_LOGINFO, "DODGED!"); in isp_scan_loop()
3040 isp_prt(isp, ISP_LOGWARN, in isp_scan_loop()
3043 isp_dump_portdb(isp, chan); in isp_scan_loop()
3072 isp_prt(isp, ISP_LOGERR, in isp_scan_loop()
3075 isp_dump_portdb(isp, chan); in isp_scan_loop()
3076 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_loop()
3077 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
3098 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
3114 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
3143 isp_prt(isp, ISP_LOGERR, in isp_scan_loop()
3157 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
3162 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_loop()
3196 isp_gid_ft_sns(ispsoftc_t *isp, int chan) in isp_gid_ft_sns() argument
3202 fcparam *fcp = FCPARAM(isp, chan); in isp_gid_ft_sns()
3206 isp_prt(isp, ISP_LOGDEBUG0, in isp_gid_ft_sns()
3220 isp_put_gid_ft_request(isp, rq, fcp->isp_scratch); in isp_gid_ft_sns()
3221 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GID_FT_REQ_SIZE, chan); in isp_gid_ft_sns()
3230 isp_mboxcmd(isp, &mbs); in isp_gid_ft_sns()
3242 isp_gid_ft_ct_passthru(ispsoftc_t *isp, int chan) in isp_gid_ft_ct_passthru() argument
3245 fcparam *fcp = FCPARAM(isp, chan); in isp_gid_ft_ct_passthru()
3256 isp_prt(isp, ISP_LOGDEBUG0, in isp_gid_ft_ct_passthru()
3259 if (!IS_24XX(isp)) { in isp_gid_ft_ct_passthru()
3273 pt->ctp_vpidx = ISP_GET_VPIDX(isp, chan); in isp_gid_ft_ct_passthru()
3284 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_gid_ft_ct_passthru()
3285 isp_print_bytes(isp, "ct IOCB", QENTRY_LEN, pt); in isp_gid_ft_ct_passthru()
3287 isp_put_ct_pt(isp, pt, (isp_ct_pt_t *) &scp[CTXOFF]); in isp_gid_ft_ct_passthru()
3302 isp_put_ct_hdr(isp, ct, (ct_hdr_t *) &scp[XTXOFF]); in isp_gid_ft_ct_passthru()
3304 ISP_IOZPUT_32(isp, FC4_SCSI, rp); in isp_gid_ft_ct_passthru()
3305 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_gid_ft_ct_passthru()
3306 isp_print_bytes(isp, "CT HDR + payload after put", in isp_gid_ft_ct_passthru()
3316 MEMORYBARRIER(isp, SYNC_SFORDEV, XTXOFF, 2 * QENTRY_LEN, chan); in isp_gid_ft_ct_passthru()
3317 isp_mboxcmd(isp, &mbs); in isp_gid_ft_ct_passthru()
3321 MEMORYBARRIER(isp, SYNC_SFORCPU, ZTXOFF, QENTRY_LEN, chan); in isp_gid_ft_ct_passthru()
3323 isp_get_ct_pt(isp, (isp_ct_pt_t *) &scp[ZTXOFF], pt); in isp_gid_ft_ct_passthru()
3324 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_gid_ft_ct_passthru()
3325 isp_print_bytes(isp, "IOCB response", QENTRY_LEN, pt); in isp_gid_ft_ct_passthru()
3329 isp_prt(isp, ISP_LOGWARN, in isp_gid_ft_ct_passthru()
3334 MEMORYBARRIER(isp, SYNC_SFORCPU, IGPOFF, GIDLEN + 16, chan); in isp_gid_ft_ct_passthru()
3335 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_gid_ft_ct_passthru()
3336 isp_print_bytes(isp, "CT response", GIDLEN+16, &scp[IGPOFF]); in isp_gid_ft_ct_passthru()
3342 isp_scan_fabric(ispsoftc_t *isp, int chan) in isp_scan_fabric() argument
3344 fcparam *fcp = FCPARAM(isp, chan); in isp_scan_fabric()
3351 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_fabric()
3362 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_fabric()
3368 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_scan_fabric()
3369 isp_prt(isp, ISP_LOGERR, sacq); in isp_scan_fabric()
3370 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3374 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3375 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3382 if (IS_24XX(isp)) { /* XXX SHOULDN'T THIS BE TRUE FOR 2K F/W? XXX */ in isp_scan_fabric()
3387 r = isp_getpdb(isp, chan, loopid, &pdb, 0); in isp_scan_fabric()
3389 isp_dump_chip_portdb(isp, chan, 0); in isp_scan_fabric()
3393 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3394 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3398 if (IS_24XX(isp)) { in isp_scan_fabric()
3399 r = isp_gid_ft_ct_passthru(isp, chan); in isp_scan_fabric()
3401 r = isp_gid_ft_sns(isp, chan); in isp_scan_fabric()
3405 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3406 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3412 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3416 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3420 MEMORYBARRIER(isp, SYNC_SFORCPU, IGPOFF, GIDLEN, chan); in isp_scan_fabric()
3423 isp_get_gid_ft_response(isp, rs0, rs1, NGENT); in isp_scan_fabric()
3425 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3426 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3437 isp_prt(isp, level, "Chan %d Fabric Nameserver rejected GID_FT" in isp_scan_fabric()
3441 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3455 oldhandle = FCPARAM(isp, 0)->isp_lasthdl; in isp_scan_fabric()
3473 isp_prt(isp, ISP_LOGWARN, in isp_scan_fabric()
3477 isp_prt(isp, ISP_LOGSANCFG, in isp_scan_fabric()
3502 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_fabric()
3534 isp_prt(isp, ISP_LOGSANCFG, in isp_scan_fabric()
3548 if (ISP_CAP_MULTI_ID(isp)) { in isp_scan_fabric()
3550 isp_prt(isp, ISP_LOGSANCFG, in isp_scan_fabric()
3556 isp_prt(isp, ISP_LOGSANCFG, in isp_scan_fabric()
3562 isp_prt(isp, ISP_LOGSANCFG, in isp_scan_fabric()
3608 r = isp_getpdb(isp, chan, lp->handle, &pdb, 0); in isp_scan_fabric()
3610 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3611 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3617 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_fabric()
3636 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_fabric()
3653 if (isp_login_device(isp, chan, portid, &pdb, in isp_scan_fabric()
3659 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3660 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3667 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3668 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3671 FCPARAM(isp, 0)->isp_lasthdl = oldhandle; in isp_scan_fabric()
3676 isp_prt(isp, ISP_LOGWARN, "changed WWN" in isp_scan_fabric()
3705 isp_prt(isp, ISP_LOGSANCFG, in isp_scan_fabric()
3710 isp_prt(isp, ISP_LOGSANCFG, in isp_scan_fabric()
3752 isp_prt(isp, ISP_LOGWARN, "Chan %d PortID 0x%06x " in isp_scan_fabric()
3762 isp_prt(isp, ISP_LOGERR, in isp_scan_fabric()
3780 if (isp_login_device(isp, chan, portid, &pdb, &oldhandle)) { in isp_scan_fabric()
3782 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3783 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3789 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3790 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3793 FCPARAM(isp, 0)->isp_lasthdl = oldhandle; in isp_scan_fabric()
3826 isp_prt(isp, ISP_LOGSANCFG, in isp_scan_fabric()
3833 isp_prt(isp, ISP_LOGWARN, in isp_scan_fabric()
3856 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_fabric()
3861 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_fabric()
3868 FC_SCRATCH_RELEASE(isp, chan); in isp_scan_fabric()
3870 ISP_MARK_PORTDB(isp, chan, 1); in isp_scan_fabric()
3874 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_scan_fabric()
3883 isp_login_device(ispsoftc_t *isp, int chan, uint32_t portid, isp_pdb_t *p, uint16_t *ohp) in isp_login_device() argument
3888 if (ISP_CAP_2KLOGIN(isp)) { in isp_login_device()
3894 handle = isp_nxt_handle(isp, chan, *ohp); in isp_login_device()
3901 r = isp_getpdb(isp, chan, handle, p, 0); in isp_login_device()
3903 …(void) isp_plogx(isp, chan, handle, portid, PLOGX_FLG_CMD_LOGO | PLOGX_FLG_IMPLICIT | PLOGX_FLG_FR… in isp_login_device()
3907 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) { in isp_login_device()
3913 r = isp_plogx(isp, chan, handle, portid, PLOGX_FLG_CMD_PLOGI, 1); in isp_login_device()
3914 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) { in isp_login_device()
3926 …if (isp_plogx(isp, chan, r >> 16, portid, PLOGX_FLG_CMD_LOGO | PLOGX_FLG_IMPLICIT | PLOGX_FLG_FREE… in isp_login_device()
3927 isp_prt(isp, ISP_LOGERR, "baw... logout of %x failed", r >> 16); in isp_login_device()
3929 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) { in isp_login_device()
3932 r = isp_plogx(isp, chan, handle, portid, PLOGX_FLG_CMD_PLOGI, 1); in isp_login_device()
3933 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) { in isp_login_device()
3947 handle = isp_nxt_handle(isp, chan, handle); in isp_login_device()
3958 isp_prt(isp, ISP_LOGWARN, "Chan %d PLOGI 0x%06x failed", chan, portid); in isp_login_device()
3967 r = isp_getpdb(isp, chan, handle, p, 0); in isp_login_device()
3968 if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) { in isp_login_device()
3972 isp_prt(isp, ISP_LOGERR, "Chan %d new device 0x%06x@0x%x disappeared", chan, portid, handle); in isp_login_device()
3977 isp_prt(isp, ISP_LOGERR, "Chan %d new device 0x%06x@0x%x changed (0x%06x@0x%0x)", in isp_login_device()
3985 isp_register_fc4_type(ispsoftc_t *isp, int chan) in isp_register_fc4_type() argument
3987 fcparam *fcp = FCPARAM(isp, chan); in isp_register_fc4_type()
4003 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_fc4_type()
4004 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_fc4_type()
4007 isp_put_sns_request(isp, reqp, (sns_screq_t *) fcp->isp_scratch); in isp_register_fc4_type()
4014 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_RFT_ID_REQ_SIZE, chan); in isp_register_fc4_type()
4015 isp_mboxcmd(isp, &mbs); in isp_register_fc4_type()
4016 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type()
4025 isp_register_fc4_type_24xx(ispsoftc_t *isp, int chan) in isp_register_fc4_type_24xx() argument
4028 fcparam *fcp = FCPARAM(isp, chan); in isp_register_fc4_type_24xx()
4039 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_register_fc4_type_24xx()
4040 isp_prt(isp, ISP_LOGERR, sacq); in isp_register_fc4_type_24xx()
4054 pt->ctp_vpidx = ISP_GET_VPIDX(isp, chan); in isp_register_fc4_type_24xx()
4065 isp_put_ct_pt(isp, pt, (isp_ct_pt_t *) &scp[CTXOFF]); in isp_register_fc4_type_24xx()
4066 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_register_fc4_type_24xx()
4067 isp_print_bytes(isp, "IOCB CT Request", QENTRY_LEN, pt); in isp_register_fc4_type_24xx()
4087 isp_put_rft_id(isp, rp, (rft_id_t *) &scp[XTXOFF]); in isp_register_fc4_type_24xx()
4088 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_register_fc4_type_24xx()
4089 isp_print_bytes(isp, "CT Header", QENTRY_LEN, &scp[XTXOFF]); in isp_register_fc4_type_24xx()
4100 MEMORYBARRIER(isp, SYNC_SFORDEV, XTXOFF, 2 * QENTRY_LEN, chan); in isp_register_fc4_type_24xx()
4101 isp_mboxcmd(isp, &mbs); in isp_register_fc4_type_24xx()
4103 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type_24xx()
4106 MEMORYBARRIER(isp, SYNC_SFORCPU, ZTXOFF, QENTRY_LEN, chan); in isp_register_fc4_type_24xx()
4108 isp_get_ct_pt(isp, (isp_ct_pt_t *) &scp[ZTXOFF], pt); in isp_register_fc4_type_24xx()
4109 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_register_fc4_type_24xx()
4110 isp_print_bytes(isp, "IOCB response", QENTRY_LEN, pt); in isp_register_fc4_type_24xx()
4113 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type_24xx()
4114 isp_prt(isp, ISP_LOGWARN, in isp_register_fc4_type_24xx()
4120 isp_get_ct_hdr(isp, (ct_hdr_t *) &scp[IGPOFF], ct); in isp_register_fc4_type_24xx()
4121 FC_SCRATCH_RELEASE(isp, chan); in isp_register_fc4_type_24xx()
4124 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_register_fc4_type_24xx()
4128 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_register_fc4_type_24xx()
4132 isp_prt(isp, ISP_LOGWARN, in isp_register_fc4_type_24xx()
4140 isp_nxt_handle(ispsoftc_t *isp, int chan, uint16_t handle) in isp_nxt_handle() argument
4144 if (FCPARAM(isp, chan)->isp_topo == TOPO_F_PORT) { in isp_nxt_handle()
4157 if (ISP_CAP_2KLOGIN(isp)) { in isp_nxt_handle()
4167 if (handle == FCPARAM(isp, chan)->isp_loopid) { in isp_nxt_handle()
4168 return (isp_nxt_handle(isp, chan, handle)); in isp_nxt_handle()
4171 if (FCPARAM(isp, chan)->portdb[i].state == in isp_nxt_handle()
4175 if (FCPARAM(isp, chan)->portdb[i].handle == handle) { in isp_nxt_handle()
4176 return (isp_nxt_handle(isp, chan, handle)); in isp_nxt_handle()
4189 ispsoftc_t *isp; in isp_start() local
4198 isp = XS_ISP(xs); in isp_start()
4204 if (isp->isp_state != ISP_RUNSTATE) { in isp_start()
4205 isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE"); in isp_start()
4217 if (XS_CDBLEN(xs) > (IS_FC(isp)? 16 : 44) || XS_CDBLEN(xs) == 0) { in isp_start()
4218 …isp_prt(isp, ISP_LOGERR, "unsupported cdb length (%d, CDB[0]=0x%x)", XS_CDBLEN(xs), XS_CDBP(xs)[0]… in isp_start()
4228 if (IS_FC(isp)) { in isp_start()
4229 fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs)); in isp_start()
4249 isp_prt(isp, ISP_LOGDEBUG2, "XS_TGT(xs)=%d- hdlidx value %d", XS_TGT(xs), hdlidx); in isp_start()
4264 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_start()
4270 isp_spi_update(isp, XS_CHANNEL(xs)); in isp_start()
4276 qep = isp_getrqentry(isp); in isp_start()
4278 isp_prt(isp, ISP_LOGDEBUG0, "Request Queue Overflow"); in isp_start()
4291 if (ISP_TST_SENDMARKER(isp, XS_CHANNEL(xs))) { in isp_start()
4292 if (IS_24XX(isp)) { in isp_start()
4297 isp_put_marker_24xx(isp, m, qep); in isp_start()
4304 isp_put_marker(isp, m, qep); in isp_start()
4306 ISP_SYNC_REQUEST(isp); in isp_start()
4307 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 0); in isp_start()
4312 if (IS_24XX(isp)) { in isp_start()
4314 } else if (IS_FC(isp)) { in isp_start()
4324 if (IS_24XX(isp)) { in isp_start()
4343 } else if (IS_FC(isp)) { in isp_start()
4367 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_start()
4380 if (IS_SCSI(isp)) { in isp_start()
4386 } else if (IS_24XX(isp)) { in isp_start()
4390 lp = &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx]; in isp_start()
4394 t7->req_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(xs)); in isp_start()
4403 } else if (ISP_CAP_2KLOGIN(isp)) { in isp_start()
4409 } else if (ISP_CAP_SCCFW(isp)) { in isp_start()
4428 if (IS_24XX(isp) && *tptr > 0x1999) { in isp_start()
4432 if (isp_allocate_xs(isp, xs, &handle)) { in isp_start()
4433 isp_prt(isp, ISP_LOGDEBUG0, "out of xflist pointers"); in isp_start()
4446 dmaresult = ISP_DMASETUP(isp, xs, reqp); in isp_start()
4448 isp_destroy_handle(isp, handle); in isp_start()
4455 …isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "START cmd cdb[0]=0x%x datalen %ld", XS_CDBP(xs)[0], (long) XS_… in isp_start()
4456 isp->isp_nactive++; in isp_start()
4466 isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) in isp_control() argument
4479 if (IS_24XX(isp)) { in isp_control()
4480 isp_prt(isp, ISP_LOGWARN, "RESET BUS NOT IMPLEMENTED"); in isp_control()
4482 } else if (IS_FC(isp)) { in isp_control()
4489 mbs.param[1] = SDPARAM(isp, chan)->isp_bus_reset_delay; in isp_control()
4496 ISP_SET_SENDMARKER(isp, chan, 1); in isp_control()
4497 isp_mboxcmd(isp, &mbs); in isp_control()
4501 isp_prt(isp, ISP_LOGINFO, in isp_control()
4510 if (IS_24XX(isp)) { in isp_control()
4514 fcparam *fcp = FCPARAM(isp, chan); in isp_control()
4520 isp_prt(isp, ISP_LOGWARN, in isp_control()
4527 isp_prt(isp, ISP_LOGWARN, in isp_control()
4544 tmf->tmf_vpidx = ISP_GET_VPIDX(isp, chan); in isp_control()
4545 …isp_prt(isp, ISP_LOGALL, "Chan %d Reset N-Port Handle 0x%04x @ Port 0x%06x", chan, lp->handle, lp-… in isp_control()
4553 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_control()
4554 isp_prt(isp, ISP_LOGERR, sacq); in isp_control()
4557 isp_put_24xx_tmf(isp, tmf, fcp->isp_scratch); in isp_control()
4558 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, QENTRY_LEN, chan); in isp_control()
4560 isp_mboxcmd(isp, &mbs); in isp_control()
4562 FC_SCRATCH_RELEASE(isp, chan); in isp_control()
4565 MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, in isp_control()
4568 isp_get_24xx_response(isp, in isp_control()
4570 FC_SCRATCH_RELEASE(isp, chan); in isp_control()
4574 isp_prt(isp, ISP_LOGWARN, in isp_control()
4578 } else if (IS_FC(isp)) { in isp_control()
4579 if (ISP_CAP_2KLOGIN(isp)) { in isp_control()
4590 isp_mboxcmd(isp, &mbs); in isp_control()
4594 isp_prt(isp, ISP_LOGINFO, in isp_control()
4596 ISP_SET_SENDMARKER(isp, chan, 1); in isp_control()
4607 handle = isp_find_handle(isp, xs); in isp_control()
4609 isp_prt(isp, ISP_LOGWARN, in isp_control()
4613 if (IS_24XX(isp)) { in isp_control()
4619 fcp = FCPARAM(isp, chan); in isp_control()
4622 isp_prt(isp, ISP_LOGWARN, in isp_control()
4629 isp_prt(isp, ISP_LOGWARN, in isp_control()
4634 isp_prt(isp, ISP_LOGALL, in isp_control()
4644 ab->abrt_vpidx = ISP_GET_VPIDX(isp, chan); in isp_control()
4654 if (FC_SCRATCH_ACQUIRE(isp, chan)) { in isp_control()
4655 isp_prt(isp, ISP_LOGERR, sacq); in isp_control()
4658 isp_put_24xx_abrt(isp, ab, fcp->isp_scratch); in isp_control()
4662 MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan); in isp_control()
4663 isp_mboxcmd(isp, &mbs); in isp_control()
4665 FC_SCRATCH_RELEASE(isp, chan); in isp_control()
4668 MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, in isp_control()
4670 isp_get_24xx_abrt(isp, ab2, ab); in isp_control()
4671 FC_SCRATCH_RELEASE(isp, chan); in isp_control()
4675 isp_prt(isp, ISP_LOGWARN, in isp_control()
4679 } else if (IS_FC(isp)) { in isp_control()
4680 if (ISP_CAP_SCCFW(isp)) { in isp_control()
4681 if (ISP_CAP_2KLOGIN(isp)) { in isp_control()
4695 isp_mboxcmd(isp, &mbs); in isp_control()
4706 isp_spi_update(isp, chan); in isp_control()
4711 if (IS_FC(isp)) { in isp_control()
4720 return (isp_fclink_test(isp, chan, usdelay)); in isp_control()
4726 if (IS_FC(isp)) { in isp_control()
4730 return (isp_scan_fabric(isp, chan)); in isp_control()
4736 if (IS_FC(isp)) { in isp_control()
4740 return (isp_scan_loop(isp, chan)); in isp_control()
4746 if (IS_FC(isp)) { in isp_control()
4750 return (isp_pdb_sync(isp, chan)); in isp_control()
4756 if (IS_FC(isp) && !IS_24XX(isp)) { in isp_control()
4758 if (ISP_CAP_2KLOGIN(isp)) { in isp_control()
4761 isp_mboxcmd(isp, &mbs); in isp_control()
4769 if (IS_FC(isp)) { in isp_control()
4776 return (isp_getpdb(isp, chan, tgt, pdb, 1)); in isp_control()
4793 *wwnn = isp_get_wwn(isp, chan, tgt, 1); in isp_control()
4799 *wwnp = isp_get_wwn(isp, chan, tgt, 0); in isp_control()
4811 isp_mboxcmd(isp, mbr); in isp_control()
4824 return (isp_plogx(isp, p->channel, p->handle, p->portid, p->flags, 0)); in isp_control()
4827 p->handle = isp_nxt_handle(isp, p->channel, p->handle); in isp_control()
4828 r = isp_plogx(isp, p->channel, p->handle, p->portid, p->flags, 0); in isp_control()
4838 isp_prt(isp, ISP_LOGERR, "Unknown Control Opcode 0x%x", ctl); in isp_control()
4861 isp_intr(ispsoftc_t *isp, uint32_t isr, uint16_t sema, uint16_t mbox) in isp_intr() argument
4868 optr = isp->isp_residx; in isp_intr()
4876 isp->isp_intmboxc++; in isp_intr()
4877 if (isp->isp_mboxbsy) { in isp_intr()
4878 int obits = isp->isp_obits; in isp_intr()
4879 isp->isp_mboxtmp[0] = mbox; in isp_intr()
4880 for (i = 1; i < MAX_MAILBOX(isp); i++) { in isp_intr()
4884 isp->isp_mboxtmp[i] = ISP_READ(isp, MBOX_OFF(i)); in isp_intr()
4886 if (isp->isp_mbxwrk0) { in isp_intr()
4887 if (isp_mbox_continue(isp) == 0) { in isp_intr()
4891 MBOX_NOTIFY_COMPLETE(isp); in isp_intr()
4893 isp_prt(isp, ISP_LOGWARN, "mailbox cmd (0x%x) with no waiters", mbox); in isp_intr()
4896 i = IS_FC(isp)? isp_parse_async_fc(isp, mbox) : isp_parse_async(isp, mbox); in isp_intr()
4901 if ((IS_FC(isp) && mbox != ASYNC_RIOZIO_STALL) || isp->isp_state != ISP_RUNSTATE) { in isp_intr()
4909 if (isp->isp_state != ISP_RUNSTATE) { in isp_intr()
4913 if (isp->isp_mboxbsy && isp->isp_lastmbxcmd == MBOX_ABOUT_FIRMWARE) { in isp_intr()
4916 isp_prt(isp, ISP_LOGINFO, "interrupt (ISR=%x SEMA=%x) when not ready", isr, sema); in isp_intr()
4920 ISP_WRITE(isp, isp->isp_respoutrp, ISP_READ(isp, isp->isp_respinrp)); in isp_intr()
4921 if (IS_24XX(isp)) { in isp_intr()
4922 ISP_DISABLE_INTS(isp); in isp_intr()
4931 if (IS_24XX(isp)) { in isp_intr()
4932 iptr = ISP_READ(isp, BIU2400_ATIO_RSPINP); in isp_intr()
4933 optr = ISP_READ(isp, BIU2400_ATIO_RSPOUTP); in isp_intr()
4942 MEMORYBARRIER(isp, SYNC_ATIOQ, oop, QENTRY_LEN, -1); in isp_intr()
4943 addr = ISP_QUEUE_ENTRY(isp->isp_atioq, oop); in isp_intr()
4944 isp_get_hdr(isp, addr, (isphdr_t *)qe); in isp_intr()
4949 (void) isp_target_notify(isp, addr, &oop); in isp_intr()
4952 isp_print_qentry(isp, "?ATIOQ entry?", oop, addr); in isp_intr()
4955 optr = ISP_NXT_QENTRY(oop, RESULT_QUEUE_LEN(isp)); in isp_intr()
4956 ISP_WRITE(isp, BIU2400_ATIO_RSPOUTP, optr); in isp_intr()
4958 optr = isp->isp_residx; in isp_intr()
4967 if (IS_23XX(isp) || IS_24XX(isp)) { in isp_intr()
4968 optr = ISP_READ(isp, isp->isp_respoutrp); in isp_intr()
4972 if (isp->isp_residx != optr) { in isp_intr()
4973 isp_prt(isp, ISP_LOGINFO, "isp_intr: hard optr=%x, soft optr %x", optr, isp->isp_residx); in isp_intr()
4974 isp->isp_residx = optr; in isp_intr()
4977 optr = isp->isp_residx; in isp_intr()
4986 if (IS_2100(isp) || (IS_2300(isp) && isp->isp_revision < 2)) { in isp_intr()
4989 iptr = ISP_READ(isp, isp->isp_respinrp); in isp_intr()
4990 junk = ISP_READ(isp, isp->isp_respinrp); in isp_intr()
4994 isp_prt(isp, ISP_LOGWARN, "Response Queue Out Pointer Unstable (%x, %x)", iptr, junk); in isp_intr()
4998 iptr = ISP_READ(isp, isp->isp_respinrp); in isp_intr()
5000 isp->isp_resodx = iptr; in isp_intr()
5012 if (IS_24XX(isp)) { in isp_intr()
5014 } else if (IS_23XX(isp)) { in isp_intr()
5016 iptr = ISP_READ(isp, isp->isp_respinrp); in isp_intr()
5017 junk = ISP_READ(isp, BIU_R2HSTSLO); in isp_intr()
5019 junk = ISP_READ(isp, BIU_ISR); in isp_intr()
5022 if (IS_23XX(isp) || IS_24XX(isp)) { in isp_intr()
5025 sema = ISP_READ(isp, BIU_SEMA); in isp_intr()
5026 mbox = ISP_READ(isp, OUTMAILBOX0); in isp_intr()
5031 isp->isp_intbogus++; in isp_intr()
5032 isp_prt(isp, ISP_LOGDEBUG1, "bogus intr- isr %x (%x) iptr %x optr %x", isr, junk, iptr, optr); in isp_intr()
5035 isp->isp_resodx = iptr; in isp_intr()
5048 hp = (isphdr_t *) ISP_QUEUE_ENTRY(isp->isp_result, optr); in isp_intr()
5050 optr = ISP_NXT_QENTRY(optr, RESULT_QUEUE_LEN(isp)); in isp_intr()
5059 MEMORYBARRIER(isp, SYNC_RESULT, oop, QENTRY_LEN, -1); in isp_intr()
5060 isp_get_hdr(isp, hp, &sp->req_header); in isp_intr()
5063 if (IS_24XX(isp) && etype == RQSTYPE_RESPONSE) { in isp_intr()
5065 isp_get_24xx_response(isp, (isp24xx_statusreq_t *)hp, sp2); in isp_intr()
5066 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_intr()
5067 isp_print_bytes(isp, "Response Queue Entry", QENTRY_LEN, sp2); in isp_intr()
5074 isp_get_response(isp, (ispstatusreq_t *) hp, sp); in isp_intr()
5075 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_intr()
5076 isp_print_bytes(isp, "Response Queue Entry", QENTRY_LEN, sp); in isp_intr()
5085 isp_get_rio1(isp, (isp_rio1_t *) hp, rio); in isp_intr()
5086 if (isp->isp_dblev & ISP_LOGDEBUG1) { in isp_intr()
5087 isp_print_bytes(isp, "Response Queue Entry", QENTRY_LEN, rio); in isp_intr()
5090 isp_fastpost_complete(isp, rio->req_handles[i]); in isp_intr()
5092 if (isp->isp_fpcchiwater < rio->req_header.rqs_seqno) { in isp_intr()
5093 isp->isp_fpcchiwater = rio->req_header.rqs_seqno; in isp_intr()
5098 isp_prt(isp, ISP_LOGERR, "dropping RIO2 response\n"); in isp_intr()
5109 r = isp_handle_other_response(isp, etype, hp, &tsto); in isp_intr()
5119 RESULT_QUEUE_LEN(isp)); in isp_intr()
5122 ISP_WRITE(isp, isp->isp_respoutrp, optr); in isp_intr()
5139 isp_prt(isp, ISP_LOGERR, notresp, in isp_intr()
5141 isp_print_bytes(isp, in isp_intr()
5156 isp_print_bytes(isp, "unexpected continuation segment", QENTRY_LEN, sp); in isp_intr()
5157 ISP_WRITE(isp, isp->isp_respoutrp, optr); in isp_intr()
5161 isp_prt(isp, ISP_LOGDEBUG0, "internal queues full"); in isp_intr()
5167 isp_print_bytes(isp, "bad header flag", QENTRY_LEN, sp); in isp_intr()
5171 isp_print_bytes(isp, "bad request packet", QENTRY_LEN, sp); in isp_intr()
5175 isp_print_bytes(isp, "invalid entry count", QENTRY_LEN, sp); in isp_intr()
5179 isp_print_bytes(isp, "invalid IOCB ordering", QENTRY_LEN, sp); in isp_intr()
5180 ISP_WRITE(isp, isp->isp_respoutrp, optr); in isp_intr()
5185 if (!ISP_VALID_HANDLE(isp, sp->req_handle)) { in isp_intr()
5186 isp_prt(isp, ISP_LOGERR, "bad request handle 0x%x (iocb type 0x%x)", sp->req_handle, etype); in isp_intr()
5188 ISP_WRITE(isp, isp->isp_respoutrp, optr); in isp_intr()
5191 xs = isp_find_xs(isp, sp->req_handle); in isp_intr()
5199 isp_prt(isp, ISP_LOGERR, "cannot find handle 0x%x (type 0x%x)", sp->req_handle, etype); in isp_intr()
5201 isp_prt(isp, ISP_LOGERR, "cannot find handle 0x%x (status 0x%x)", sp->req_handle, ts); in isp_intr()
5204 ISP_WRITE(isp, isp->isp_respoutrp, optr); in isp_intr()
5209 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1); in isp_intr()
5219 if (IS_24XX(isp) && (scsi_status & (RQCS_RV|RQCS_SV)) != 0) { in isp_intr()
5222 } else if (IS_FC(isp) && (scsi_status & RQCS_RV) != 0) { in isp_intr()
5226 if (IS_FC(isp) && (scsi_status & RQCS_SV) != 0) { in isp_intr()
5233 if (IS_24XX(isp)) { in isp_intr()
5241 } else if (IS_SCSI(isp) && (req_state_flags & RQSF_GOT_SENSE)) { in isp_intr()
5268 …isp_xs_prt(isp, xs, ISP_LOGWARN, "FCP RESPONSE, LENGTH %u: %s CDB0=0x%02x", rlen, ptr, XS_CDBP(xs)… in isp_intr()
5273 if (IS_24XX(isp)) { in isp_intr()
5274 isp_parse_status_24xx(isp, (isp24xx_statusreq_t *)sp, xs, &resid); in isp_intr()
5276 isp_parse_status(isp, (void *)sp, xs, &resid); in isp_intr()
5281 if (IS_SCSI(isp)) { in isp_intr()
5290 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_intr()
5305 …lse if ((req_status_flags & RQSF_GOT_STATUS) && (scsi_status & 0xff) == SCSI_CHECK && IS_FC(isp)) { in isp_intr()
5306 isp_prt(isp, ISP_LOGWARN, "CHECK CONDITION w/o sense data for CDB=0x%x", XS_CDBP(xs)[0] & 0xff); in isp_intr()
5307 isp_print_bytes(isp, "CC with no Sense", QENTRY_LEN, qe); in isp_intr()
5309 …isp_prt(isp, ISP_LOGDEBUG2, "asked for %ld got raw resid %ld settled for %ld", (long) XS_XFRLEN(xs… in isp_intr()
5316 if (!IS_24XX(isp) && (sp->req_header.rqs_flags & RQSFLAG_FULL)) { in isp_intr()
5328 isp_print_bytes(isp, "Unhandled Response Type", QENTRY_LEN, qe); in isp_intr()
5340 ISP_DMAFREE(isp, xs, sp->req_handle); in isp_intr()
5342 isp_destroy_handle(isp, sp->req_handle); in isp_intr()
5344 if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) || in isp_intr()
5345 …((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)) || (*XS_STSP(xs) != SCSI_GOOD… in isp_intr()
5346 isp_prt_endcmd(isp, xs); in isp_intr()
5348 if (isp->isp_nactive > 0) { in isp_intr()
5349 isp->isp_nactive--; in isp_intr()
5364 ISP_WRITE(isp, isp->isp_respoutrp, optr); in isp_intr()
5368 isp->isp_reqodx = ISP_READ(isp, isp->isp_rqstoutrp); in isp_intr()
5369 if (isp->isp_rscchiwater < ndone) { in isp_intr()
5370 isp->isp_rscchiwater = ndone; in isp_intr()
5376 if (IS_24XX(isp)) { in isp_intr()
5377 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); in isp_intr()
5379 ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT); in isp_intr()
5380 ISP_WRITE(isp, BIU_SEMA, 0); in isp_intr()
5383 isp->isp_residx = optr; in isp_intr()
5387 isp->isp_rsltccmplt++; in isp_intr()
5398 isp_prt_endcmd(ispsoftc_t *isp, XS_T *xs) in isp_prt_endcmd() argument
5409 isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s KEY/ASC/ASCQ=0x%02x/0x%02x/0x%02x", in isp_prt_endcmd()
5412 …isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s STS 0x%x XS_ERR=0x%x", XS_XFRLEN(xs), (… in isp_prt_endcmd()
5422 isp_parse_async(ispsoftc_t *isp, uint16_t mbox) in isp_parse_async() argument
5433 if (IS_DUALBUS(isp)) { in isp_parse_async()
5434 chan = ISP_READ(isp, OUTMAILBOX6); in isp_parse_async()
5437 isp_prt(isp, ISP_LOGDEBUG2, "Async Mbox 0x%x", mbox); in isp_parse_async()
5441 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async()
5443 if (isp_target_async(isp, chan, mbox)) { in isp_parse_async()
5447 isp_async(isp, ISPASYNC_BUS_RESET, chan); in isp_parse_async()
5450 isp->isp_dead = 1; in isp_parse_async()
5451 isp->isp_state = ISP_CRASHED; in isp_parse_async()
5456 if (isp->isp_mboxbsy) { in isp_parse_async()
5457 isp->isp_obits = 1; in isp_parse_async()
5458 isp->isp_mboxtmp[0] = MBOX_HOST_INTERFACE_ERROR; in isp_parse_async()
5459 MBOX_NOTIFY_COMPLETE(isp); in isp_parse_async()
5465 isp_async(isp, ISPASYNC_FW_CRASH); in isp_parse_async()
5470 isp_prt(isp, ISP_LOGERR, "Request Queue Transfer Error"); in isp_parse_async()
5474 isp_prt(isp, ISP_LOGERR, "Response Queue Transfer Error"); in isp_parse_async()
5483 mbox = ISP_READ(isp, isp->isp_rqstoutrp); in isp_parse_async()
5487 isp_prt(isp, ISP_LOGWARN, "timeout initiated SCSI bus reset of chan %d", chan); in isp_parse_async()
5488 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async()
5490 if (isp_target_async(isp, chan, mbox)) { in isp_parse_async()
5497 isp_prt(isp, ISP_LOGINFO, "device reset on chan %d", chan); in isp_parse_async()
5498 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async()
5500 if (isp_target_async(isp, chan, mbox)) { in isp_parse_async()
5507 isp_prt(isp, ISP_LOGWARN, "extended message underrun"); in isp_parse_async()
5511 isp_prt(isp, ISP_LOGINFO, "SCAM interrupt"); in isp_parse_async()
5515 isp_prt(isp, ISP_LOGERR, "stalled SCSI Bus after DATA Overrun"); in isp_parse_async()
5520 isp_prt(isp, ISP_LOGERR, "SCSI Bus reset after DATA Overrun"); in isp_parse_async()
5524 mbox = ISP_READ(isp, OUTMAILBOX2); in isp_parse_async()
5527 isp_prt(isp, ISP_LOGINFO, "Transition to LVD mode"); in isp_parse_async()
5528 SDPARAM(isp, chan)->isp_diffmode = 0; in isp_parse_async()
5529 SDPARAM(isp, chan)->isp_ultramode = 0; in isp_parse_async()
5530 SDPARAM(isp, chan)->isp_lvdmode = 1; in isp_parse_async()
5533 isp_prt(isp, ISP_LOGINFO, in isp_parse_async()
5535 SDPARAM(isp, chan)->isp_diffmode = 1; in isp_parse_async()
5536 SDPARAM(isp, chan)->isp_ultramode = 0; in isp_parse_async()
5537 SDPARAM(isp, chan)->isp_lvdmode = 0; in isp_parse_async()
5540 isp_prt(isp, ISP_LOGINFO, in isp_parse_async()
5542 SDPARAM(isp, chan)->isp_diffmode = 0; in isp_parse_async()
5543 SDPARAM(isp, chan)->isp_ultramode = 1; in isp_parse_async()
5544 SDPARAM(isp, chan)->isp_lvdmode = 0; in isp_parse_async()
5547 isp_prt(isp, ISP_LOGWARN, in isp_parse_async()
5555 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async()
5560 if (!IS_ULTRA3(isp)) { in isp_parse_async()
5561 isp_prt(isp, ISP_LOGERR, "unexpected fast posting completion"); in isp_parse_async()
5565 h1 = (ISP_READ(isp, OUTMAILBOX2) << 16) | ISP_READ(isp, OUTMAILBOX1); in isp_parse_async()
5569 h1 = (ISP_READ(isp, OUTMAILBOX2) << 16) | ISP_READ(isp, OUTMAILBOX1); in isp_parse_async()
5570 h2 = (ISP_READ(isp, OUTMAILBOX7) << 16) | ISP_READ(isp, OUTMAILBOX6); in isp_parse_async()
5578 isp_prt(isp, ISP_LOGERR, "unexpected 16 bit RIO handle"); in isp_parse_async()
5581 isp_prt(isp, ISP_LOGWARN, "%s: unhandled async code 0x%x", __func__, mbox); in isp_parse_async()
5586 isp_prt(isp, ISP_LOGDEBUG3, "fast post/rio completion of 0x%08x", h1); in isp_parse_async()
5587 isp_fastpost_complete(isp, h1); in isp_parse_async()
5589 isp_prt(isp, ISP_LOGDEBUG3, "fast post/rio completion of 0x%08x", h2); in isp_parse_async()
5590 isp_fastpost_complete(isp, h2); in isp_parse_async()
5591 if (isp->isp_fpcchiwater < 2) { in isp_parse_async()
5592 isp->isp_fpcchiwater = 2; in isp_parse_async()
5595 if (isp->isp_fpcchiwater < 1) { in isp_parse_async()
5596 isp->isp_fpcchiwater = 1; in isp_parse_async()
5600 isp->isp_intoasync++; in isp_parse_async()
5605 #define GET_24XX_BUS(isp, chan, msg) \ argument
5606 if (IS_24XX(isp)) { \
5607 chan = ISP_READ(isp, OUTMAILBOX3) & 0xff; \
5608 if (chan >= isp->isp_nchan) { \
5609 isp_prt(isp, ISP_LOGERR, "bogus channel %u for %s at line %d", chan, msg, __LINE__); \
5616 isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox) in isp_parse_async_fc() argument
5621 if (IS_DUALBUS(isp)) { in isp_parse_async_fc()
5622 chan = ISP_READ(isp, OUTMAILBOX6); in isp_parse_async_fc()
5626 isp_prt(isp, ISP_LOGDEBUG2, "Async Mbox 0x%x", mbox); in isp_parse_async_fc()
5630 isp->isp_dead = 1; in isp_parse_async_fc()
5631 isp->isp_state = ISP_CRASHED; in isp_parse_async_fc()
5632 FCPARAM(isp, chan)->isp_loopstate = LOOP_NIL; in isp_parse_async_fc()
5633 FCPARAM(isp, chan)->isp_fwstate = FW_CONFIG_WAIT; in isp_parse_async_fc()
5638 if (isp->isp_mboxbsy) { in isp_parse_async_fc()
5639 isp->isp_obits = 1; in isp_parse_async_fc()
5640 isp->isp_mboxtmp[0] = MBOX_HOST_INTERFACE_ERROR; in isp_parse_async_fc()
5641 MBOX_NOTIFY_COMPLETE(isp); in isp_parse_async_fc()
5647 isp_async(isp, ISPASYNC_FW_CRASH); in isp_parse_async_fc()
5652 isp_prt(isp, ISP_LOGERR, "Request Queue Transfer Error"); in isp_parse_async_fc()
5656 isp_prt(isp, ISP_LOGERR, "Response Queue Transfer Error"); in isp_parse_async_fc()
5661 if (IS_24XX(isp)) { in isp_parse_async_fc()
5662 isp_prt(isp, ISP_LOGERR, "ATIO Queue Transfer Error"); in isp_parse_async_fc()
5666 isp_prt(isp, ISP_LOGERR, "%s: unexpected ASYNC_QWAKEUP code", __func__); in isp_parse_async_fc()
5670 isp_fastpost_complete(isp, (ISP_READ(isp, OUTMAILBOX2) << 16) | ISP_READ(isp, OUTMAILBOX1)); in isp_parse_async_fc()
5671 if (isp->isp_fpcchiwater < 1) { in isp_parse_async_fc()
5672 isp->isp_fpcchiwater = 1; in isp_parse_async_fc()
5681 …if (isp_target_async(isp, (ISP_READ(isp, OUTMAILBOX2) << 16) | ISP_READ(isp, OUTMAILBOX1), mbox)) { in isp_parse_async_fc()
5684 isp->isp_fphccmplt++; in isp_parse_async_fc()
5687 isp_prt(isp, ISP_LOGWARN, "unexpected ASYNC CTIO done"); in isp_parse_async_fc()
5698 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5699 fcparam *fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5708 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5709 ISP_MARK_PORTDB(isp, chan, 1); in isp_parse_async_fc()
5710 isp_async(isp, ISPASYNC_LIP, chan); in isp_parse_async_fc()
5712 if (isp_target_async(isp, chan, mbox)) { in isp_parse_async_fc()
5725 for (i = j = 0; i < isp->isp_maxcmds; i++) { in isp_parse_async_fc()
5729 hdp = &isp->isp_xflist[i]; in isp_parse_async_fc()
5741 isp_prt(isp, ISP_LOGERR, lipd, chan, j); in isp_parse_async_fc()
5752 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5753 fcparam *fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5759 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5763 ISP_MARK_PORTDB(isp, chan, 1); in isp_parse_async_fc()
5764 isp_async(isp, ISPASYNC_LOOP_UP, chan); in isp_parse_async_fc()
5766 if (isp_target_async(isp, chan, mbox)) { in isp_parse_async_fc()
5778 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5779 fcparam *fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5785 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5788 ISP_MARK_PORTDB(isp, chan, 1); in isp_parse_async_fc()
5789 isp_async(isp, ISPASYNC_LOOP_DOWN, chan); in isp_parse_async_fc()
5791 if (isp_target_async(isp, chan, mbox)) { in isp_parse_async_fc()
5803 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5804 fcparam *fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5810 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5813 ISP_MARK_PORTDB(isp, chan, 1); in isp_parse_async_fc()
5814 isp_async(isp, ISPASYNC_LOOP_RESET, chan); in isp_parse_async_fc()
5816 if (isp_target_async(isp, chan, mbox)) { in isp_parse_async_fc()
5831 if (IS_24XX(isp)) { in isp_parse_async_fc()
5832 nphdl = ISP_READ(isp, OUTMAILBOX1); in isp_parse_async_fc()
5833 nlstate = ISP_READ(isp, OUTMAILBOX2); in isp_parse_async_fc()
5834 reason = ISP_READ(isp, OUTMAILBOX3) >> 8; in isp_parse_async_fc()
5839 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_async_fc()
5840 fcparam *fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5845 ISP_SET_SENDMARKER(isp, chan, 1); in isp_parse_async_fc()
5847 ISP_MARK_PORTDB(isp, chan, 1); in isp_parse_async_fc()
5848 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, chan, ISPASYNC_CHANGE_PDB, nphdl, nlstate, reason); in isp_parse_async_fc()
5856 if (ISP_FW_NEWER_THAN(isp, 4, 0, 25) && ISP_CAP_MULTI_ID(isp)) { in isp_parse_async_fc()
5857 GET_24XX_BUS(isp, chan, "ASYNC_CHANGE_NOTIFY"); in isp_parse_async_fc()
5862 hichan = isp->isp_nchan; in isp_parse_async_fc()
5865 fcparam *fcp = FCPARAM(isp, chan); in isp_parse_async_fc()
5876 ISP_MARK_PORTDB(isp, chan, 1); in isp_parse_async_fc()
5877 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, chan, ISPASYNC_CHANGE_SNS); in isp_parse_async_fc()
5886 if (!IS_2200(isp) && !IS_2100(isp)) { in isp_parse_async_fc()
5887 isp_prt(isp, ISP_LOGWARN, "bad card for ASYNC_CONNMODE event"); in isp_parse_async_fc()
5891 mbox = ISP_READ(isp, OUTMAILBOX1); in isp_parse_async_fc()
5892 ISP_MARK_PORTDB(isp, chan, 1); in isp_parse_async_fc()
5895 isp_prt(isp, ISP_LOGINFO, in isp_parse_async_fc()
5899 isp_prt(isp, ISP_LOGINFO, in isp_parse_async_fc()
5903 isp_prt(isp, ISP_LOGWARN, in isp_parse_async_fc()
5907 isp->isp_dead = 1; in isp_parse_async_fc()
5908 isp->isp_state = ISP_CRASHED; in isp_parse_async_fc()
5909 isp_prt(isp, ISP_LOGERR, "FATAL CONNECTION ERROR"); in isp_parse_async_fc()
5910 isp_async(isp, ISPASYNC_FW_CRASH); in isp_parse_async_fc()
5913 isp_prt(isp, ISP_LOGWARN, in isp_parse_async_fc()
5917 isp_prt(isp, ISP_LOGWARN, in isp_parse_async_fc()
5921 isp_async(isp, ISPASYNC_CHANGE_NOTIFY, chan, ISPASYNC_CHANGE_OTHER); in isp_parse_async_fc()
5922 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_async_fc()
5923 FCPARAM(isp, chan)->isp_fwstate = FW_CONFIG_WAIT; in isp_parse_async_fc()
5924 FCPARAM(isp, chan)->isp_loopstate = LOOP_LIP_RCVD; in isp_parse_async_fc()
5928 if (IS_24XX(isp)) { in isp_parse_async_fc()
5929 isp_prt(isp, ISP_LOGWARN, "Receive Error"); in isp_parse_async_fc()
5931 isp_prt(isp, ISP_LOGWARN, "unexpected ASYNC_RCV_ERR"); in isp_parse_async_fc()
5935 if (IS_24XX(isp)) { in isp_parse_async_fc()
5936 isp_prt(isp, ISP_LOGTDEBUG0, "LS_RJT sent"); in isp_parse_async_fc()
5938 } else if (IS_2200(isp)) { in isp_parse_async_fc()
5939 isp_prt(isp, ISP_LOGTDEBUG0, "QFULL sent"); in isp_parse_async_fc()
5944 isp_prt(isp, ISP_LOGWARN, "Unknown Async Code 0x%x", mbox); in isp_parse_async_fc()
5948 isp->isp_intoasync++; in isp_parse_async_fc()
5960 isp_handle_other_response(ispsoftc_t *isp, int type, isphdr_t *hp, uint32_t *optrp) in isp_handle_other_response() argument
5964 isp_prt(isp, ISP_LOGDEBUG0, "Ignored Continuation Response"); in isp_handle_other_response()
5967 isp_prt(isp, ISP_LOGDEBUG0, "Marker Response"); in isp_handle_other_response()
5982 isp->isp_rsltccmplt++; /* count as a response completion */ in isp_handle_other_response()
5984 if (isp_target_notify(isp, (ispstatusreq_t *) hp, optrp)) { in isp_handle_other_response()
5990 if (IS_24XX(isp)) { in isp_handle_other_response()
5992 isp_get_ridacq(isp, (isp_ridacq_t *)hp, &rid); in isp_handle_other_response()
6001 if (type != isp_get_response_type(isp, hp)) { in isp_handle_other_response()
6010 isp_prt(isp, ISP_LOGINFO, in isp_handle_other_response()
6014 isp_prt(isp, ISP_LOGWARN, "Unhandled Response Type 0x%x", in isp_handle_other_response()
6015 isp_get_response_type(isp, hp)); in isp_handle_other_response()
6021 isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp) in isp_parse_status() argument
6032 isp_xs_prt(isp, xs, ISP_LOGDEBUG1, "Selection Timeout"); in isp_parse_status()
6039 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Incomplete, state 0x%x", sp->req_state_flags); in isp_parse_status()
6043 isp_xs_prt(isp, xs, ISP_LOGERR, "DMA Error"); in isp_parse_status()
6097 isp_xs_prt(isp, xs, ISP_LOGERR, "Transport Error: %s", buf); in isp_parse_status()
6104 isp_xs_prt(isp, xs, ISP_LOGWARN, "Bus Reset destroyed command"); in isp_parse_status()
6105 for (chan = 0; chan < isp->isp_nchan; chan++) { in isp_parse_status()
6106 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_status()
6115 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Aborted"); in isp_parse_status()
6116 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1); in isp_parse_status()
6123 isp_xs_prt(isp, xs, ISP_LOGWARN, "Command timed out"); in isp_parse_status()
6134 isp_xs_prt(isp, xs, ISP_LOGERR, "data overrun (%ld)", (long) XS_GET_RESID(xs)); in isp_parse_status()
6141 isp_xs_prt(isp, xs, ISP_LOGERR, "command overrun"); in isp_parse_status()
6145 isp_xs_prt(isp, xs, ISP_LOGERR, "status overrun"); in isp_parse_status()
6149 isp_xs_prt(isp, xs, ISP_LOGERR, "msg not COMMAND COMPLETE after status"); in isp_parse_status()
6153 isp_xs_prt(isp, xs, ISP_LOGERR, "No MESSAGE OUT phase after selection"); in isp_parse_status()
6157 isp_xs_prt(isp, xs, ISP_LOGERR, "EXTENDED IDENTIFY failed"); in isp_parse_status()
6161 isp_xs_prt(isp, xs, ISP_LOGERR, "INITIATOR DETECTED ERROR rejected"); in isp_parse_status()
6165 isp_xs_prt(isp, xs, ISP_LOGERR, "ABORT OPERATION rejected"); in isp_parse_status()
6169 isp_xs_prt(isp, xs, ISP_LOGERR, "MESSAGE REJECT rejected"); in isp_parse_status()
6173 isp_xs_prt(isp, xs, ISP_LOGERR, "NOP rejected"); in isp_parse_status()
6177 isp_xs_prt(isp, xs, ISP_LOGERR, "MESSAGE PARITY ERROR rejected"); in isp_parse_status()
6181 isp_xs_prt(isp, xs, ISP_LOGWARN, "BUS DEVICE RESET rejected"); in isp_parse_status()
6185 isp_xs_prt(isp, xs, ISP_LOGERR, "IDENTIFY rejected"); in isp_parse_status()
6189 isp_xs_prt(isp, xs, ISP_LOGERR, "Unexpected Bus Free"); in isp_parse_status()
6194 if (IS_FC(isp)) { in isp_parse_status()
6197 …isp_xs_prt(isp, xs, ISP_LOGWARN, bun, XS_XFRLEN(xs), sp->req_resid, (ru_marked)? "marked" : "not m… in isp_parse_status()
6212 isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued transaction with disconnect not set"); in isp_parse_status()
6216 …isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued transaction to target routine %d", XS_LUN(xs… in isp_parse_status()
6220 isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued cmd when queueing disabled"); in isp_parse_status()
6224 isp_prt(isp, ISP_LOGERR, "Invalid IOCB entry type detected"); in isp_parse_status()
6228 isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "internal queues full status 0x%x", *XS_STSP(xs)); in isp_parse_status()
6252 isp_xs_prt(isp, xs, ISP_LOGERR, "SCSI phase skipped"); in isp_parse_status()
6256 isp_xs_prt(isp, xs, ISP_LOGERR, "Auto Request Sense Failed"); in isp_parse_status()
6263 isp_xs_prt(isp, xs, ISP_LOGERR, "Wide Negotiation Failed"); in isp_parse_status()
6264 if (IS_SCSI(isp)) { in isp_parse_status()
6265 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_parse_status()
6276 isp_xs_prt(isp, xs, ISP_LOGERR, "SDTR Message Failed"); in isp_parse_status()
6277 if (IS_SCSI(isp)) { in isp_parse_status()
6278 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); in isp_parse_status()
6287 isp_xs_prt(isp, xs, ISP_LOGERR, "Bad LVD condition"); in isp_parse_status()
6308 isp_prt(isp, ISP_LOGINFO, "port %s for target %d", in isp_parse_status()
6316 if (FCPARAM(isp, 0)->isp_topo == TOPO_NL_PORT || in isp_parse_status()
6317 FCPARAM(isp, 0)->isp_topo == TOPO_FL_PORT) { in isp_parse_status()
6320 if (ISP_CAP_2KLOGIN(isp)) { in isp_parse_status()
6323 isp_mboxcmd_qnw(isp, &mbs, 1); in isp_parse_status()
6331 isp_prt(isp, ISP_LOGWARN, in isp_parse_status()
6339 isp_prt(isp, ISP_LOGWARN, in isp_parse_status()
6347 isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x", in isp_parse_status()
6357 isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *rp) in isp_parse_status_24xx() argument
6370 isp_xs_prt(isp, xs, ISP_LOGERR, "DMA error"); in isp_parse_status_24xx()
6374 isp_xs_prt(isp, xs, ISP_LOGERR, "Transport Error"); in isp_parse_status_24xx()
6378 isp_xs_prt(isp, xs, ISP_LOGWARN, "reset destroyed command"); in isp_parse_status_24xx()
6379 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_status_24xx()
6386 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Aborted"); in isp_parse_status_24xx()
6387 FCPARAM(isp, chan)->sendmarker = 1; in isp_parse_status_24xx()
6394 isp_xs_prt(isp, xs, ISP_LOGWARN, "Command Timed Out"); in isp_parse_status_24xx()
6402 isp_xs_prt(isp, xs, ISP_LOGERR, "Data Overrun"); in isp_parse_status_24xx()
6409 isp_prt(isp, ISP_LOGERR, in isp_parse_status_24xx()
6419 isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", in isp_parse_status_24xx()
6435 …isp_xs_prt(isp, xs, ISP_LOGWARN, bun, XS_XFRLEN(xs), sp->req_resid, (ru_marked)? "marked" : "not m… in isp_parse_status_24xx()
6442 …isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "Data Underrun (%d) for command 0x%x", sp->req_resid, XS_CDBP(x… in isp_parse_status_24xx()
6466 isp_prt(isp, ISP_LOGINFO, "Chan %d port %s for target %d", in isp_parse_status_24xx()
6478 isp_prt(isp, ISP_LOGWARN, in isp_parse_status_24xx()
6487 isp_prt(isp, ISP_LOGWARN, in isp_parse_status_24xx()
6497 isp_prt(isp, ISP_LOGWARN, in isp_parse_status_24xx()
6507 isp_prt(isp, ISP_LOGERR, 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()
6543 if (isp->isp_nactive) { in isp_fastpost_complete()
6544 isp->isp_nactive--; in isp_fastpost_complete()
6546 isp->isp_fphccmplt++; in isp_fastpost_complete()
6551 isp_mbox_continue(ispsoftc_t *isp) in isp_mbox_continue() argument
6557 switch (isp->isp_lastmbxcmd) { in isp_mbox_continue()
6566 if (isp->isp_mboxtmp[0] != MBOX_COMMAND_COMPLETE) { in isp_mbox_continue()
6567 isp->isp_mbxwrk0 = 0; in isp_mbox_continue()
6574 if (IS_24XX(isp)) { in isp_mbox_continue()
6575 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); in isp_mbox_continue()
6577 ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT); in isp_mbox_continue()
6578 ISP_WRITE(isp, BIU_SEMA, 0); in isp_mbox_continue()
6585 ptr = isp->isp_mbxworkp; in isp_mbox_continue()
6586 switch (isp->isp_lastmbxcmd) { in isp_mbox_continue()
6588 mbs.param[1] = isp->isp_mbxwrk1++; in isp_mbox_continue()
6592 *ptr++ = isp->isp_mboxtmp[2]; in isp_mbox_continue()
6593 mbs.param[1] = isp->isp_mbxwrk1++; in isp_mbox_continue()
6596 offset = isp->isp_mbxwrk1; in isp_mbox_continue()
6597 offset |= isp->isp_mbxwrk8 << 16; in isp_mbox_continue()
6602 isp->isp_mbxwrk1 = ++offset; in isp_mbox_continue()
6603 isp->isp_mbxwrk8 = offset >> 16; in isp_mbox_continue()
6606 offset = isp->isp_mbxwrk1; in isp_mbox_continue()
6607 offset |= isp->isp_mbxwrk8 << 16; in isp_mbox_continue()
6609 *ptr++ = isp->isp_mboxtmp[2]; in isp_mbox_continue()
6612 isp->isp_mbxwrk1 = ++offset; in isp_mbox_continue()
6613 isp->isp_mbxwrk8 = offset >> 16; in isp_mbox_continue()
6616 isp->isp_mbxworkp = ptr; in isp_mbox_continue()
6617 isp->isp_mbxwrk0--; in isp_mbox_continue()
6618 mbs.param[0] = isp->isp_lastmbxcmd; in isp_mbox_continue()
6620 isp_mboxcmd_qnw(isp, &mbs, 0); in isp_mbox_continue()
7090 isp_mboxcmd_qnw(ispsoftc_t *isp, mbreg_t *mbp, int nodelay) in isp_mboxcmd_qnw() argument
7095 if (IS_FC(isp)) { in isp_mboxcmd_qnw()
7101 ibits = HIWRD(mcp[opcode]) & NMBOX_BMASK(isp); in isp_mboxcmd_qnw()
7102 obits = LOWRD(mcp[opcode]) & NMBOX_BMASK(isp); in isp_mboxcmd_qnw()
7105 for (box = 0; box < MAX_MAILBOX(isp); box++) { in isp_mboxcmd_qnw()
7107 ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]); in isp_mboxcmd_qnw()
7110 isp->isp_mboxtmp[box] = mbp->param[box] = 0; in isp_mboxcmd_qnw()
7114 isp->isp_lastmbxcmd = opcode; in isp_mboxcmd_qnw()
7115 isp->isp_obits = obits; in isp_mboxcmd_qnw()
7116 isp->isp_mboxbsy = 1; in isp_mboxcmd_qnw()
7118 if (IS_24XX(isp)) { in isp_mboxcmd_qnw()
7119 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_SET_HOST_INT); in isp_mboxcmd_qnw()
7121 ISP_WRITE(isp, HCCR, HCCR_CMD_SET_HOST_INT); in isp_mboxcmd_qnw()
7134 isp_mboxcmd(ispsoftc_t *isp, mbreg_t *mbp) in isp_mboxcmd() argument
7141 if (IS_FC(isp)) { in isp_mboxcmd()
7151 isp_prt(isp, ISP_LOGERR, "Unknown Command 0x%x", opcode); in isp_mboxcmd()
7155 ibits = HIWRD(mcp[opcode]) & NMBOX_BMASK(isp); in isp_mboxcmd()
7156 obits = LOWRD(mcp[opcode]) & NMBOX_BMASK(isp); in isp_mboxcmd()
7166 isp_prt(isp, ISP_LOGERR, "no parameters for 0x%x", opcode); in isp_mboxcmd()
7173 if (MBOX_ACQUIRE(isp)) { in isp_mboxcmd()
7178 for (box = 0; box < MAX_MAILBOX(isp); box++) { in isp_mboxcmd()
7180 isp_prt(isp, ISP_LOGDEBUG3, "IN mbox %d = 0x%04x", box, in isp_mboxcmd()
7182 ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]); in isp_mboxcmd()
7184 isp->isp_mboxtmp[box] = mbp->param[box] = 0; in isp_mboxcmd()
7187 isp->isp_lastmbxcmd = opcode; in isp_mboxcmd()
7192 isp->isp_obits = obits; in isp_mboxcmd()
7193 isp->isp_mboxbsy = 1; in isp_mboxcmd()
7198 if (IS_24XX(isp)) { in isp_mboxcmd()
7199 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_SET_HOST_INT); in isp_mboxcmd()
7201 ISP_WRITE(isp, HCCR, HCCR_CMD_SET_HOST_INT); in isp_mboxcmd()
7207 MBOX_WAIT_COMPLETE(isp, mbp); in isp_mboxcmd()
7213 isp->isp_mboxbsy = 0; in isp_mboxcmd()
7214 MBOX_RELEASE(isp); in isp_mboxcmd()
7221 for (box = 0; box < MAX_MAILBOX(isp); box++) { in isp_mboxcmd()
7223 mbp->param[box] = isp->isp_mboxtmp[box]; in isp_mboxcmd()
7224 isp_prt(isp, ISP_LOGDEBUG3, "OUT mbox %d = 0x%04x", box, in isp_mboxcmd()
7229 isp->isp_mboxbsy = 0; in isp_mboxcmd()
7230 MBOX_RELEASE(isp); in isp_mboxcmd()
7235 cname = (IS_FC(isp))? fc_mbcmd_names[opcode] : scsi_mbcmd_names[opcode]; in isp_mboxcmd()
7300 isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s)", in isp_mboxcmd()
7306 isp_fw_state(ispsoftc_t *isp, int chan) in isp_fw_state() argument
7308 if (IS_FC(isp)) { in isp_fw_state()
7310 fcparam *fcp = FCPARAM(isp, chan); in isp_fw_state()
7313 isp_mboxcmd(isp, &mbs); in isp_fw_state()
7321 isp_spi_update(ispsoftc_t *isp, int chan) in isp_spi_update() argument
7327 if (IS_FC(isp)) { in isp_spi_update()
7333 sdp = SDPARAM(isp, chan); in isp_spi_update()
7343 isp_prt(isp, ISP_LOGDEBUG0, "skipping target %d bus %d update", tgt, chan); in isp_spi_update()
7399 isp_prt(isp, ISP_LOGDEBUG0, "bus %d set tgt %d flags 0x%x off 0x%x period 0x%x", in isp_spi_update()
7406 isp_mboxcmd(isp, &mbs); in isp_spi_update()
7422 isp_async(isp, ISPASYNC_NEW_TGT_PARAMS, chan, tgt); in isp_spi_update()
7436 isp_setdfltsdparm(ispsoftc_t *isp) in isp_setdfltsdparm() argument
7441 sdp = SDPARAM(isp, 0); in isp_setdfltsdparm()
7442 sdp->role = GET_DEFAULT_ROLE(isp, 0); in isp_setdfltsdparm()
7443 if (IS_DUALBUS(isp)) { in isp_setdfltsdparm()
7445 sdp1->role = GET_DEFAULT_ROLE(isp, 1); in isp_setdfltsdparm()
7456 sdp->isp_initiator_id = DEFAULT_IID(isp, 0); in isp_setdfltsdparm()
7457 if (isp->isp_type >= ISP_HA_SCSI_1040) { in isp_setdfltsdparm()
7463 sdp->isp_max_queue_depth = MAXISPREQUEST(isp); in isp_setdfltsdparm()
7497 if (IS_ULTRA3(isp)) { in isp_setdfltsdparm()
7500 } else if (IS_ULTRA2(isp)) { in isp_setdfltsdparm()
7503 } else if (IS_1240(isp)) { in isp_setdfltsdparm()
7506 } else if ((isp->isp_bustype == ISP_BT_SBUS && in isp_setdfltsdparm()
7507 isp->isp_type < ISP_HA_SCSI_1020A) || in isp_setdfltsdparm()
7508 (isp->isp_bustype == ISP_BT_PCI && in isp_setdfltsdparm()
7509 isp->isp_type < ISP_HA_SCSI_1040) || in isp_setdfltsdparm()
7510 (isp->isp_clock && isp->isp_clock < 60) || in isp_setdfltsdparm()
7530 sdp1->isp_initiator_id = DEFAULT_IID(isp, 1); in isp_setdfltsdparm()
7539 if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) { in isp_setdfltsdparm()
7542 if (isp_read_nvram(isp, 0) == 0) { in isp_setdfltsdparm()
7543 if (IS_DUALBUS(isp)) { in isp_setdfltsdparm()
7544 if (isp_read_nvram(isp, 1) == 0) { in isp_setdfltsdparm()
7550 isp_mboxcmd(isp, &mbs); in isp_setdfltsdparm()
7575 isp_setdfltfcparm(ispsoftc_t *isp, int chan) in isp_setdfltfcparm() argument
7577 fcparam *fcp = FCPARAM(isp, chan); in isp_setdfltfcparm()
7582 fcp->role = GET_DEFAULT_ROLE(isp, chan); in isp_setdfltfcparm()
7586 fcp->isp_loopid = DEFAULT_LOOPID(isp, chan); in isp_setdfltfcparm()
7587 fcp->isp_wwnn_nvram = DEFAULT_NODEWWN(isp, chan); in isp_setdfltfcparm()
7588 fcp->isp_wwpn_nvram = DEFAULT_PORTWWN(isp, chan); in isp_setdfltfcparm()
7592 if (IS_24XX(isp)) { in isp_setdfltfcparm()
7595 if (isp->isp_confopts & ISP_CFG_FULL_DUPLEX) { in isp_setdfltfcparm()
7603 if (isp->isp_confopts & ISP_CFG_FULL_DUPLEX) { in isp_setdfltfcparm()
7618 if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) { in isp_setdfltfcparm()
7624 j = isp_read_nvram(isp, chan); in isp_setdfltfcparm()
7630 isp->isp_confopts |= ISP_CFG_NONVRAM; in isp_setdfltfcparm()
7634 fcp->isp_wwnn = ACTIVE_NODEWWN(isp, chan); in isp_setdfltfcparm()
7635 fcp->isp_wwpn = ACTIVE_PORTWWN(isp, chan); in isp_setdfltfcparm()
7636 isp_prt(isp, ISP_LOGCONFIG, "Chan %d 0x%08x%08x/0x%08x%08x Role %s", in isp_setdfltfcparm()
7649 isp_reinit(ispsoftc_t *isp, int do_load_defaults) in isp_reinit() argument
7653 isp_reset(isp, do_load_defaults); in isp_reinit()
7655 if (isp->isp_state != ISP_RESETSTATE) { in isp_reinit()
7656 isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__); in isp_reinit()
7657 ISP_DISABLE_INTS(isp); in isp_reinit()
7661 isp_init(isp); in isp_reinit()
7663 if (isp->isp_state == ISP_INITSTATE) { in isp_reinit()
7664 isp->isp_state = ISP_RUNSTATE; in isp_reinit()
7667 if (isp->isp_state != ISP_RUNSTATE) { in isp_reinit()
7669 isp_prt(isp, ISP_LOGWARN, "%s: not at runstate", __func__); in isp_reinit()
7671 ISP_DISABLE_INTS(isp); in isp_reinit()
7672 if (IS_FC(isp)) { in isp_reinit()
7676 if (!IS_24XX(isp)) { in isp_reinit()
7677 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS); in isp_reinit()
7678 ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET); in isp_reinit()
7679 ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS); in isp_reinit()
7680 ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL); in isp_reinit()
7681 ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS); in isp_reinit()
7688 isp->isp_nactive = 0; in isp_reinit()
7690 isp_clear_commands(isp); in isp_reinit()
7691 if (IS_FC(isp)) { in isp_reinit()
7692 for (i = 0; i < isp->isp_nchan; i++) { in isp_reinit()
7693 ISP_MARK_PORTDB(isp, i, -1); in isp_reinit()
7702 isp_read_nvram(ispsoftc_t *isp, int bus) in isp_read_nvram() argument
7713 if (IS_24XX(isp)) { in isp_read_nvram()
7714 return (isp_read_nvram_2400(isp, nvram_data)); in isp_read_nvram()
7715 } else if (IS_FC(isp)) { in isp_read_nvram()
7718 } else if (IS_ULTRA2(isp)) { in isp_read_nvram()
7727 isp_rdnvram_word(isp, i, &nvram_words[i]); in isp_read_nvram()
7732 if (isp->isp_bustype != ISP_BT_SBUS) { in isp_read_nvram()
7733 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM header"); in isp_read_nvram()
7734 isp_prt(isp, ISP_LOGDEBUG0, "%x %x %x", nvram_data[0], nvram_data[1], nvram_data[2]); in isp_read_nvram()
7744 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM checksum"); in isp_read_nvram()
7750 isp_prt(isp, ISP_LOGWARN, "version %d NVRAM not understood", in isp_read_nvram()
7756 if (IS_ULTRA3(isp)) { in isp_read_nvram()
7757 isp_parse_nvram_12160(isp, bus, nvram_data); in isp_read_nvram()
7758 } else if (IS_1080(isp)) { in isp_read_nvram()
7759 isp_parse_nvram_1080(isp, bus, nvram_data); in isp_read_nvram()
7760 } else if (IS_1280(isp) || IS_1240(isp)) { in isp_read_nvram()
7761 isp_parse_nvram_1080(isp, bus, nvram_data); in isp_read_nvram()
7762 } else if (IS_SCSI(isp)) { in isp_read_nvram()
7763 isp_parse_nvram_1020(isp, nvram_data); in isp_read_nvram()
7765 isp_parse_nvram_2100(isp, nvram_data); in isp_read_nvram()
7775 isp_read_nvram_2400(ispsoftc_t *isp, uint8_t *nvram_data) in isp_read_nvram_2400() argument
7780 if (isp->isp_port) { in isp_read_nvram_2400()
7788 isp_rd_2400_nvram(isp, addr++, dptr++); in isp_read_nvram_2400()
7792 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM header (%x %x %x)", in isp_read_nvram_2400()
7800 ISP_IOXGET_32(isp, &dptr[lwrds], tmp); in isp_read_nvram_2400()
7804 isp_prt(isp, ISP_LOGWARN, "invalid NVRAM checksum"); in isp_read_nvram_2400()
7808 isp_parse_nvram_2400(isp, nvram_data); in isp_read_nvram_2400()
7814 isp_rdnvram_word(ispsoftc_t *isp, int wo, uint16_t *rp) in isp_rdnvram_word() argument
7819 ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT); in isp_rdnvram_word()
7821 ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT|BIU_NVRAM_CLOCK); in isp_rdnvram_word()
7824 if (IS_FC(isp)) { in isp_rdnvram_word()
7826 if (IS_2312(isp) && isp->isp_port) { in isp_rdnvram_word()
7831 } else if (IS_ULTRA2(isp)) { in isp_rdnvram_word()
7850 ISP_WRITE(isp, BIU_NVRAM, bit); in isp_rdnvram_word()
7852 (void)ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7853 ISP_WRITE(isp, BIU_NVRAM, bit | BIU_NVRAM_CLOCK); in isp_rdnvram_word()
7855 (void)ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7856 ISP_WRITE(isp, BIU_NVRAM, bit); in isp_rdnvram_word()
7858 (void)ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7867 ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT|BIU_NVRAM_CLOCK); in isp_rdnvram_word()
7869 rv = ISP_READ(isp, BIU_NVRAM); in isp_rdnvram_word()
7874 ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT); in isp_rdnvram_word()
7876 (void)ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7878 ISP_WRITE(isp, BIU_NVRAM, 0); in isp_rdnvram_word()
7880 (void)ISP_READ(isp, BIU_NVRAM); /* force PCI flush */ in isp_rdnvram_word()
7881 ISP_SWIZZLE_NVRAM_WORD(isp, rp); in isp_rdnvram_word()
7885 isp_rd_2400_nvram(ispsoftc_t *isp, uint32_t addr, uint32_t *rp) in isp_rd_2400_nvram() argument
7891 if (IS_25XX(isp)) { in isp_rd_2400_nvram()
7894 ISP_WRITE(isp, BIU2400_FLASH_ADDR, base | addr); in isp_rd_2400_nvram()
7897 tmp = ISP_READ(isp, BIU2400_FLASH_ADDR); in isp_rd_2400_nvram()
7903 *rp = ISP_READ(isp, BIU2400_FLASH_DATA); in isp_rd_2400_nvram()
7904 ISP_SWIZZLE_NVRAM_LONG(isp, rp); in isp_rd_2400_nvram()
7911 isp_parse_nvram_1020(ispsoftc_t *isp, uint8_t *nvram_data) in isp_parse_nvram_1020() argument
7913 sdparam *sdp = SDPARAM(isp, 0); in isp_parse_nvram_1020()
7920 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) in isp_parse_nvram_1020()
7936 if (isp->isp_type >= ISP_HA_SCSI_1040) { in isp_parse_nvram_1020()
7983 if (isp->isp_type < ISP_HA_SCSI_1040) { in isp_parse_nvram_1020()
8024 isp_parse_nvram_1080(ispsoftc_t *isp, int bus, uint8_t *nvram_data) in isp_parse_nvram_1080() argument
8026 sdparam *sdp = SDPARAM(isp, bus); in isp_parse_nvram_1080()
8032 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) in isp_parse_nvram_1080()
8100 isp_parse_nvram_12160(ispsoftc_t *isp, int bus, uint8_t *nvram_data) in isp_parse_nvram_12160() argument
8102 sdparam *sdp = SDPARAM(isp, bus); in isp_parse_nvram_12160()
8108 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) in isp_parse_nvram_12160()
8176 isp_parse_nvram_2100(ispsoftc_t *isp, uint8_t *nvram_data) in isp_parse_nvram_2100() argument
8178 fcparam *fcp = FCPARAM(isp, 0); in isp_parse_nvram_2100()
8194 isp_prt(isp, ISP_LOGCONFIG, "NVRAM Port WWN 0x%08x%08x", in isp_parse_nvram_2100()
8201 if (IS_2200(isp) || IS_23XX(isp)) { in isp_parse_nvram_2100()
8204 isp_prt(isp, ISP_LOGCONFIG, "NVRAM Node WWN 0x%08x%08x", in isp_parse_nvram_2100()
8219 if ((isp->isp_confopts & ISP_CFG_OWNFSZ) == 0) { in isp_parse_nvram_2100()
8220 DEFAULT_FRAMESIZE(isp) = in isp_parse_nvram_2100()
8225 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) { in isp_parse_nvram_2100()
8228 if ((isp->isp_confopts & ISP_CFG_OWNEXCTHROTTLE) == 0) { in isp_parse_nvram_2100()
8229 DEFAULT_EXEC_THROTTLE(isp) = in isp_parse_nvram_2100()
8233 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2100()
8241 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2100()
8249 isp_prt(isp, ISP_LOGDEBUG0, "xfwoptions 0x%x zfw options 0x%x", in isp_parse_nvram_2100()
8254 isp_parse_nvram_2400(ispsoftc_t *isp, uint8_t *nvram_data) in isp_parse_nvram_2400() argument
8256 fcparam *fcp = FCPARAM(isp, 0); in isp_parse_nvram_2400()
8259 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2400()
8267 isp_prt(isp, ISP_LOGDEBUG0, in isp_parse_nvram_2400()
8293 if ((isp->isp_confopts & ISP_CFG_OWNFSZ) == 0) { in isp_parse_nvram_2400()
8294 DEFAULT_FRAMESIZE(isp) = in isp_parse_nvram_2400()
8297 if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0) { in isp_parse_nvram_2400()
8300 if ((isp->isp_confopts & ISP_CFG_OWNEXCTHROTTLE) == 0) { in isp_parse_nvram_2400()
8301 DEFAULT_EXEC_THROTTLE(isp) = in isp_parse_nvram_2400()