Lines Matching refs:isp

82 #define	ISP_SBD(isp)	((struct isp_sbussoftc *)isp)->sbus_dev  argument
110 DRIVER_MODULE(isp, sbus, isp_sbus_driver, isp_devclass, 0, 0);
111 MODULE_DEPEND(isp, cam, 1, 1, 1);
112 MODULE_DEPEND(isp, firmware, 1, 1, 1);
142 ispsoftc_t *isp = &sbs->sbus_isp; in isp_sbus_attach() local
147 isp->isp_dev = dev; in isp_sbus_attach()
148 mtx_init(&isp->isp_lock, "isp", NULL, MTX_DEF); in isp_sbus_attach()
174 isp->isp_regs = sbs->regs; in isp_sbus_attach()
175 isp->isp_mdvec = &sbs->sbus_mdvec; in isp_sbus_attach()
176 isp->isp_bustype = ISP_BT_SBUS; in isp_sbus_attach()
177 isp->isp_type = ISP_HA_SCSI_UNKNOWN; in isp_sbus_attach()
178 isp->isp_param = &sbs->sbus_param; in isp_sbus_attach()
179 isp->isp_osinfo.pc.ptr = &sbs->sbus_spi; in isp_sbus_attach()
180 isp->isp_revision = 0; /* XXX */ in isp_sbus_attach()
181 isp->isp_nchan = 1; in isp_sbus_attach()
182 if (IS_FC(isp)) in isp_sbus_attach()
183 ISP_FC_PC(isp, 0)->def_role = role; in isp_sbus_attach()
218 isp->isp_confopts |= ISP_CFG_NONVRAM; in isp_sbus_attach()
225 SDPARAM(isp, 0)->isp_ptisp = 1; in isp_sbus_attach()
228 isp->isp_osinfo.fw = firmware_get("isp_1000"); in isp_sbus_attach()
229 if (isp->isp_osinfo.fw) { in isp_sbus_attach()
234 stupid.cp = isp->isp_osinfo.fw->data; in isp_sbus_attach()
235 isp->isp_mdvec->dv_ispfw = stupid.sp; in isp_sbus_attach()
241 isp->isp_confopts |= ISP_CFG_NORELOAD; in isp_sbus_attach()
248 isp->isp_confopts |= ISP_CFG_OWNLOOPID; in isp_sbus_attach()
253 ISP_SPI_PC(isp, 0)->iid = default_id; in isp_sbus_attach()
267 isp, &sbs->ih)) { in isp_sbus_attach()
273 isp->isp_nirq = 1; in isp_sbus_attach()
279 isp->isp_dblev = isp_debug; in isp_sbus_attach()
281 isp->isp_dblev = ISP_LOGWARN|ISP_LOGERR; in isp_sbus_attach()
284 isp->isp_dblev |= ISP_LOGCONFIG|ISP_LOGINFO; in isp_sbus_attach()
290 ISP_LOCK(isp); in isp_sbus_attach()
291 if (isp_reinit(isp, 1) != 0) { in isp_sbus_attach()
292 ISP_UNLOCK(isp); in isp_sbus_attach()
295 ISP_UNLOCK(isp); in isp_sbus_attach()
296 if (isp_attach(isp)) { in isp_sbus_attach()
297 ISP_LOCK(isp); in isp_sbus_attach()
298 isp_shutdown(isp); in isp_sbus_attach()
299 ISP_UNLOCK(isp); in isp_sbus_attach()
305 if (isp->isp_nirq > 0) { in isp_sbus_attach()
315 mtx_destroy(&isp->isp_lock); in isp_sbus_attach()
323 ispsoftc_t *isp = &sbs->sbus_isp; in isp_sbus_detach() local
326 status = isp_detach(isp); in isp_sbus_detach()
329 ISP_LOCK(isp); in isp_sbus_detach()
330 isp_shutdown(isp); in isp_sbus_detach()
331 ISP_UNLOCK(isp); in isp_sbus_detach()
332 if (isp->isp_nirq > 0) { in isp_sbus_detach()
338 isp_sbus_mbxdmafree(isp); in isp_sbus_detach()
339 mtx_destroy(&isp->isp_lock); in isp_sbus_detach()
347 #define BXR2(isp, off) bus_read_2((isp)->isp_regs, (off)) argument
350 isp_sbus_run_isr(ispsoftc_t *isp) in isp_sbus_run_isr() argument
354 isr = BXR2(isp, IspVirt2Off(isp, BIU_ISR)); in isp_sbus_run_isr()
355 sema = BXR2(isp, IspVirt2Off(isp, BIU_SEMA)); in isp_sbus_run_isr()
356 isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema); in isp_sbus_run_isr()
357 isr &= INT_PENDING_MASK(isp); in isp_sbus_run_isr()
362 info = BXR2(isp, IspVirt2Off(isp, OUTMAILBOX0)); in isp_sbus_run_isr()
364 isp_intr_mbox(isp, info); in isp_sbus_run_isr()
366 isp_intr_async(isp, info); in isp_sbus_run_isr()
367 if (isp->isp_state == ISP_RUNSTATE) in isp_sbus_run_isr()
368 isp_intr_respq(isp); in isp_sbus_run_isr()
370 isp_intr_respq(isp); in isp_sbus_run_isr()
371 ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT); in isp_sbus_run_isr()
373 ISP_WRITE(isp, BIU_SEMA, 0); in isp_sbus_run_isr()
377 isp_sbus_rd_reg(ispsoftc_t *isp, int regoff) in isp_sbus_rd_reg() argument
380 struct isp_sbussoftc *sbs = (struct isp_sbussoftc *) isp; in isp_sbus_rd_reg()
383 rval = BXR2(isp, offset); in isp_sbus_rd_reg()
384 isp_prt(isp, ISP_LOGDEBUG3, in isp_sbus_rd_reg()
390 isp_sbus_wr_reg(ispsoftc_t *isp, int regoff, uint32_t val) in isp_sbus_wr_reg() argument
392 struct isp_sbussoftc *sbs = (struct isp_sbussoftc *) isp; in isp_sbus_wr_reg()
395 isp_prt(isp, ISP_LOGDEBUG3, in isp_sbus_wr_reg()
397 bus_write_2(isp->isp_regs, offset, val); in isp_sbus_wr_reg()
398 MEMORYBARRIER(isp, SYNC_REG, offset, 2, -1); in isp_sbus_wr_reg()
418 isp_sbus_mbxdma(ispsoftc_t *isp) in isp_sbus_mbxdma() argument
426 if (isp->isp_xflist != NULL) in isp_sbus_mbxdma()
428 if (isp->isp_rquest != NULL && isp->isp_maxcmds == 0) in isp_sbus_mbxdma()
430 ISP_UNLOCK(isp); in isp_sbus_mbxdma()
431 if (isp->isp_rquest != NULL) in isp_sbus_mbxdma()
434 if (bus_dma_tag_create(bus_get_dma_tag(ISP_SBD(isp)), 1, in isp_sbus_mbxdma()
438 busdma_lock_mutex, &isp->isp_lock, &isp->isp_osinfo.dmat)) { in isp_sbus_mbxdma()
439 isp_prt(isp, ISP_LOGERR, "could not create master dma tag"); in isp_sbus_mbxdma()
446 len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); in isp_sbus_mbxdma()
447 if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, BUS_SPACE_MAXADDR_24BIT+1, in isp_sbus_mbxdma()
449 len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, in isp_sbus_mbxdma()
450 &isp->isp_osinfo.reqdmat)) { in isp_sbus_mbxdma()
451 isp_prt(isp, ISP_LOGERR, "cannot create request DMA tag"); in isp_sbus_mbxdma()
454 if (bus_dmamem_alloc(isp->isp_osinfo.reqdmat, (void **)&base, in isp_sbus_mbxdma()
455 BUS_DMA_COHERENT, &isp->isp_osinfo.reqmap) != 0) { in isp_sbus_mbxdma()
456 isp_prt(isp, ISP_LOGERR, "cannot allocate request DMA memory"); in isp_sbus_mbxdma()
457 bus_dma_tag_destroy(isp->isp_osinfo.reqdmat); in isp_sbus_mbxdma()
460 isp->isp_rquest = base; in isp_sbus_mbxdma()
462 if (bus_dmamap_load(isp->isp_osinfo.reqdmat, isp->isp_osinfo.reqmap, in isp_sbus_mbxdma()
464 isp_prt(isp, ISP_LOGERR, "error loading request DMA map %d", im.error); in isp_sbus_mbxdma()
467 isp_prt(isp, ISP_LOGDEBUG0, "request area @ 0x%jx/0x%jx", in isp_sbus_mbxdma()
469 isp->isp_rquest_dma = im.maddr; in isp_sbus_mbxdma()
474 len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); in isp_sbus_mbxdma()
475 if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, BUS_SPACE_MAXADDR_24BIT+1, in isp_sbus_mbxdma()
477 len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, in isp_sbus_mbxdma()
478 &isp->isp_osinfo.respdmat)) { in isp_sbus_mbxdma()
479 isp_prt(isp, ISP_LOGERR, "cannot create response DMA tag"); in isp_sbus_mbxdma()
482 if (bus_dmamem_alloc(isp->isp_osinfo.respdmat, (void **)&base, in isp_sbus_mbxdma()
483 BUS_DMA_COHERENT, &isp->isp_osinfo.respmap) != 0) { in isp_sbus_mbxdma()
484 isp_prt(isp, ISP_LOGERR, "cannot allocate response DMA memory"); in isp_sbus_mbxdma()
485 bus_dma_tag_destroy(isp->isp_osinfo.respdmat); in isp_sbus_mbxdma()
488 isp->isp_result = base; in isp_sbus_mbxdma()
490 if (bus_dmamap_load(isp->isp_osinfo.respdmat, isp->isp_osinfo.respmap, in isp_sbus_mbxdma()
492 isp_prt(isp, ISP_LOGERR, "error loading response DMA map %d", im.error); in isp_sbus_mbxdma()
495 isp_prt(isp, ISP_LOGDEBUG0, "response area @ 0x%jx/0x%jx", in isp_sbus_mbxdma()
497 isp->isp_result_dma = im.maddr; in isp_sbus_mbxdma()
499 if (isp->isp_maxcmds == 0) { in isp_sbus_mbxdma()
500 ISP_LOCK(isp); in isp_sbus_mbxdma()
505 len = sizeof (struct isp_pcmd) * isp->isp_maxcmds; in isp_sbus_mbxdma()
506 isp->isp_osinfo.pcmd_pool = (struct isp_pcmd *) in isp_sbus_mbxdma()
508 for (i = 0; i < isp->isp_maxcmds; i++) { in isp_sbus_mbxdma()
509 struct isp_pcmd *pcmd = &isp->isp_osinfo.pcmd_pool[i]; in isp_sbus_mbxdma()
510 error = bus_dmamap_create(isp->isp_osinfo.dmat, 0, &pcmd->dmap); in isp_sbus_mbxdma()
512 isp_prt(isp, ISP_LOGERR, in isp_sbus_mbxdma()
515 bus_dmamap_destroy(isp->isp_osinfo.dmat, in isp_sbus_mbxdma()
516 isp->isp_osinfo.pcmd_pool[i].dmap); in isp_sbus_mbxdma()
520 callout_init_mtx(&pcmd->wdog, &isp->isp_lock, 0); in isp_sbus_mbxdma()
521 if (i == isp->isp_maxcmds-1) { in isp_sbus_mbxdma()
524 pcmd->next = &isp->isp_osinfo.pcmd_pool[i+1]; in isp_sbus_mbxdma()
527 isp->isp_osinfo.pcmd_free = &isp->isp_osinfo.pcmd_pool[0]; in isp_sbus_mbxdma()
529 len = sizeof (isp_hdl_t *) * isp->isp_maxcmds; in isp_sbus_mbxdma()
530 isp->isp_xflist = (isp_hdl_t *) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO); in isp_sbus_mbxdma()
531 for (len = 0; len < isp->isp_maxcmds - 1; len++) in isp_sbus_mbxdma()
532 isp->isp_xflist[len].cmd = &isp->isp_xflist[len+1]; in isp_sbus_mbxdma()
533 isp->isp_xffree = isp->isp_xflist; in isp_sbus_mbxdma()
535 ISP_LOCK(isp); in isp_sbus_mbxdma()
539 isp_sbus_mbxdmafree(isp); in isp_sbus_mbxdma()
540 ISP_LOCK(isp); in isp_sbus_mbxdma()
545 isp_sbus_mbxdmafree(ispsoftc_t *isp) in isp_sbus_mbxdmafree() argument
549 if (isp->isp_xflist != NULL) { in isp_sbus_mbxdmafree()
550 free(isp->isp_xflist, M_DEVBUF); in isp_sbus_mbxdmafree()
551 isp->isp_xflist = NULL; in isp_sbus_mbxdmafree()
553 if (isp->isp_osinfo.pcmd_pool != NULL) { in isp_sbus_mbxdmafree()
554 for (i = 0; i < isp->isp_maxcmds; i++) { in isp_sbus_mbxdmafree()
555 bus_dmamap_destroy(isp->isp_osinfo.dmat, in isp_sbus_mbxdmafree()
556 isp->isp_osinfo.pcmd_pool[i].dmap); in isp_sbus_mbxdmafree()
558 free(isp->isp_osinfo.pcmd_pool, M_DEVBUF); in isp_sbus_mbxdmafree()
559 isp->isp_osinfo.pcmd_pool = NULL; in isp_sbus_mbxdmafree()
561 if (isp->isp_result_dma != 0) { in isp_sbus_mbxdmafree()
562 bus_dmamap_unload(isp->isp_osinfo.respdmat, in isp_sbus_mbxdmafree()
563 isp->isp_osinfo.respmap); in isp_sbus_mbxdmafree()
564 isp->isp_result_dma = 0; in isp_sbus_mbxdmafree()
566 if (isp->isp_result != NULL) { in isp_sbus_mbxdmafree()
567 bus_dmamem_free(isp->isp_osinfo.respdmat, isp->isp_result, in isp_sbus_mbxdmafree()
568 isp->isp_osinfo.respmap); in isp_sbus_mbxdmafree()
569 bus_dma_tag_destroy(isp->isp_osinfo.respdmat); in isp_sbus_mbxdmafree()
570 isp->isp_result = NULL; in isp_sbus_mbxdmafree()
572 if (isp->isp_rquest_dma != 0) { in isp_sbus_mbxdmafree()
573 bus_dmamap_unload(isp->isp_osinfo.reqdmat, in isp_sbus_mbxdmafree()
574 isp->isp_osinfo.reqmap); in isp_sbus_mbxdmafree()
575 isp->isp_rquest_dma = 0; in isp_sbus_mbxdmafree()
577 if (isp->isp_rquest != NULL) { in isp_sbus_mbxdmafree()
578 bus_dmamem_free(isp->isp_osinfo.reqdmat, isp->isp_rquest, in isp_sbus_mbxdmafree()
579 isp->isp_osinfo.reqmap); in isp_sbus_mbxdmafree()
580 bus_dma_tag_destroy(isp->isp_osinfo.reqdmat); in isp_sbus_mbxdmafree()
581 isp->isp_rquest = NULL; in isp_sbus_mbxdmafree()
586 ispsoftc_t *isp; member
598 ispsoftc_t *isp = mp->isp; in dma2() local
621 bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, in dma2()
625 if (isp_send_cmd(isp, mp->rq, dm_segs, nseg, XS_XFRLEN(csio), in dma2()
632 isp_sbus_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff) in isp_sbus_dmasetup() argument
638 mp->isp = isp; in isp_sbus_dmasetup()
643 error = bus_dmamap_load_ccb(isp->isp_osinfo.dmat, in isp_sbus_dmasetup()
646 bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap); in isp_sbus_dmasetup()
648 isp_prt(isp, ISP_LOGERR, in isp_sbus_dmasetup()
652 isp_prt(isp, ISP_LOGERR, "error %d in dma mapping code", error); in isp_sbus_dmasetup()
673 isp_sbus_dumpregs(ispsoftc_t *isp, const char *msg) in isp_sbus_dumpregs() argument
676 printf("%s: %s\n", device_get_nameunit(isp->isp_dev), msg); in isp_sbus_dumpregs()
678 printf("%s:\n", device_get_nameunit(isp->isp_dev)); in isp_sbus_dumpregs()
679 printf(" biu_conf1=%x", ISP_READ(isp, BIU_CONF1)); in isp_sbus_dumpregs()
680 printf(" biu_icr=%x biu_isr=%x biu_sema=%x ", ISP_READ(isp, BIU_ICR), in isp_sbus_dumpregs()
681 ISP_READ(isp, BIU_ISR), ISP_READ(isp, BIU_SEMA)); in isp_sbus_dumpregs()
682 printf("risc_hccr=%x\n", ISP_READ(isp, HCCR)); in isp_sbus_dumpregs()
685 ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE); in isp_sbus_dumpregs()
687 ISP_READ(isp, CDMA_CONF), ISP_READ(isp, CDMA_STATUS), in isp_sbus_dumpregs()
688 ISP_READ(isp, CDMA_FIFO_STS)); in isp_sbus_dumpregs()
690 ISP_READ(isp, DDMA_CONF), ISP_READ(isp, DDMA_STATUS), in isp_sbus_dumpregs()
691 ISP_READ(isp, DDMA_FIFO_STS)); in isp_sbus_dumpregs()
693 ISP_READ(isp, SXP_INTERRUPT), in isp_sbus_dumpregs()
694 ISP_READ(isp, SXP_GROSS_ERR), in isp_sbus_dumpregs()
695 ISP_READ(isp, SXP_PINS_CTRL)); in isp_sbus_dumpregs()
696 ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); in isp_sbus_dumpregs()
698 ISP_READ(isp, OUTMAILBOX0), ISP_READ(isp, OUTMAILBOX1), in isp_sbus_dumpregs()
699 ISP_READ(isp, OUTMAILBOX2), ISP_READ(isp, OUTMAILBOX3), in isp_sbus_dumpregs()
700 ISP_READ(isp, OUTMAILBOX4)); in isp_sbus_dumpregs()