Lines Matching refs:isp

209 DRIVER_MODULE(isp, pci, isp_pci_driver, isp_devclass, 0, 0);
210 MODULE_DEPEND(isp, cam, 1, 1, 1);
211 MODULE_DEPEND(isp, firmware, 1, 1, 1);
266 isp_get_generic_options(device_t dev, ispsoftc_t *isp) in isp_get_generic_options() argument
272 isp->isp_confopts |= ISP_CFG_NORELOAD; in isp_get_generic_options()
276 isp->isp_confopts |= ISP_CFG_NONVRAM; in isp_get_generic_options()
281 isp->isp_dblev = tval; in isp_get_generic_options()
283 isp->isp_dblev = ISP_LOGWARN|ISP_LOGERR; in isp_get_generic_options()
286 isp->isp_dblev |= ISP_LOGCONFIG|ISP_LOGINFO; in isp_get_generic_options()
299 isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp) in isp_get_specific_options() argument
312 ISP_FC_PC(isp, chan)->default_id = 109 - chan; in isp_get_specific_options()
314 ISP_FC_PC(isp, chan)->default_id = tval - chan; in isp_get_specific_options()
315 isp->isp_confopts |= ISP_CFG_OWNLOOPID; in isp_get_specific_options()
337 ISP_FC_PC(isp, chan)->def_role = tval; in isp_get_specific_options()
343 isp->isp_confopts |= ISP_CFG_FULL_DUPLEX; in isp_get_specific_options()
350 isp->isp_confopts |= ISP_CFG_LPORT; in isp_get_specific_options()
352 isp->isp_confopts |= ISP_CFG_NPORT; in isp_get_specific_options()
354 isp->isp_confopts |= ISP_CFG_LPORT_ONLY; in isp_get_specific_options()
356 isp->isp_confopts |= ISP_CFG_NPORT_ONLY; in isp_get_specific_options()
361 isp->isp_confopts |= ISP_CFG_NOFCTAPE; in isp_get_specific_options()
363 isp->isp_confopts |= ISP_CFG_FCTAPE; in isp_get_specific_options()
371 isp->isp_confopts &= ~ISP_CFG_FCTAPE; in isp_get_specific_options()
372 isp->isp_confopts |= ISP_CFG_NOFCTAPE; in isp_get_specific_options()
380 isp->isp_confopts &= ~ISP_CFG_NOFCTAPE; in isp_get_specific_options()
381 isp->isp_confopts |= ISP_CFG_FCTAPE; in isp_get_specific_options()
399 ISP_FC_PC(isp, chan)->def_wwpn = strtouq(sptr, &eptr, 16); in isp_get_specific_options()
400 if (eptr < sptr + 16 || ISP_FC_PC(isp, chan)->def_wwpn == -1) { in isp_get_specific_options()
402 ISP_FC_PC(isp, chan)->def_wwpn = 0; in isp_get_specific_options()
412 ISP_FC_PC(isp, chan)->def_wwnn = strtouq(sptr, &eptr, 16); in isp_get_specific_options()
413 if (eptr < sptr + 16 || ISP_FC_PC(isp, chan)->def_wwnn == 0) { in isp_get_specific_options()
415 ISP_FC_PC(isp, chan)->def_wwnn = 0; in isp_get_specific_options()
424 ISP_FC_PC(isp, chan)->loop_down_limit = tval; in isp_get_specific_options()
426 ISP_FC_PC(isp, chan)->loop_down_limit = isp_loop_down_limit; in isp_get_specific_options()
434 ISP_FC_PC(isp, chan)->gone_device_time = tval; in isp_get_specific_options()
436 ISP_FC_PC(isp, chan)->gone_device_time = isp_gone_device_time; in isp_get_specific_options()
444 ispsoftc_t *isp = &pcs->pci_isp; in isp_pci_attach() local
450 isp->isp_dev = dev; in isp_pci_attach()
451 isp->isp_nchan = 1; in isp_pci_attach()
452 mtx_init(&isp->isp_lock, "isp", NULL, MTX_DEF); in isp_pci_attach()
458 isp_get_generic_options(dev, isp); in isp_pci_attach()
464 isp->isp_nchan += isp_nvports; in isp_pci_attach()
469 isp->isp_mdvec = &mdvec_2400; in isp_pci_attach()
470 isp->isp_type = ISP_HA_FC_2400; in isp_pci_attach()
474 isp->isp_mdvec = &mdvec_2500; in isp_pci_attach()
475 isp->isp_type = ISP_HA_FC_2500; in isp_pci_attach()
479 isp->isp_mdvec = &mdvec_2500; in isp_pci_attach()
480 isp->isp_type = ISP_HA_FC_2500; in isp_pci_attach()
485 isp->isp_mdvec = &mdvec_2600; in isp_pci_attach()
486 isp->isp_type = ISP_HA_FC_2600; in isp_pci_attach()
493 isp->isp_mdvec = &mdvec_2700; in isp_pci_attach()
494 isp->isp_type = ISP_HA_FC_2700; in isp_pci_attach()
501 isp->isp_revision = pci_get_revid(dev); in isp_pci_attach()
503 if (IS_26XX(isp)) { in isp_pci_attach()
536 isp->isp_regs = pcs->regs; in isp_pci_attach()
537 isp->isp_regs2 = pcs->regs2; in isp_pci_attach()
539 psize = sizeof(fcparam) * isp->isp_nchan; in isp_pci_attach()
540 xsize = sizeof(struct isp_fc) * isp->isp_nchan; in isp_pci_attach()
541 isp->isp_param = malloc(psize, M_DEVBUF, M_NOWAIT | M_ZERO); in isp_pci_attach()
542 if (isp->isp_param == NULL) { in isp_pci_attach()
546 isp->isp_osinfo.fc = malloc(xsize, M_DEVBUF, M_NOWAIT | M_ZERO); in isp_pci_attach()
547 if (isp->isp_osinfo.fc == NULL) { in isp_pci_attach()
555 for (i = 0; i < isp->isp_nchan; i++) { in isp_pci_attach()
556 isp_get_specific_options(dev, i, isp); in isp_pci_attach()
559 isp->isp_osinfo.fw = NULL; in isp_pci_attach()
560 if (isp->isp_osinfo.fw == NULL) { in isp_pci_attach()
562 isp->isp_osinfo.fw = firmware_get(fwname); in isp_pci_attach()
564 if (isp->isp_osinfo.fw != NULL) { in isp_pci_attach()
565 isp_prt(isp, ISP_LOGCONFIG, "loaded firmware %s", fwname); in isp_pci_attach()
566 isp->isp_mdvec->dv_ispfw = isp->isp_osinfo.fw->data; in isp_pci_attach()
582 isp_prt(isp, ISP_LOGDEBUG0, "set PCI line size to %d from %d", linesz, data); in isp_pci_attach()
593 isp_prt(isp, ISP_LOGDEBUG0, "set PCI latency to %d", data); in isp_pci_attach()
607 isp->isp_port = pci_get_function(dev); in isp_pci_attach()
612 ISP_LOCK(isp); in isp_pci_attach()
613 if (isp_reinit(isp, 1) != 0) { in isp_pci_attach()
614 ISP_UNLOCK(isp); in isp_pci_attach()
617 ISP_UNLOCK(isp); in isp_pci_attach()
618 if (isp_attach(isp)) { in isp_pci_attach()
619 ISP_LOCK(isp); in isp_pci_attach()
620 isp_shutdown(isp); in isp_pci_attach()
621 ISP_UNLOCK(isp); in isp_pci_attach()
627 if (isp->isp_osinfo.fw == NULL && !IS_26XX(isp)) { in isp_pci_attach()
633 isp_prt(isp, ISP_LOGWARN, "See the ispfw(4) man page on " in isp_pci_attach()
636 for (i = 0; i < isp->isp_nirq; i++) { in isp_pci_attach()
658 mtx_destroy(&isp->isp_lock); in isp_pci_attach()
666 ispsoftc_t *isp = &pcs->pci_isp; in isp_pci_detach() local
669 status = isp_detach(isp); in isp_pci_detach()
672 ISP_LOCK(isp); in isp_pci_detach()
673 isp_shutdown(isp); in isp_pci_detach()
674 ISP_UNLOCK(isp); in isp_pci_detach()
675 for (i = 0; i < isp->isp_nirq; i++) { in isp_pci_detach()
687 isp_pci_mbxdmafree(isp); in isp_pci_detach()
696 mtx_destroy(&isp->isp_lock); in isp_pci_detach()
700 #define BXR2(isp, off) bus_read_2((isp)->isp_regs, (off)) argument
701 #define BXW2(isp, off, v) bus_write_2((isp)->isp_regs, (off), (v)) argument
702 #define BXR4(isp, off) bus_read_4((isp)->isp_regs, (off)) argument
703 #define BXW4(isp, off, v) bus_write_4((isp)->isp_regs, (off), (v)) argument
704 #define B2R4(isp, off) bus_read_4((isp)->isp_regs2, (off)) argument
705 #define B2W4(isp, off, v) bus_write_4((isp)->isp_regs2, (off), (v)) argument
708 isp_pci_run_isr_2400(ispsoftc_t *isp) in isp_pci_run_isr_2400() argument
713 r2hisr = BXR4(isp, BIU2400_R2HSTS); in isp_pci_run_isr_2400()
714 isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr); in isp_pci_run_isr_2400()
724 isp_intr_mbox(isp, info); in isp_pci_run_isr_2400()
727 isp_intr_async(isp, info); in isp_pci_run_isr_2400()
730 isp_intr_respq(isp); in isp_pci_run_isr_2400()
736 isp_intr_respq(isp); in isp_pci_run_isr_2400()
741 isp_intr_atioq(isp); in isp_pci_run_isr_2400()
745 isp_prt(isp, ISP_LOGERR, "unknown interrupt 0x%x\n", r2hisr); in isp_pci_run_isr_2400()
747 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); in isp_pci_run_isr_2400()
751 isp_pci_rd_reg_2400(ispsoftc_t *isp, int regoff) in isp_pci_rd_reg_2400() argument
757 return (BXR4(isp, regoff)); in isp_pci_rd_reg_2400()
759 return (BXR2(isp, regoff)); in isp_pci_rd_reg_2400()
761 isp_prt(isp, ISP_LOGERR, "unknown block read at 0x%x", regoff); in isp_pci_rd_reg_2400()
766 isp_pci_wr_reg_2400(ispsoftc_t *isp, int regoff, uint32_t val) in isp_pci_wr_reg_2400() argument
772 BXW4(isp, regoff, val); in isp_pci_wr_reg_2400()
778 MEMORYBARRIERW(isp, SYNC_REG, regoff, 4, -1) in isp_pci_wr_reg_2400()
781 MEMORYBARRIER(isp, SYNC_REG, regoff, 4, -1); in isp_pci_wr_reg_2400()
784 BXW2(isp, regoff, val); in isp_pci_wr_reg_2400()
785 MEMORYBARRIER(isp, SYNC_REG, regoff, 2, -1); in isp_pci_wr_reg_2400()
788 isp_prt(isp, ISP_LOGERR, "unknown block write at 0x%x", regoff); in isp_pci_wr_reg_2400()
792 isp_pci_rd_reg_2600(ispsoftc_t *isp, int regoff) in isp_pci_rd_reg_2600() argument
799 isp_prt(isp, ISP_LOGERR, "unknown register read at 0x%x", in isp_pci_rd_reg_2600()
804 rv = B2R4(isp, 0x00); in isp_pci_rd_reg_2600()
807 rv = B2R4(isp, 0x04); in isp_pci_rd_reg_2600()
810 rv = B2R4(isp, 0x08); in isp_pci_rd_reg_2600()
813 rv = B2R4(isp, 0x0c); in isp_pci_rd_reg_2600()
816 rv = B2R4(isp, 0x10); in isp_pci_rd_reg_2600()
819 rv = B2R4(isp, 0x14); in isp_pci_rd_reg_2600()
822 rv = isp_pci_rd_reg_2400(isp, regoff); in isp_pci_rd_reg_2600()
829 isp_pci_wr_reg_2600(ispsoftc_t *isp, int regoff, uint32_t val) in isp_pci_wr_reg_2600() argument
836 isp_prt(isp, ISP_LOGERR, "unknown register write at 0x%x", in isp_pci_wr_reg_2600()
858 isp_pci_wr_reg_2400(isp, regoff, val); in isp_pci_wr_reg_2600()
861 B2W4(isp, off, val); in isp_pci_wr_reg_2600()
880 isp_pci_mbxdma(ispsoftc_t *isp) in isp_pci_mbxdma() argument
893 if (isp->isp_xflist != NULL) in isp_pci_mbxdma()
895 if (isp->isp_rquest != NULL && isp->isp_maxcmds == 0) in isp_pci_mbxdma()
897 ISP_UNLOCK(isp); in isp_pci_mbxdma()
899 ptag = bus_get_dma_tag(isp->isp_osinfo.dev); in isp_pci_mbxdma()
905 if (isp->isp_rquest != NULL) in isp_pci_mbxdma()
911 len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); in isp_pci_mbxdma()
914 len, 1, len, 0, NULL, NULL, &isp->isp_osinfo.reqdmat)) { in isp_pci_mbxdma()
915 isp_prt(isp, ISP_LOGERR, "cannot create request DMA tag"); in isp_pci_mbxdma()
918 if (bus_dmamem_alloc(isp->isp_osinfo.reqdmat, (void **)&base, in isp_pci_mbxdma()
919 BUS_DMA_COHERENT, &isp->isp_osinfo.reqmap) != 0) { in isp_pci_mbxdma()
920 isp_prt(isp, ISP_LOGERR, "cannot allocate request DMA memory"); in isp_pci_mbxdma()
921 bus_dma_tag_destroy(isp->isp_osinfo.reqdmat); in isp_pci_mbxdma()
924 isp->isp_rquest = base; in isp_pci_mbxdma()
926 if (bus_dmamap_load(isp->isp_osinfo.reqdmat, isp->isp_osinfo.reqmap, in isp_pci_mbxdma()
928 isp_prt(isp, ISP_LOGERR, "error loading request DMA map %d", im.error); in isp_pci_mbxdma()
931 isp_prt(isp, ISP_LOGDEBUG0, "request area @ 0x%jx/0x%jx", in isp_pci_mbxdma()
933 isp->isp_rquest_dma = im.maddr; in isp_pci_mbxdma()
942 len, 1, len, 0, NULL, NULL, &isp->isp_osinfo.ecmd_dmat)) { in isp_pci_mbxdma()
943 isp_prt(isp, ISP_LOGERR, "cannot create ECMD DMA tag"); in isp_pci_mbxdma()
946 if (bus_dmamem_alloc(isp->isp_osinfo.ecmd_dmat, (void **)&base, in isp_pci_mbxdma()
947 BUS_DMA_COHERENT, &isp->isp_osinfo.ecmd_map) != 0) { in isp_pci_mbxdma()
948 isp_prt(isp, ISP_LOGERR, "cannot allocate ECMD DMA memory"); in isp_pci_mbxdma()
949 bus_dma_tag_destroy(isp->isp_osinfo.ecmd_dmat); in isp_pci_mbxdma()
952 isp->isp_osinfo.ecmd_base = (isp_ecmd_t *)base; in isp_pci_mbxdma()
954 if (bus_dmamap_load(isp->isp_osinfo.ecmd_dmat, isp->isp_osinfo.ecmd_map, in isp_pci_mbxdma()
956 isp_prt(isp, ISP_LOGERR, "error loading ECMD DMA map %d", im.error); in isp_pci_mbxdma()
959 isp_prt(isp, ISP_LOGDEBUG0, "ecmd area @ 0x%jx/0x%jx", in isp_pci_mbxdma()
962 isp->isp_osinfo.ecmd_dma = im.maddr; in isp_pci_mbxdma()
963 isp->isp_osinfo.ecmd_free = (isp_ecmd_t *)base; in isp_pci_mbxdma()
964 for (ecmd = isp->isp_osinfo.ecmd_free; in isp_pci_mbxdma()
965 ecmd < &isp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) { in isp_pci_mbxdma()
966 if (ecmd == &isp->isp_osinfo.ecmd_free[N_XCMDS - 1]) in isp_pci_mbxdma()
976 len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); in isp_pci_mbxdma()
979 len, 1, len, 0, NULL, NULL, &isp->isp_osinfo.respdmat)) { in isp_pci_mbxdma()
980 isp_prt(isp, ISP_LOGERR, "cannot create response DMA tag"); in isp_pci_mbxdma()
983 if (bus_dmamem_alloc(isp->isp_osinfo.respdmat, (void **)&base, in isp_pci_mbxdma()
984 BUS_DMA_COHERENT, &isp->isp_osinfo.respmap) != 0) { in isp_pci_mbxdma()
985 isp_prt(isp, ISP_LOGERR, "cannot allocate response DMA memory"); in isp_pci_mbxdma()
986 bus_dma_tag_destroy(isp->isp_osinfo.respdmat); in isp_pci_mbxdma()
989 isp->isp_result = base; in isp_pci_mbxdma()
991 if (bus_dmamap_load(isp->isp_osinfo.respdmat, isp->isp_osinfo.respmap, in isp_pci_mbxdma()
993 isp_prt(isp, ISP_LOGERR, "error loading response DMA map %d", im.error); in isp_pci_mbxdma()
996 isp_prt(isp, ISP_LOGDEBUG0, "response area @ 0x%jx/0x%jx", in isp_pci_mbxdma()
998 isp->isp_result_dma = im.maddr; in isp_pci_mbxdma()
1004 len = ISP_QUEUE_SIZE(ATIO_QUEUE_LEN(isp)); in isp_pci_mbxdma()
1007 len, 1, len, 0, NULL, NULL, &isp->isp_osinfo.atiodmat)) { in isp_pci_mbxdma()
1008 isp_prt(isp, ISP_LOGERR, "cannot create ATIO DMA tag"); in isp_pci_mbxdma()
1011 if (bus_dmamem_alloc(isp->isp_osinfo.atiodmat, (void **)&base, in isp_pci_mbxdma()
1012 BUS_DMA_COHERENT, &isp->isp_osinfo.atiomap) != 0) { in isp_pci_mbxdma()
1013 isp_prt(isp, ISP_LOGERR, "cannot allocate ATIO DMA memory"); in isp_pci_mbxdma()
1014 bus_dma_tag_destroy(isp->isp_osinfo.atiodmat); in isp_pci_mbxdma()
1017 isp->isp_atioq = base; in isp_pci_mbxdma()
1019 if (bus_dmamap_load(isp->isp_osinfo.atiodmat, isp->isp_osinfo.atiomap, in isp_pci_mbxdma()
1021 isp_prt(isp, ISP_LOGERR, "error loading ATIO DMA map %d", im.error); in isp_pci_mbxdma()
1024 isp_prt(isp, ISP_LOGDEBUG0, "ATIO area @ 0x%jx/0x%jx", in isp_pci_mbxdma()
1026 isp->isp_atioq_dma = im.maddr; in isp_pci_mbxdma()
1032 &isp->isp_osinfo.iocbdmat)) { in isp_pci_mbxdma()
1035 if (bus_dmamem_alloc(isp->isp_osinfo.iocbdmat, in isp_pci_mbxdma()
1036 (void **)&base, BUS_DMA_COHERENT, &isp->isp_osinfo.iocbmap) != 0) in isp_pci_mbxdma()
1038 isp->isp_iocb = base; in isp_pci_mbxdma()
1040 if (bus_dmamap_load(isp->isp_osinfo.iocbdmat, isp->isp_osinfo.iocbmap, in isp_pci_mbxdma()
1043 isp->isp_iocb_dma = im.maddr; in isp_pci_mbxdma()
1048 &isp->isp_osinfo.scdmat)) in isp_pci_mbxdma()
1050 for (cmap = 0; cmap < isp->isp_nchan; cmap++) { in isp_pci_mbxdma()
1051 struct isp_fc *fc = ISP_FC_PC(isp, cmap); in isp_pci_mbxdma()
1052 if (bus_dmamem_alloc(isp->isp_osinfo.scdmat, in isp_pci_mbxdma()
1055 FCPARAM(isp, cmap)->isp_scratch = base; in isp_pci_mbxdma()
1057 if (bus_dmamap_load(isp->isp_osinfo.scdmat, fc->scmap, in isp_pci_mbxdma()
1060 bus_dmamem_free(isp->isp_osinfo.scdmat, in isp_pci_mbxdma()
1062 FCPARAM(isp, cmap)->isp_scratch = NULL; in isp_pci_mbxdma()
1065 FCPARAM(isp, cmap)->isp_scdma = im.maddr; in isp_pci_mbxdma()
1081 if (isp->isp_maxcmds == 0) { in isp_pci_mbxdma()
1082 ISP_LOCK(isp); in isp_pci_mbxdma()
1091 busdma_lock_mutex, &isp->isp_lock, &isp->isp_osinfo.dmat)) in isp_pci_mbxdma()
1093 len = isp->isp_maxcmds * sizeof (struct isp_pcmd); in isp_pci_mbxdma()
1094 isp->isp_osinfo.pcmd_pool = (struct isp_pcmd *) in isp_pci_mbxdma()
1096 for (i = 0; i < isp->isp_maxcmds; i++) { in isp_pci_mbxdma()
1097 struct isp_pcmd *pcmd = &isp->isp_osinfo.pcmd_pool[i]; in isp_pci_mbxdma()
1098 error = bus_dmamap_create(isp->isp_osinfo.dmat, 0, &pcmd->dmap); in isp_pci_mbxdma()
1100 isp_prt(isp, ISP_LOGERR, "error %d creating per-cmd DMA maps", error); in isp_pci_mbxdma()
1102 bus_dmamap_destroy(isp->isp_osinfo.dmat, in isp_pci_mbxdma()
1103 isp->isp_osinfo.pcmd_pool[i].dmap); in isp_pci_mbxdma()
1107 callout_init_mtx(&pcmd->wdog, &isp->isp_lock, 0); in isp_pci_mbxdma()
1108 if (i == isp->isp_maxcmds-1) in isp_pci_mbxdma()
1111 pcmd->next = &isp->isp_osinfo.pcmd_pool[i+1]; in isp_pci_mbxdma()
1113 isp->isp_osinfo.pcmd_free = &isp->isp_osinfo.pcmd_pool[0]; in isp_pci_mbxdma()
1115 len = sizeof(isp_hdl_t) * ISP_HANDLE_NUM(isp); in isp_pci_mbxdma()
1116 isp->isp_xflist = (isp_hdl_t *) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO); in isp_pci_mbxdma()
1117 for (len = 0; len < ISP_HANDLE_NUM(isp) - 1; len++) in isp_pci_mbxdma()
1118 isp->isp_xflist[len].cmd = &isp->isp_xflist[len+1]; in isp_pci_mbxdma()
1119 isp->isp_xffree = isp->isp_xflist; in isp_pci_mbxdma()
1121 ISP_LOCK(isp); in isp_pci_mbxdma()
1125 isp_pci_mbxdmafree(isp); in isp_pci_mbxdma()
1126 ISP_LOCK(isp); in isp_pci_mbxdma()
1131 isp_pci_mbxdmafree(ispsoftc_t *isp) in isp_pci_mbxdmafree() argument
1135 if (isp->isp_xflist != NULL) { in isp_pci_mbxdmafree()
1136 free(isp->isp_xflist, M_DEVBUF); in isp_pci_mbxdmafree()
1137 isp->isp_xflist = NULL; in isp_pci_mbxdmafree()
1139 if (isp->isp_osinfo.pcmd_pool != NULL) { in isp_pci_mbxdmafree()
1140 for (i = 0; i < isp->isp_maxcmds; i++) { in isp_pci_mbxdmafree()
1141 bus_dmamap_destroy(isp->isp_osinfo.dmat, in isp_pci_mbxdmafree()
1142 isp->isp_osinfo.pcmd_pool[i].dmap); in isp_pci_mbxdmafree()
1144 free(isp->isp_osinfo.pcmd_pool, M_DEVBUF); in isp_pci_mbxdmafree()
1145 isp->isp_osinfo.pcmd_pool = NULL; in isp_pci_mbxdmafree()
1147 if (isp->isp_osinfo.dmat) { in isp_pci_mbxdmafree()
1148 bus_dma_tag_destroy(isp->isp_osinfo.dmat); in isp_pci_mbxdmafree()
1149 isp->isp_osinfo.dmat = NULL; in isp_pci_mbxdmafree()
1151 for (i = 0; i < isp->isp_nchan; i++) { in isp_pci_mbxdmafree()
1152 struct isp_fc *fc = ISP_FC_PC(isp, i); in isp_pci_mbxdmafree()
1153 if (FCPARAM(isp, i)->isp_scdma != 0) { in isp_pci_mbxdmafree()
1154 bus_dmamap_unload(isp->isp_osinfo.scdmat, in isp_pci_mbxdmafree()
1156 FCPARAM(isp, i)->isp_scdma = 0; in isp_pci_mbxdmafree()
1158 if (FCPARAM(isp, i)->isp_scratch != NULL) { in isp_pci_mbxdmafree()
1159 bus_dmamem_free(isp->isp_osinfo.scdmat, in isp_pci_mbxdmafree()
1160 FCPARAM(isp, i)->isp_scratch, fc->scmap); in isp_pci_mbxdmafree()
1161 FCPARAM(isp, i)->isp_scratch = NULL; in isp_pci_mbxdmafree()
1169 if (isp->isp_osinfo.scdmat) { in isp_pci_mbxdmafree()
1170 bus_dma_tag_destroy(isp->isp_osinfo.scdmat); in isp_pci_mbxdmafree()
1171 isp->isp_osinfo.scdmat = NULL; in isp_pci_mbxdmafree()
1173 if (isp->isp_iocb_dma != 0) { in isp_pci_mbxdmafree()
1174 bus_dmamap_unload(isp->isp_osinfo.iocbdmat, in isp_pci_mbxdmafree()
1175 isp->isp_osinfo.iocbmap); in isp_pci_mbxdmafree()
1176 isp->isp_iocb_dma = 0; in isp_pci_mbxdmafree()
1178 if (isp->isp_iocb != NULL) { in isp_pci_mbxdmafree()
1179 bus_dmamem_free(isp->isp_osinfo.iocbdmat, in isp_pci_mbxdmafree()
1180 isp->isp_iocb, isp->isp_osinfo.iocbmap); in isp_pci_mbxdmafree()
1181 bus_dma_tag_destroy(isp->isp_osinfo.iocbdmat); in isp_pci_mbxdmafree()
1184 if (isp->isp_atioq_dma != 0) { in isp_pci_mbxdmafree()
1185 bus_dmamap_unload(isp->isp_osinfo.atiodmat, in isp_pci_mbxdmafree()
1186 isp->isp_osinfo.atiomap); in isp_pci_mbxdmafree()
1187 isp->isp_atioq_dma = 0; in isp_pci_mbxdmafree()
1189 if (isp->isp_atioq != NULL) { in isp_pci_mbxdmafree()
1190 bus_dmamem_free(isp->isp_osinfo.atiodmat, isp->isp_atioq, in isp_pci_mbxdmafree()
1191 isp->isp_osinfo.atiomap); in isp_pci_mbxdmafree()
1192 bus_dma_tag_destroy(isp->isp_osinfo.atiodmat); in isp_pci_mbxdmafree()
1193 isp->isp_atioq = NULL; in isp_pci_mbxdmafree()
1196 if (isp->isp_result_dma != 0) { in isp_pci_mbxdmafree()
1197 bus_dmamap_unload(isp->isp_osinfo.respdmat, in isp_pci_mbxdmafree()
1198 isp->isp_osinfo.respmap); in isp_pci_mbxdmafree()
1199 isp->isp_result_dma = 0; in isp_pci_mbxdmafree()
1201 if (isp->isp_result != NULL) { in isp_pci_mbxdmafree()
1202 bus_dmamem_free(isp->isp_osinfo.respdmat, isp->isp_result, in isp_pci_mbxdmafree()
1203 isp->isp_osinfo.respmap); in isp_pci_mbxdmafree()
1204 bus_dma_tag_destroy(isp->isp_osinfo.respdmat); in isp_pci_mbxdmafree()
1205 isp->isp_result = NULL; in isp_pci_mbxdmafree()
1208 if (isp->isp_osinfo.ecmd_dma != 0) { in isp_pci_mbxdmafree()
1209 bus_dmamap_unload(isp->isp_osinfo.ecmd_dmat, in isp_pci_mbxdmafree()
1210 isp->isp_osinfo.ecmd_map); in isp_pci_mbxdmafree()
1211 isp->isp_osinfo.ecmd_dma = 0; in isp_pci_mbxdmafree()
1213 if (isp->isp_osinfo.ecmd_base != NULL) { in isp_pci_mbxdmafree()
1214 bus_dmamem_free(isp->isp_osinfo.ecmd_dmat, isp->isp_osinfo.ecmd_base, in isp_pci_mbxdmafree()
1215 isp->isp_osinfo.ecmd_map); in isp_pci_mbxdmafree()
1216 bus_dma_tag_destroy(isp->isp_osinfo.ecmd_dmat); in isp_pci_mbxdmafree()
1217 isp->isp_osinfo.ecmd_base = NULL; in isp_pci_mbxdmafree()
1220 if (isp->isp_rquest_dma != 0) { in isp_pci_mbxdmafree()
1221 bus_dmamap_unload(isp->isp_osinfo.reqdmat, in isp_pci_mbxdmafree()
1222 isp->isp_osinfo.reqmap); in isp_pci_mbxdmafree()
1223 isp->isp_rquest_dma = 0; in isp_pci_mbxdmafree()
1225 if (isp->isp_rquest != NULL) { in isp_pci_mbxdmafree()
1226 bus_dmamem_free(isp->isp_osinfo.reqdmat, isp->isp_rquest, in isp_pci_mbxdmafree()
1227 isp->isp_osinfo.reqmap); in isp_pci_mbxdmafree()
1228 bus_dma_tag_destroy(isp->isp_osinfo.reqdmat); in isp_pci_mbxdmafree()
1229 isp->isp_rquest = NULL; in isp_pci_mbxdmafree()
1234 isp_pci_irqsetup(ispsoftc_t *isp) in isp_pci_irqsetup() argument
1236 device_t dev = isp->isp_osinfo.dev; in isp_pci_irqsetup()
1242 if (isp->isp_nirq > 0) in isp_pci_irqsetup()
1245 ISP_UNLOCK(isp); in isp_pci_irqsetup()
1246 if (ISP_CAP_MSIX(isp)) { in isp_pci_irqsetup()
1247 max_irq = IS_26XX(isp) ? 3 : (IS_25XX(isp) ? 2 : 0); in isp_pci_irqsetup()
1281 f, isp, &pcs->irq[i].ih)) { in isp_pci_irqsetup()
1291 isp->isp_nirq = i + 1; in isp_pci_irqsetup()
1293 ISP_LOCK(isp); in isp_pci_irqsetup()
1295 return (isp->isp_nirq == 0); in isp_pci_irqsetup()