Lines Matching refs:isp

91 isp_attach(struct ispsoftc *isp)  in isp_attach()  argument
93 device_t self = isp->isp_osinfo.dev; in isp_attach()
96 isp->isp_state = ISP_RUNSTATE; in isp_attach()
98 isp->isp_osinfo.adapter.adapt_dev = self; in isp_attach()
99 isp->isp_osinfo.adapter.adapt_openings = isp->isp_maxcmds; in isp_attach()
100 isp->isp_osinfo.loop_down_limit = 300; in isp_attach()
106 isp->isp_osinfo.adapter.adapt_max_periph = uimin(isp->isp_maxcmds, 255); in isp_attach()
107 isp->isp_osinfo.adapter.adapt_ioctl = ispioctl; in isp_attach()
108 isp->isp_osinfo.adapter.adapt_request = isprequest; in isp_attach()
109 if (isp->isp_type <= ISP_HA_SCSI_1020A) { in isp_attach()
110 isp->isp_osinfo.adapter.adapt_minphys = ispminphys_1020; in isp_attach()
112 isp->isp_osinfo.adapter.adapt_minphys = ispminphys; in isp_attach()
115 callout_init(&isp->isp_osinfo.gdt, 0); in isp_attach()
116 callout_setfunc(&isp->isp_osinfo.gdt, isp_gdt, isp); in isp_attach()
117 callout_init(&isp->isp_osinfo.ldt, 0); in isp_attach()
118 callout_setfunc(&isp->isp_osinfo.ldt, isp_ldt, isp); in isp_attach()
119 if (IS_FC(isp)) { in isp_attach()
120 if (kthread_create(PRI_NONE, 0, NULL, isp_fc_worker, isp, in isp_attach()
121 &isp->isp_osinfo.thread, "%s:fc_thrd", in isp_attach()
123 isp_prt(isp, ISP_LOGERR, in isp_attach()
129 for (i = 0; i != isp->isp_osinfo.adapter.adapt_nchannels; i++) { in isp_attach()
130 isp->isp_osinfo.chan[i].chan_adapter = in isp_attach()
131 &isp->isp_osinfo.adapter; in isp_attach()
132 isp->isp_osinfo.chan[i].chan_bustype = &scsi_bustype; in isp_attach()
133 isp->isp_osinfo.chan[i].chan_channel = i; in isp_attach()
138 isp->isp_osinfo.chan[i].chan_nluns = uimin(isp->isp_maxluns, 8); in isp_attach()
139 if (IS_FC(isp)) { in isp_attach()
140 isp->isp_osinfo.chan[i].chan_ntargets = MAX_FC_TARG; in isp_attach()
141 if (ISP_CAP_2KLOGIN(isp) == 0 && MAX_FC_TARG > 256) { in isp_attach()
142 isp->isp_osinfo.chan[i].chan_ntargets = 256; in isp_attach()
144 isp->isp_osinfo.chan[i].chan_id = MAX_FC_TARG; in isp_attach()
146 isp->isp_osinfo.chan[i].chan_ntargets = MAX_TARGETS; in isp_attach()
147 isp->isp_osinfo.chan[i].chan_id = in isp_attach()
148 SDPARAM(isp, i)->isp_initiator_id; in isp_attach()
149 ISP_LOCK(isp); in isp_attach()
150 (void) isp_control(isp, ISPCTL_RESET_BUS, i); in isp_attach()
151 ISP_UNLOCK(isp); in isp_attach()
165 struct ispsoftc *isp = device_private(self); in isp_config_interrupts() local
167 isp->isp_osinfo.mbox_sleep_ok = 1; in isp_config_interrupts()
169 if (IS_FC(isp) && (FCPARAM(isp, 0)->isp_fwstate != FW_READY || in isp_config_interrupts()
170 FCPARAM(isp, 0)->isp_loopstate != LOOP_READY)) { in isp_config_interrupts()
171 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_config_interrupts()
173 callout_schedule(&isp->isp_osinfo.ldt, isp_quickboot_time * hz); in isp_config_interrupts()
179 for (i = 0; i < isp->isp_osinfo.adapter.adapt_nchannels; i++) { in isp_config_interrupts()
180 config_found(self, &isp->isp_osinfo.chan[i], scsiprint, in isp_config_interrupts()
210 struct ispsoftc *isp = device_private(chan->chan_adapter->adapt_dev); in ispioctl() local
216 int olddblev = isp->isp_dblev; in ispioctl()
217 isp->isp_dblev = *(int *)addr; in ispioctl()
224 if (bus < 0 || bus >= isp->isp_nchan) { in ispioctl()
228 if (IS_FC(isp)) { in ispioctl()
229 *(int *)addr = FCPARAM(isp, bus)->role; in ispioctl()
231 *(int *)addr = SDPARAM(isp, bus)->role; in ispioctl()
239 if (bus < 0 || bus >= isp->isp_nchan) { in ispioctl()
248 if (IS_FC(isp)) { in ispioctl()
249 *(int *)addr = FCPARAM(isp, bus)->role; in ispioctl()
250 FCPARAM(isp, bus)->role = nr; in ispioctl()
252 *(int *)addr = SDPARAM(isp, bus)->role; in ispioctl()
253 SDPARAM(isp, bus)->role = nr; in ispioctl()
259 ISP_LOCK(isp); in ispioctl()
260 isp_reinit(isp, 0); in ispioctl()
261 ISP_UNLOCK(isp); in ispioctl()
266 if (IS_FC(isp)) { in ispioctl()
268 if (bus < 0 || bus >= isp->isp_nchan) { in ispioctl()
272 ISP_LOCK(isp); in ispioctl()
273 if (isp_fc_runstate(isp, bus, 5 * 1000000)) { in ispioctl()
278 ISP_UNLOCK(isp); in ispioctl()
283 if (IS_FC(isp)) { in ispioctl()
285 if (bus < 0 || bus >= isp->isp_nchan) { in ispioctl()
289 ISP_LOCK(isp); in ispioctl()
290 if (isp_control(isp, ISPCTL_SEND_LIP, bus)) { in ispioctl()
295 ISP_UNLOCK(isp); in ispioctl()
303 if (IS_SCSI(isp)) { in ispioctl()
310 lp = &FCPARAM(isp, ifc->chan)->portdb[ifc->loopid]; in ispioctl()
329 sp->isp_type = isp->isp_type; in ispioctl()
330 sp->isp_revision = isp->isp_revision; in ispioctl()
331 ISP_LOCK(isp); in ispioctl()
332 sp->isp_stats[ISP_INTCNT] = isp->isp_intcnt; in ispioctl()
333 sp->isp_stats[ISP_INTBOGUS] = isp->isp_intbogus; in ispioctl()
334 sp->isp_stats[ISP_INTMBOXC] = isp->isp_intmboxc; in ispioctl()
335 sp->isp_stats[ISP_INGOASYNC] = isp->isp_intoasync; in ispioctl()
336 sp->isp_stats[ISP_RSLTCCMPLT] = isp->isp_rsltccmplt; in ispioctl()
337 sp->isp_stats[ISP_FPHCCMCPLT] = isp->isp_fphccmplt; in ispioctl()
338 sp->isp_stats[ISP_RSCCHIWAT] = isp->isp_rscchiwater; in ispioctl()
339 sp->isp_stats[ISP_FPCCHIWAT] = isp->isp_fpcchiwater; in ispioctl()
340 ISP_UNLOCK(isp); in ispioctl()
345 ISP_LOCK(isp); in ispioctl()
346 isp->isp_intcnt = 0; in ispioctl()
347 isp->isp_intbogus = 0; in ispioctl()
348 isp->isp_intmboxc = 0; in ispioctl()
349 isp->isp_intoasync = 0; in ispioctl()
350 isp->isp_rsltccmplt = 0; in ispioctl()
351 isp->isp_fphccmplt = 0; in ispioctl()
352 isp->isp_rscchiwater = 0; in ispioctl()
353 isp->isp_fpcchiwater = 0; in ispioctl()
354 ISP_UNLOCK(isp); in ispioctl()
362 if (bus < 0 || bus >= isp->isp_nchan) { in ispioctl()
366 hba->fc_fw_major = ISP_FW_MAJORX(isp->isp_fwrev); in ispioctl()
367 hba->fc_fw_minor = ISP_FW_MINORX(isp->isp_fwrev); in ispioctl()
368 hba->fc_fw_micro = ISP_FW_MICROX(isp->isp_fwrev); in ispioctl()
369 hba->fc_nchannels = isp->isp_nchan; in ispioctl()
370 hba->fc_nports = isp->isp_nchan;/* XXXX 24XX STUFF? XXX */ in ispioctl()
371 if (IS_FC(isp)) { in ispioctl()
372 hba->fc_speed = FCPARAM(isp, bus)->isp_gbspeed; in ispioctl()
373 hba->fc_topology = FCPARAM(isp, bus)->isp_topo + 1; in ispioctl()
374 hba->fc_loopid = FCPARAM(isp, bus)->isp_loopid; in ispioctl()
375 hba->nvram_node_wwn = FCPARAM(isp, bus)->isp_wwnn_nvram; in ispioctl()
376 hba->nvram_port_wwn = FCPARAM(isp, bus)->isp_wwpn_nvram; in ispioctl()
377 hba->active_node_wwn = FCPARAM(isp, bus)->isp_wwnn; in ispioctl()
378 hba->active_port_wwn = FCPARAM(isp, bus)->isp_wwpn; in ispioctl()
397 if (IS_SCSI(isp)) { in ispioctl()
402 if (bus < 0 || bus >= isp->isp_nchan) { in ispioctl()
410 if (ISP_CAP_2KLOGIN(isp) == 0) { in ispioctl()
448 FCPARAM(isp, bus)->sendmarker = 1; in ispioctl()
450 ISP_LOCK(isp); in ispioctl()
451 retval = isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs); in ispioctl()
452 ISP_UNLOCK(isp); in ispioctl()
465 if (IS_SCSI(isp)) { in ispioctl()
477 if (channel >= isp->isp_nchan) { in ispioctl()
485 if (ISP_CAP_2KLOGIN(isp)) { in ispioctl()
491 ISP_LOCK(isp); in ispioctl()
492 retval = isp_control(isp, ISPCTL_GET_NAMES, channel, in ispioctl()
494 ISP_UNLOCK(isp); in ispioctl()
515 ISP_LOCK(isp); in ispioctl()
516 if (isp_control(isp, ISPCTL_RESET_BUS, &chan->chan_channel)) { in ispioctl()
521 ISP_UNLOCK(isp); in ispioctl()
530 ispcmd(struct ispsoftc *isp, XS_T *xs) in ispcmd() argument
535 ISP_LOCK(isp); in ispcmd()
536 if (isp->isp_state < ISP_RUNSTATE) { in ispcmd()
537 ISP_DISABLE_INTS(isp); in ispcmd()
538 isp_init(isp); in ispcmd()
539 if (isp->isp_state != ISP_INITSTATE) { in ispcmd()
540 ISP_ENABLE_INTS(isp); in ispcmd()
541 ISP_UNLOCK(isp); in ispcmd()
542 isp_prt(isp, ISP_LOGERR, "isp not at init state"); in ispcmd()
547 isp->isp_state = ISP_RUNSTATE; in ispcmd()
548 ISP_ENABLE_INTS(isp); in ispcmd()
556 if (IS_FC(isp) && (FCPARAM(isp, chan)->isp_fwstate != FW_READY || in ispcmd()
557 FCPARAM(isp, chan)->isp_loopstate != LOOP_READY) && in ispcmd()
558 isp->isp_osinfo.thread == NULL) { in ispcmd()
559 ombi = isp->isp_osinfo.mbox_sleep_ok != 0; in ispcmd()
563 isp->isp_osinfo.mbox_sleep_ok = 0; in ispcmd()
566 if (isp->isp_osinfo.loop_checked == 0) { in ispcmd()
568 isp->isp_osinfo.loop_checked = 1; in ispcmd()
573 if (isp_fc_runstate(isp, XS_CHANNEL(xs), delay_time) != 0) { in ispcmd()
575 isp->isp_osinfo.mbox_sleep_ok = ombi; in ispcmd()
577 if (FCPARAM(isp, XS_CHANNEL(xs))->loop_seen_once == 0) { in ispcmd()
580 ISP_UNLOCK(isp); in ispcmd()
588 (isp->isp_osinfo.blocked || isp->isp_osinfo.paused); in ispcmd()
589 isp->isp_osinfo.blocked = isp->isp_osinfo.paused = 0; in ispcmd()
591 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in ispcmd()
593 scsipi_channel_thaw(&isp->isp_osinfo.chan[chan], in ispcmd()
598 isp->isp_osinfo.mbox_sleep_ok = ombi; in ispcmd()
602 if (isp->isp_osinfo.paused) { in ispcmd()
603 isp_prt(isp, ISP_LOGWARN, "I/O while paused"); in ispcmd()
606 ISP_UNLOCK(isp); in ispcmd()
609 if (isp->isp_osinfo.blocked) { in ispcmd()
610 isp_prt(isp, ISP_LOGWARN, in ispcmd()
619 ISP_UNLOCK(isp); in ispcmd()
624 ombi = isp->isp_osinfo.mbox_sleep_ok; in ispcmd()
625 isp->isp_osinfo.mbox_sleep_ok = 0; in ispcmd()
630 if (IS_FC(isp) && isp->isp_osinfo.wwns[XS_TGT(xs)] == 0) { in ispcmd()
631 fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs)); in ispcmd()
638 isp->isp_osinfo.wwns[XS_TGT(xs)] = in ispcmd()
643 isp_polled_cmd_wait(isp, xs); in ispcmd()
644 isp->isp_osinfo.mbox_sleep_ok = ombi; in ispcmd()
650 isp->isp_osinfo.paused = 1; in ispcmd()
652 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in ispcmd()
654 for (chan = 0; chan < isp->isp_nchan; chan++) { in ispcmd()
655 scsipi_channel_freeze(&isp->isp_osinfo.chan[chan], 1); in ispcmd()
667 if (FCPARAM(isp, XS_CHANNEL(xs))->loop_seen_once == 0) { in ispcmd()
670 lim = isp->isp_osinfo.loop_down_limit; in ispcmd()
672 if (isp->isp_osinfo.loop_down_time >= lim) { in ispcmd()
673 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in ispcmd()
675 isp->isp_osinfo.loop_down_time, lim); in ispcmd()
680 if (isp->isp_osinfo.blocked == 0) { in ispcmd()
681 isp->isp_osinfo.blocked = 1; in ispcmd()
682 scsipi_channel_freeze(&isp->isp_osinfo.chan[chan], 1); in ispcmd()
683 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in ispcmd()
686 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in ispcmd()
696 ISP_UNLOCK(isp); in ispcmd()
702 struct ispsoftc *isp = device_private(chan->chan_adapter->adapt_dev); in isprequest() local
706 ispcmd(isp, (XS_T *) arg); in isprequest()
714 if (IS_SCSI(isp)) { in isprequest()
717 sdparam *sdp = SDPARAM(isp, chan->chan_channel); in isprequest()
725 ISP_LOCK(isp); in isprequest()
730 ISP_UNLOCK(isp); in isprequest()
731 isp_prt(isp, ISP_LOGDEBUG1, in isprequest()
742 isp_polled_cmd_wait(struct ispsoftc *isp, XS_T *xs) in isp_polled_cmd_wait() argument
756 if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) { in isp_polled_cmd_wait()
757 isp_intr(isp, isr, sema, mbox); in isp_polled_cmd_wait()
771 if (isp_control(isp, ISPCTL_ABORT_CMD, xs)) { in isp_polled_cmd_wait()
772 isp_reinit(isp, 0); in isp_polled_cmd_wait()
775 isp_prt(isp, ISP_LOGERR, "polled command timed out"); in isp_polled_cmd_wait()
786 struct ispsoftc *isp = XS_ISP(xs); in isp_done() local
789 isp_prt(isp, ISP_LOGDEBUG1, in isp_done()
800 if (isp->isp_osinfo.paused) { in isp_done()
802 isp->isp_osinfo.paused = 0; in isp_done()
803 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_done()
805 for (i = 0; i < isp->isp_nchan; i++) { in isp_done()
806 scsipi_channel_timed_thaw(&isp->isp_osinfo.chan[i]); in isp_done()
810 isp_prt(isp, ISP_LOGERR, in isp_done()
823 struct ispsoftc *isp = XS_ISP(xs); in isp_dog() local
828 ISP_ILOCK(isp); in isp_dog()
829 sok = isp->isp_osinfo.mbox_sleep_ok; in isp_dog()
830 isp->isp_osinfo.mbox_sleep_ok = 0; in isp_dog()
836 handle = isp_find_handle(isp, xs); in isp_dog()
842 isp_prt(isp, ISP_LOGDEBUG1, in isp_dog()
848 isp_prt(isp, ISP_LOGDEBUG1, in isp_dog()
855 if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) { in isp_dog()
856 isp_intr(isp, isr, sema, mbox); in isp_dog()
860 isp_prt(isp, ISP_LOGDEBUG1, in isp_dog()
865 isp_prt(isp, ISP_LOGDEBUG1, in isp_dog()
871 (void) isp_control(isp, ISPCTL_ABORT_CMD, arg); in isp_dog()
877 ISP_DMAFREE(isp, xs, handle); in isp_dog()
879 isp_destroy_handle(isp, handle); in isp_dog()
886 isp_prt(isp, ISP_LOGDEBUG2, in isp_dog()
890 qe = isp_getrqentry(isp); in isp_dog()
899 isp_put_marker(isp, mp, qe); in isp_dog()
900 ISP_SYNC_REQUEST(isp); in isp_dog()
903 isp_prt(isp, ISP_LOGDEBUG0, "watchdog with no command"); in isp_dog()
906 isp->isp_osinfo.mbox_sleep_ok = sok; in isp_dog()
907 ISP_IUNLOCK(isp); in isp_dog()
923 ispsoftc_t *isp = arg; in isp_gdt() local
927 isp_prt(isp, ISP_LOGDEBUG0, "GDT timer expired"); in isp_gdt()
928 ISP_LOCK(isp); in isp_gdt()
930 lp = &FCPARAM(isp, 0)->portdb[dbidx]; in isp_gdt()
947 FCPARAM(isp, 0)->isp_dev_map[tgt] = 0; in isp_gdt()
950 isp_prt(isp, ISP_LOGCONFIG, prom3, lp->portid, tgt, in isp_gdt()
952 isp_make_gone(isp, tgt); in isp_gdt()
955 callout_schedule(&isp->isp_osinfo.gdt, hz); in isp_gdt()
957 isp->isp_osinfo.gdt_running = 0; in isp_gdt()
958 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_gdt()
961 ISP_UNLOCK(isp); in isp_gdt()
976 ispsoftc_t *isp = arg; in isp_ldt() local
980 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Loop Down Timer expired"); in isp_ldt()
981 ISP_LOCK(isp); in isp_ldt()
987 lp = &FCPARAM(isp, 0)->portdb[dbidx]; in isp_ldt()
1013 FCPARAM(isp, 0)->isp_dev_map[tgt] = 0; in isp_ldt()
1015 isp_prt(isp, ISP_LOGCONFIG, prom3, lp->portid, tgt, in isp_ldt()
1017 isp_make_gone(isp, tgt); in isp_ldt()
1024 isp->isp_osinfo.loop_down_time = isp->isp_osinfo.loop_down_limit+1; in isp_ldt()
1025 wakeup(&isp->isp_osinfo.thread); in isp_ldt()
1026 ISP_UNLOCK(isp); in isp_ldt()
1030 isp_make_here(ispsoftc_t *isp, int tgt) in isp_make_here() argument
1032 isp_prt(isp, ISP_LOGINFO, "target %d has arrived", tgt); in isp_make_here()
1036 isp_make_gone(ispsoftc_t *isp, int tgt) in isp_make_gone() argument
1038 isp_prt(isp, ISP_LOGINFO, "target %d has departed", tgt); in isp_make_gone()
1044 ispsoftc_t *isp = arg; in isp_fc_worker() local
1053 while (isp->isp_osinfo.thread != NULL) { in isp_fc_worker()
1056 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "checking FC state"); in isp_fc_worker()
1057 sok = isp->isp_osinfo.mbox_sleep_ok; in isp_fc_worker()
1058 isp->isp_osinfo.mbox_sleep_ok = 1; in isp_fc_worker()
1059 lb = isp_fc_runstate(isp, chan, 250000); in isp_fc_worker()
1060 isp->isp_osinfo.mbox_sleep_ok = sok; in isp_fc_worker()
1065 isp->isp_osinfo.loop_down_time += slp; in isp_fc_worker()
1068 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_fc_worker()
1070 isp->isp_osinfo.loop_down_time); in isp_fc_worker()
1072 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_fc_worker()
1074 lb, isp->isp_osinfo.loop_down_time); in isp_fc_worker()
1084 if (FCPARAM(isp, 0)->loop_seen_once == 0) { in isp_fc_worker()
1087 lim = isp->isp_osinfo.loop_down_limit; in isp_fc_worker()
1089 if (isp->isp_osinfo.loop_down_time >= lim) { in isp_fc_worker()
1096 isp->isp_osinfo.blocked = 1; in isp_fc_worker()
1098 } else if (isp->isp_osinfo.loop_down_time < 10) { in isp_fc_worker()
1100 } else if (isp->isp_osinfo.loop_down_time < 30) { in isp_fc_worker()
1102 } else if (isp->isp_osinfo.loop_down_time < 60) { in isp_fc_worker()
1104 } else if (isp->isp_osinfo.loop_down_time < 120) { in isp_fc_worker()
1111 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_fc_worker()
1113 isp->isp_osinfo.loop_down_time = 0; in isp_fc_worker()
1115 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_fc_worker()
1117 scsipi_channel_thaw(&isp->isp_osinfo.chan[chan], 1); in isp_fc_worker()
1126 if (isp->isp_osinfo.blocked) { in isp_fc_worker()
1127 isp->isp_osinfo.blocked = 0; in isp_fc_worker()
1128 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_fc_worker()
1130 scsipi_channel_thaw(&isp->isp_osinfo.chan[chan], 1); in isp_fc_worker()
1132 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "sleep time %d", slp); in isp_fc_worker()
1133 tsleep(&isp->isp_osinfo.thread, PRIBIO, "ispf", slp * hz); in isp_fc_worker()
1143 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_fc_worker()
1153 wakeup(&isp->isp_osinfo.thread); in isp_fc_worker()
1165 isp_uninit(struct ispsoftc *isp) in isp_uninit() argument
1167 isp_lock(isp); in isp_uninit()
1171 ISP_DISABLE_INTS(isp); in isp_uninit()
1172 isp_unlock(isp); in isp_uninit()
1176 isp_async(struct ispsoftc *isp, ispasync_t cmd, ...) in isp_async() argument
1191 if (IS_SCSI(isp)) { in isp_async()
1200 sdp = SDPARAM(isp, bus); in isp_async()
1214 scsipi_async_event(&isp->isp_osinfo.chan[bus], in isp_async()
1223 isp_prt(isp, ISP_LOGINFO, "SCSI bus %d reset detected", bus); in isp_async()
1224 scsipi_async_event(&isp->isp_osinfo.chan[bus], in isp_async()
1249 if (isp->isp_osinfo.mbox_sleep_ok && in isp_async()
1250 isp->isp_osinfo.blocked == 0 && in isp_async()
1251 isp->isp_osinfo.thread) { in isp_async()
1252 isp->isp_osinfo.blocked = 1; in isp_async()
1253 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_async()
1255 scsipi_channel_freeze(&isp->isp_osinfo.chan[bus], 1); in isp_async()
1256 if (callout_pending(&isp->isp_osinfo.ldt) == 0) { in isp_async()
1257 callout_schedule(&isp->isp_osinfo.ldt, in isp_async()
1258 isp->isp_osinfo.loop_down_limit * hz); in isp_async()
1259 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_async()
1263 isp_prt(isp, ISP_LOGINFO, "%s", msg); in isp_async()
1271 isp_prt(isp, ISP_LOGINFO, "Loop UP"); in isp_async()
1279 if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && in isp_async()
1281 int dbidx = lp - FCPARAM(isp, bus)->portdb; in isp_async()
1288 if (FCPARAM(isp, bus)->isp_dev_map[i] == 0) { in isp_async()
1293 FCPARAM(isp, bus)->isp_dev_map[i] = dbidx + 1; in isp_async()
1296 isp_prt(isp, ISP_LOGWARN, "out of target ids"); in isp_async()
1297 isp_dump_portdb(isp, bus); in isp_async()
1302 isp_prt(isp, ISP_LOGCONFIG, prom2, in isp_async()
1309 isp_make_here(isp, tgt); in isp_async()
1311 isp_prt(isp, ISP_LOGCONFIG, prom, in isp_async()
1329 FCPARAM(isp, bus)->isp_dev_map[tgt] = 0; in isp_async()
1331 isp_prt(isp, ISP_LOGCONFIG, prom3, in isp_async()
1333 isp_make_gone(isp, tgt); in isp_async()
1335 isp_prt(isp, ISP_LOGCONFIG, prom, in isp_async()
1349 FCPARAM(isp, bus)->isp_dev_map[t] = in isp_async()
1350 (lp - FCPARAM(isp, bus)->portdb) + 1; in isp_async()
1352 isp_prt(isp, ISP_LOGCONFIG, prom2, in isp_async()
1360 isp_prt(isp, ISP_LOGCONFIG, prom, in isp_async()
1377 isp_prt(isp, ISP_LOGCONFIG, prom2, in isp_async()
1385 isp_prt(isp, ISP_LOGCONFIG, prom, in isp_async()
1409 lp->new_reserved = isp->isp_osinfo.gone_device_time; in isp_async()
1411 if (isp->isp_osinfo.gdt_running == 0) { in isp_async()
1412 isp->isp_osinfo.gdt_running = 1; in isp_async()
1413 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_async()
1415 callout_schedule(&isp->isp_osinfo.gdt, hz); in isp_async()
1418 isp_prt(isp, ISP_LOGCONFIG, prom2, in isp_async()
1426 isp_prt(isp, ISP_LOGCONFIG, prom, in isp_async()
1454 if (callout_pending(&isp->isp_osinfo.ldt)) { in isp_async()
1455 callout_stop(&isp->isp_osinfo.ldt); in isp_async()
1456 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_async()
1459 isp_prt(isp, ISP_LOGINFO, "%s", msg); in isp_async()
1467 if (isp->isp_osinfo.blocked == 0) { in isp_async()
1468 isp->isp_osinfo.blocked = 1; in isp_async()
1469 if (isp->isp_osinfo.thread) { in isp_async()
1470 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_async()
1472 scsipi_channel_freeze(&isp->isp_osinfo.chan[bus], 1); in isp_async()
1479 if (isp->isp_osinfo.thread) { in isp_async()
1480 wakeup(&isp->isp_osinfo.thread); in isp_async()
1482 isp_prt(isp, ISP_LOGDEBUG1, "no FC thread yet"); in isp_async()
1489 mbox1 = ISP_READ(isp, OUTMAILBOX1); in isp_async()
1490 if (IS_DUALBUS(isp)) { in isp_async()
1491 bus = ISP_READ(isp, OUTMAILBOX6); in isp_async()
1495 isp_prt(isp, ISP_LOGERR, in isp_async()
1498 if (IS_FC(isp)) { in isp_async()
1499 if (isp->isp_osinfo.blocked == 0) { in isp_async()
1500 isp->isp_osinfo.blocked = 1; in isp_async()
1501 isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, in isp_async()
1503 scsipi_channel_freeze(&isp->isp_osinfo.chan[bus], 1); in isp_async()
1506 mbox1 = isp->isp_osinfo.mbox_sleep_ok; in isp_async()
1507 isp->isp_osinfo.mbox_sleep_ok = 0; in isp_async()
1508 isp_reinit(isp, 0); in isp_async()
1509 isp->isp_osinfo.mbox_sleep_ok = mbox1; in isp_async()
1510 isp_async(isp, ISPASYNC_FW_RESTARTED, NULL); in isp_async()
1519 isp_prt(struct ispsoftc *isp, int level, const char *fmt, ...) in isp_prt() argument
1522 if (level != ISP_LOGALL && (level & isp->isp_dblev) == 0) { in isp_prt()
1525 printf("%s: ", device_xname(isp->isp_osinfo.dev)); in isp_prt()
1533 isp_xs_prt(struct ispsoftc *isp, XS_T *xs, int level, const char *fmt, ...) in isp_xs_prt() argument
1536 if (level != ISP_LOGALL && (level & isp->isp_dblev) == 0) { in isp_xs_prt()
1547 isp_lock(struct ispsoftc *isp) in isp_lock() argument
1550 if (isp->isp_osinfo.islocked++ == 0) { in isp_lock()
1551 isp->isp_osinfo.splsaved = s; in isp_lock()
1558 isp_unlock(struct ispsoftc *isp) in isp_unlock() argument
1560 if (isp->isp_osinfo.islocked-- <= 1) { in isp_unlock()
1561 isp->isp_osinfo.islocked = 0; in isp_unlock()
1562 splx(isp->isp_osinfo.splsaved); in isp_unlock()
1579 isp_mbox_acquire(ispsoftc_t *isp) in isp_mbox_acquire() argument
1581 if (isp->isp_osinfo.mboxbsy) { in isp_mbox_acquire()
1584 isp->isp_osinfo.mboxcmd_done = 0; in isp_mbox_acquire()
1585 isp->isp_osinfo.mboxbsy = 1; in isp_mbox_acquire()
1591 isp_mbox_wait_complete(struct ispsoftc *isp, mbreg_t *mbp) in isp_mbox_wait_complete() argument
1600 maxc = isp->isp_mbxwrk0 + 1; in isp_mbox_wait_complete()
1603 if (isp->isp_osinfo.mbox_sleep_ok) { in isp_mbox_wait_complete()
1619 isp->isp_osinfo.mbox_sleep_ok = 0; in isp_mbox_wait_complete()
1620 isp->isp_osinfo.mbox_sleeping = 1; in isp_mbox_wait_complete()
1621 tsleep(&isp->isp_mbxworkp, PRIBIO, "ispmbx_sleep", to); in isp_mbox_wait_complete()
1622 isp->isp_osinfo.mbox_sleeping = 0; in isp_mbox_wait_complete()
1623 isp->isp_osinfo.mbox_sleep_ok = 1; in isp_mbox_wait_complete()
1629 if (isp->isp_osinfo.mboxcmd_done) { in isp_mbox_wait_complete()
1632 if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) { in isp_mbox_wait_complete()
1633 isp_intr(isp, isr, sema, mbox); in isp_mbox_wait_complete()
1634 if (isp->isp_osinfo.mboxcmd_done) { in isp_mbox_wait_complete()
1640 if (isp->isp_osinfo.mboxcmd_done) { in isp_mbox_wait_complete()
1645 if (isp->isp_osinfo.mboxcmd_done == 0) { in isp_mbox_wait_complete()
1650 isp_prt(isp, ISP_LOGWARN, in isp_mbox_wait_complete()
1652 isp->isp_osinfo.mbox_sleep_ok? "Interrupting" : "Polled", in isp_mbox_wait_complete()
1653 isp->isp_lastmbxcmd, (intmax_t)(elapsed.tv_sec * 1000000) + in isp_mbox_wait_complete()
1656 isp->isp_osinfo.mboxcmd_done = 1; in isp_mbox_wait_complete()
1661 isp_mbox_notify_done(ispsoftc_t *isp) in isp_mbox_notify_done() argument
1663 if (isp->isp_osinfo.mbox_sleeping) { in isp_mbox_notify_done()
1664 wakeup(&isp->isp_mbxworkp); in isp_mbox_notify_done()
1666 isp->isp_osinfo.mboxcmd_done = 1; in isp_mbox_notify_done()
1670 isp_mbox_release(ispsoftc_t *isp) in isp_mbox_release() argument
1672 isp->isp_osinfo.mboxbsy = 0; in isp_mbox_release()