Lines Matching refs:isp
312 #define ISP_PCD(isp) ((struct isp_pcisoftc *)isp)->pci_dev argument
348 DRIVER_MODULE(isp, pci, isp_pci_driver, isp_devclass, 0, 0);
349 MODULE_DEPEND(isp, cam, 1, 1, 1);
350 MODULE_DEPEND(isp, firmware, 1, 1, 1);
447 isp_get_generic_options(device_t dev, ispsoftc_t *isp) in isp_get_generic_options() argument
453 isp->isp_confopts |= ISP_CFG_NORELOAD; in isp_get_generic_options()
457 isp->isp_confopts |= ISP_CFG_NONVRAM; in isp_get_generic_options()
462 isp->isp_dblev = tval; in isp_get_generic_options()
464 isp->isp_dblev = ISP_LOGWARN|ISP_LOGERR; in isp_get_generic_options()
467 isp->isp_dblev |= ISP_LOGCONFIG|ISP_LOGINFO; in isp_get_generic_options()
480 isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp) in isp_get_specific_options() argument
493 if (IS_FC(isp)) { in isp_get_specific_options()
494 ISP_FC_PC(isp, chan)->default_id = 109 - chan; in isp_get_specific_options()
497 ISP_SPI_PC(isp, chan)->iid = OF_getscsinitid(dev); in isp_get_specific_options()
499 ISP_SPI_PC(isp, chan)->iid = 7; in isp_get_specific_options()
503 if (IS_FC(isp)) { in isp_get_specific_options()
504 ISP_FC_PC(isp, chan)->default_id = tval - chan; in isp_get_specific_options()
506 ISP_SPI_PC(isp, chan)->iid = tval; in isp_get_specific_options()
508 isp->isp_confopts |= ISP_CFG_OWNLOOPID; in isp_get_specific_options()
511 if (IS_SCSI(isp)) in isp_get_specific_options()
533 ISP_FC_PC(isp, chan)->def_role = tval; in isp_get_specific_options()
539 isp->isp_confopts |= ISP_CFG_FULL_DUPLEX; in isp_get_specific_options()
546 isp->isp_confopts |= ISP_CFG_LPORT; in isp_get_specific_options()
548 isp->isp_confopts |= ISP_CFG_NPORT; in isp_get_specific_options()
550 isp->isp_confopts |= ISP_CFG_LPORT_ONLY; in isp_get_specific_options()
552 isp->isp_confopts |= ISP_CFG_NPORT_ONLY; in isp_get_specific_options()
557 isp->isp_confopts |= ISP_CFG_NOFCTAPE; in isp_get_specific_options()
559 isp->isp_confopts |= ISP_CFG_FCTAPE; in isp_get_specific_options()
567 isp->isp_confopts &= ~ISP_CFG_FCTAPE; in isp_get_specific_options()
568 isp->isp_confopts |= ISP_CFG_NOFCTAPE; in isp_get_specific_options()
576 isp->isp_confopts &= ~ISP_CFG_NOFCTAPE; in isp_get_specific_options()
577 isp->isp_confopts |= ISP_CFG_FCTAPE; in isp_get_specific_options()
595 ISP_FC_PC(isp, chan)->def_wwpn = strtouq(sptr, &eptr, 16); in isp_get_specific_options()
596 if (eptr < sptr + 16 || ISP_FC_PC(isp, chan)->def_wwpn == -1) { in isp_get_specific_options()
598 ISP_FC_PC(isp, chan)->def_wwpn = 0; in isp_get_specific_options()
608 ISP_FC_PC(isp, chan)->def_wwnn = strtouq(sptr, &eptr, 16); in isp_get_specific_options()
609 if (eptr < sptr + 16 || ISP_FC_PC(isp, chan)->def_wwnn == 0) { in isp_get_specific_options()
611 ISP_FC_PC(isp, chan)->def_wwnn = 0; in isp_get_specific_options()
620 ISP_FC_PC(isp, chan)->loop_down_limit = tval; in isp_get_specific_options()
622 ISP_FC_PC(isp, chan)->loop_down_limit = isp_loop_down_limit; in isp_get_specific_options()
630 ISP_FC_PC(isp, chan)->gone_device_time = tval; in isp_get_specific_options()
632 ISP_FC_PC(isp, chan)->gone_device_time = isp_gone_device_time; in isp_get_specific_options()
640 ispsoftc_t *isp = &pcs->pci_isp; in isp_pci_attach() local
647 isp->isp_dev = dev; in isp_pci_attach()
648 isp->isp_nchan = 1; in isp_pci_attach()
649 mtx_init(&isp->isp_lock, "isp", NULL, MTX_DEF); in isp_pci_attach()
655 isp_get_generic_options(dev, isp); in isp_pci_attach()
671 isp->isp_mdvec = &mdvec; in isp_pci_attach()
672 isp->isp_type = ISP_HA_SCSI_UNKNOWN; in isp_pci_attach()
676 isp->isp_mdvec = &mdvec_1080; in isp_pci_attach()
677 isp->isp_type = ISP_HA_SCSI_1080; in isp_pci_attach()
682 isp->isp_mdvec = &mdvec_1080; in isp_pci_attach()
683 isp->isp_type = ISP_HA_SCSI_1240; in isp_pci_attach()
684 isp->isp_nchan = 2; in isp_pci_attach()
689 isp->isp_mdvec = &mdvec_1080; in isp_pci_attach()
690 isp->isp_type = ISP_HA_SCSI_1280; in isp_pci_attach()
695 isp->isp_mdvec = &mdvec_12160; in isp_pci_attach()
696 isp->isp_type = ISP_HA_SCSI_10160; in isp_pci_attach()
701 isp->isp_nchan = 2; in isp_pci_attach()
702 isp->isp_mdvec = &mdvec_12160; in isp_pci_attach()
703 isp->isp_type = ISP_HA_SCSI_12160; in isp_pci_attach()
708 isp->isp_mdvec = &mdvec_2100; in isp_pci_attach()
709 isp->isp_type = ISP_HA_FC_2100; in isp_pci_attach()
723 isp->isp_mdvec = &mdvec_2200; in isp_pci_attach()
724 isp->isp_type = ISP_HA_FC_2200; in isp_pci_attach()
729 isp->isp_mdvec = &mdvec_2300; in isp_pci_attach()
730 isp->isp_type = ISP_HA_FC_2300; in isp_pci_attach()
736 isp->isp_mdvec = &mdvec_2300; in isp_pci_attach()
737 isp->isp_type = ISP_HA_FC_2312; in isp_pci_attach()
743 isp->isp_mdvec = &mdvec_2300; in isp_pci_attach()
744 isp->isp_type = ISP_HA_FC_2322; in isp_pci_attach()
750 isp->isp_nchan += isp_nvports; in isp_pci_attach()
751 isp->isp_mdvec = &mdvec_2400; in isp_pci_attach()
752 isp->isp_type = ISP_HA_FC_2400; in isp_pci_attach()
757 isp->isp_nchan += isp_nvports; in isp_pci_attach()
758 isp->isp_mdvec = &mdvec_2500; in isp_pci_attach()
759 isp->isp_type = ISP_HA_FC_2500; in isp_pci_attach()
764 isp->isp_mdvec = &mdvec_2500; in isp_pci_attach()
765 isp->isp_type = ISP_HA_FC_2500; in isp_pci_attach()
771 isp->isp_nchan += isp_nvports; in isp_pci_attach()
772 isp->isp_mdvec = &mdvec_2600; in isp_pci_attach()
773 isp->isp_type = ISP_HA_FC_2600; in isp_pci_attach()
781 isp->isp_nchan += isp_nvports; in isp_pci_attach()
782 isp->isp_mdvec = &mdvec_2700; in isp_pci_attach()
783 isp->isp_type = ISP_HA_FC_2700; in isp_pci_attach()
791 isp->isp_revision = pci_get_revid(dev); in isp_pci_attach()
793 if (IS_26XX(isp)) { in isp_pci_attach()
826 isp->isp_regs = pcs->regs; in isp_pci_attach()
827 isp->isp_regs2 = pcs->regs2; in isp_pci_attach()
829 if (IS_FC(isp)) { in isp_pci_attach()
836 psize *= isp->isp_nchan; in isp_pci_attach()
837 xsize *= isp->isp_nchan; in isp_pci_attach()
838 isp->isp_param = malloc(psize, M_DEVBUF, M_NOWAIT | M_ZERO); in isp_pci_attach()
839 if (isp->isp_param == NULL) { in isp_pci_attach()
843 isp->isp_osinfo.pc.ptr = malloc(xsize, M_DEVBUF, M_NOWAIT | M_ZERO); in isp_pci_attach()
844 if (isp->isp_osinfo.pc.ptr == NULL) { in isp_pci_attach()
852 for (i = 0; i < isp->isp_nchan; i++) { in isp_pci_attach()
853 isp_get_specific_options(dev, i, isp); in isp_pci_attach()
856 isp->isp_osinfo.fw = NULL; in isp_pci_attach()
857 if (isp->isp_osinfo.fw == NULL) { in isp_pci_attach()
859 isp->isp_osinfo.fw = firmware_get(fwname); in isp_pci_attach()
861 if (isp->isp_osinfo.fw != NULL) { in isp_pci_attach()
862 isp_prt(isp, ISP_LOGCONFIG, "loaded firmware %s", fwname); in isp_pci_attach()
863 isp->isp_mdvec->dv_ispfw = isp->isp_osinfo.fw->data; in isp_pci_attach()
871 if (IS_2300(isp)) { /* per QLogic errata */ in isp_pci_attach()
874 if (IS_2322(isp) || pci_get_devid(dev) == PCI_QLOGIC_ISP6312) { in isp_pci_attach()
877 if (IS_24XX(isp)) { in isp_pci_attach()
887 isp_prt(isp, ISP_LOGDEBUG0, "set PCI line size to %d from %d", linesz, data); in isp_pci_attach()
898 isp_prt(isp, ISP_LOGDEBUG0, "set PCI latency to %d", data); in isp_pci_attach()
912 if (IS_23XX(isp) || IS_24XX(isp)) { in isp_pci_attach()
913 isp->isp_port = pci_get_function(dev); in isp_pci_attach()
919 ISP_LOCK(isp); in isp_pci_attach()
920 if (isp_reinit(isp, 1) != 0) { in isp_pci_attach()
921 ISP_UNLOCK(isp); in isp_pci_attach()
924 ISP_UNLOCK(isp); in isp_pci_attach()
925 if (isp_attach(isp)) { in isp_pci_attach()
926 ISP_LOCK(isp); in isp_pci_attach()
927 isp_shutdown(isp); in isp_pci_attach()
928 ISP_UNLOCK(isp); in isp_pci_attach()
934 for (i = 0; i < isp->isp_nirq; i++) { in isp_pci_attach()
956 mtx_destroy(&isp->isp_lock); in isp_pci_attach()
964 ispsoftc_t *isp = &pcs->pci_isp; in isp_pci_detach() local
967 status = isp_detach(isp); in isp_pci_detach()
970 ISP_LOCK(isp); in isp_pci_detach()
971 isp_shutdown(isp); in isp_pci_detach()
972 ISP_UNLOCK(isp); in isp_pci_detach()
973 for (i = 0; i < isp->isp_nirq; i++) { in isp_pci_detach()
985 isp_pci_mbxdmafree(isp); in isp_pci_detach()
994 mtx_destroy(&isp->isp_lock); in isp_pci_detach()
1002 #define BXR2(isp, off) bus_read_2((isp)->isp_regs, (off)) argument
1003 #define BXW2(isp, off, v) bus_write_2((isp)->isp_regs, (off), (v)) argument
1004 #define BXR4(isp, off) bus_read_4((isp)->isp_regs, (off)) argument
1005 #define BXW4(isp, off, v) bus_write_4((isp)->isp_regs, (off), (v)) argument
1006 #define B2R4(isp, off) bus_read_4((isp)->isp_regs2, (off)) argument
1007 #define B2W4(isp, off, v) bus_write_4((isp)->isp_regs2, (off), (v)) argument
1010 isp_pci_rd_debounced(ispsoftc_t *isp, int off) in isp_pci_rd_debounced() argument
1014 val = BXR2(isp, IspVirt2Off(isp, off)); in isp_pci_rd_debounced()
1017 val = BXR2(isp, IspVirt2Off(isp, off)); in isp_pci_rd_debounced()
1023 isp_pci_run_isr(ispsoftc_t *isp) in isp_pci_run_isr() argument
1027 if (IS_2100(isp)) { in isp_pci_run_isr()
1028 isr = isp_pci_rd_debounced(isp, BIU_ISR); in isp_pci_run_isr()
1029 sema = isp_pci_rd_debounced(isp, BIU_SEMA); in isp_pci_run_isr()
1031 isr = BXR2(isp, IspVirt2Off(isp, BIU_ISR)); in isp_pci_run_isr()
1032 sema = BXR2(isp, IspVirt2Off(isp, BIU_SEMA)); in isp_pci_run_isr()
1034 isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema); in isp_pci_run_isr()
1035 isr &= INT_PENDING_MASK(isp); in isp_pci_run_isr()
1040 if (IS_2100(isp)) in isp_pci_run_isr()
1041 info = isp_pci_rd_debounced(isp, OUTMAILBOX0); in isp_pci_run_isr()
1043 info = BXR2(isp, IspVirt2Off(isp, OUTMAILBOX0)); in isp_pci_run_isr()
1045 isp_intr_mbox(isp, info); in isp_pci_run_isr()
1047 isp_intr_async(isp, info); in isp_pci_run_isr()
1048 if (!IS_FC(isp) && isp->isp_state == ISP_RUNSTATE) in isp_pci_run_isr()
1049 isp_intr_respq(isp); in isp_pci_run_isr()
1051 isp_intr_respq(isp); in isp_pci_run_isr()
1052 ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT); in isp_pci_run_isr()
1054 ISP_WRITE(isp, BIU_SEMA, 0); in isp_pci_run_isr()
1058 isp_pci_run_isr_2300(ispsoftc_t *isp) in isp_pci_run_isr_2300() argument
1063 if ((BXR2(isp, IspVirt2Off(isp, BIU_ISR)) & BIU2100_ISR_RISC_INT) == 0) in isp_pci_run_isr_2300()
1065 r2hisr = BXR4(isp, IspVirt2Off(isp, BIU_R2HSTSLO)); in isp_pci_run_isr_2300()
1066 isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr); in isp_pci_run_isr_2300()
1076 isp_intr_mbox(isp, info); in isp_pci_run_isr_2300()
1079 isp_intr_async(isp, info); in isp_pci_run_isr_2300()
1082 isp_intr_async(isp, ASYNC_RIO16_1); in isp_pci_run_isr_2300()
1085 isp_intr_async(isp, ASYNC_CMD_CMPLT); in isp_pci_run_isr_2300()
1088 isp_intr_async(isp, ASYNC_CTIO_DONE); in isp_pci_run_isr_2300()
1091 isp_intr_respq(isp); in isp_pci_run_isr_2300()
1094 hccr = ISP_READ(isp, HCCR); in isp_pci_run_isr_2300()
1096 ISP_WRITE(isp, HCCR, HCCR_RESET); in isp_pci_run_isr_2300()
1097 isp_prt(isp, ISP_LOGERR, "RISC paused at interrupt (%x->%x)", hccr, ISP_READ(isp, HCCR)); in isp_pci_run_isr_2300()
1098 ISP_WRITE(isp, BIU_ICR, 0); in isp_pci_run_isr_2300()
1100 isp_prt(isp, ISP_LOGERR, "unknown interrupt 0x%x\n", r2hisr); in isp_pci_run_isr_2300()
1103 ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT); in isp_pci_run_isr_2300()
1104 ISP_WRITE(isp, BIU_SEMA, 0); in isp_pci_run_isr_2300()
1108 isp_pci_run_isr_2400(ispsoftc_t *isp) in isp_pci_run_isr_2400() argument
1113 r2hisr = BXR4(isp, IspVirt2Off(isp, BIU2400_R2HSTSLO)); in isp_pci_run_isr_2400()
1114 isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr); in isp_pci_run_isr_2400()
1124 isp_intr_mbox(isp, info); in isp_pci_run_isr_2400()
1127 isp_intr_async(isp, info); in isp_pci_run_isr_2400()
1130 isp_intr_respq(isp); in isp_pci_run_isr_2400()
1136 isp_intr_respq(isp); in isp_pci_run_isr_2400()
1141 isp_intr_atioq(isp); in isp_pci_run_isr_2400()
1145 isp_prt(isp, ISP_LOGERR, "unknown interrupt 0x%x\n", r2hisr); in isp_pci_run_isr_2400()
1147 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT); in isp_pci_run_isr_2400()
1151 isp_pci_rd_reg(ispsoftc_t *isp, int regoff) in isp_pci_rd_reg() argument
1160 oldconf = BXR2(isp, IspVirt2Off(isp, BIU_CONF1)); in isp_pci_rd_reg()
1161 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oldconf | BIU_PCI_CONF1_SXP); in isp_pci_rd_reg()
1162 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_rd_reg()
1164 rv = BXR2(isp, IspVirt2Off(isp, regoff)); in isp_pci_rd_reg()
1166 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oldconf); in isp_pci_rd_reg()
1167 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_rd_reg()
1173 isp_pci_wr_reg(ispsoftc_t *isp, int regoff, uint32_t val) in isp_pci_wr_reg() argument
1181 oldconf = BXR2(isp, IspVirt2Off(isp, BIU_CONF1)); in isp_pci_wr_reg()
1182 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), in isp_pci_wr_reg()
1184 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_wr_reg()
1186 BXW2(isp, IspVirt2Off(isp, regoff), val); in isp_pci_wr_reg()
1187 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2, -1); in isp_pci_wr_reg()
1189 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oldconf); in isp_pci_wr_reg()
1190 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_wr_reg()
1196 isp_pci_rd_reg_1080(ispsoftc_t *isp, int regoff) in isp_pci_rd_reg_1080() argument
1205 oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1)); in isp_pci_rd_reg_1080()
1211 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), tc); in isp_pci_rd_reg_1080()
1212 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_rd_reg_1080()
1214 oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1)); in isp_pci_rd_reg_1080()
1215 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), in isp_pci_rd_reg_1080()
1217 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_rd_reg_1080()
1219 rv = BXR2(isp, IspVirt2Off(isp, regoff)); in isp_pci_rd_reg_1080()
1221 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oc); in isp_pci_rd_reg_1080()
1222 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_rd_reg_1080()
1228 isp_pci_wr_reg_1080(ispsoftc_t *isp, int regoff, uint32_t val) in isp_pci_wr_reg_1080() argument
1237 oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1)); in isp_pci_wr_reg_1080()
1243 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), tc); in isp_pci_wr_reg_1080()
1244 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_wr_reg_1080()
1246 oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1)); in isp_pci_wr_reg_1080()
1247 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), in isp_pci_wr_reg_1080()
1249 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_wr_reg_1080()
1251 BXW2(isp, IspVirt2Off(isp, regoff), val); in isp_pci_wr_reg_1080()
1252 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2, -1); in isp_pci_wr_reg_1080()
1254 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oc); in isp_pci_wr_reg_1080()
1255 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1); in isp_pci_wr_reg_1080()
1260 isp_pci_rd_reg_2400(ispsoftc_t *isp, int regoff) in isp_pci_rd_reg_2400() argument
1269 return (BXR2(isp, IspVirt2Off(isp, regoff))); in isp_pci_rd_reg_2400()
1271 isp_prt(isp, ISP_LOGERR, "SXP_BLOCK read at 0x%x", regoff); in isp_pci_rd_reg_2400()
1274 isp_prt(isp, ISP_LOGERR, "RISC_BLOCK read at 0x%x", regoff); in isp_pci_rd_reg_2400()
1277 isp_prt(isp, ISP_LOGERR, "DMA_BLOCK read at 0x%x", regoff); in isp_pci_rd_reg_2400()
1280 isp_prt(isp, ISP_LOGERR, "unknown block read at 0x%x", regoff); in isp_pci_rd_reg_2400()
1302 rv = BXR4(isp, IspVirt2Off(isp, regoff)); in isp_pci_rd_reg_2400()
1305 rv = BXR4(isp, IspVirt2Off(isp, regoff)); in isp_pci_rd_reg_2400()
1308 rv = BXR4(isp, IspVirt2Off(isp, regoff)) >> 16; in isp_pci_rd_reg_2400()
1311 isp_prt(isp, ISP_LOGERR, "unknown register read at 0x%x", in isp_pci_rd_reg_2400()
1320 isp_pci_wr_reg_2400(ispsoftc_t *isp, int regoff, uint32_t val) in isp_pci_wr_reg_2400() argument
1328 BXW2(isp, IspVirt2Off(isp, regoff), val); in isp_pci_wr_reg_2400()
1329 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2, -1); in isp_pci_wr_reg_2400()
1332 isp_prt(isp, ISP_LOGERR, "SXP_BLOCK write at 0x%x", regoff); in isp_pci_wr_reg_2400()
1335 isp_prt(isp, ISP_LOGERR, "RISC_BLOCK write at 0x%x", regoff); in isp_pci_wr_reg_2400()
1338 isp_prt(isp, ISP_LOGERR, "DMA_BLOCK write at 0x%x", regoff); in isp_pci_wr_reg_2400()
1341 isp_prt(isp, ISP_LOGERR, "unknown block write at 0x%x", regoff); in isp_pci_wr_reg_2400()
1363 BXW4(isp, IspVirt2Off(isp, regoff), val); in isp_pci_wr_reg_2400()
1369 MEMORYBARRIERW(isp, SYNC_REG, in isp_pci_wr_reg_2400()
1370 IspVirt2Off(isp, regoff), 4, -1) in isp_pci_wr_reg_2400()
1373 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 4, -1); in isp_pci_wr_reg_2400()
1376 isp_prt(isp, ISP_LOGERR, "unknown register write at 0x%x", in isp_pci_wr_reg_2400()
1383 isp_pci_rd_reg_2600(ispsoftc_t *isp, int regoff) in isp_pci_rd_reg_2600() argument
1390 isp_prt(isp, ISP_LOGERR, "unknown register read at 0x%x", in isp_pci_rd_reg_2600()
1395 rv = B2R4(isp, 0x00); in isp_pci_rd_reg_2600()
1398 rv = B2R4(isp, 0x04); in isp_pci_rd_reg_2600()
1401 rv = B2R4(isp, 0x08); in isp_pci_rd_reg_2600()
1404 rv = B2R4(isp, 0x0c); in isp_pci_rd_reg_2600()
1407 rv = B2R4(isp, 0x10); in isp_pci_rd_reg_2600()
1410 rv = B2R4(isp, 0x14); in isp_pci_rd_reg_2600()
1413 rv = isp_pci_rd_reg_2400(isp, regoff); in isp_pci_rd_reg_2600()
1420 isp_pci_wr_reg_2600(ispsoftc_t *isp, int regoff, uint32_t val) in isp_pci_wr_reg_2600() argument
1427 isp_prt(isp, ISP_LOGERR, "unknown register write at 0x%x", in isp_pci_wr_reg_2600()
1449 isp_pci_wr_reg_2400(isp, regoff, val); in isp_pci_wr_reg_2600()
1452 B2W4(isp, off, val); in isp_pci_wr_reg_2600()
1471 isp_pci_mbxdma(ispsoftc_t *isp) in isp_pci_mbxdma() argument
1483 if (isp->isp_xflist != NULL) in isp_pci_mbxdma()
1485 if (isp->isp_rquest != NULL && isp->isp_maxcmds == 0) in isp_pci_mbxdma()
1487 ISP_UNLOCK(isp); in isp_pci_mbxdma()
1488 if (isp->isp_rquest != NULL) in isp_pci_mbxdma()
1492 if (IS_ULTRA2(isp) || IS_FC(isp) || IS_1240(isp)) { in isp_pci_mbxdma()
1507 if (bus_dma_tag_create(bus_get_dma_tag(ISP_PCD(isp)), 1, in isp_pci_mbxdma()
1509 busdma_lock_mutex, &isp->isp_lock, &isp->isp_osinfo.dmat)) { in isp_pci_mbxdma()
1510 ISP_LOCK(isp); in isp_pci_mbxdma()
1511 isp_prt(isp, ISP_LOGERR, "could not create master dma tag"); in isp_pci_mbxdma()
1519 len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); in isp_pci_mbxdma()
1520 if (isp->isp_type >= ISP_HA_FC_2200) in isp_pci_mbxdma()
1522 if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, in isp_pci_mbxdma()
1524 len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, in isp_pci_mbxdma()
1525 &isp->isp_osinfo.reqdmat)) { in isp_pci_mbxdma()
1526 isp_prt(isp, ISP_LOGERR, "cannot create request DMA tag"); in isp_pci_mbxdma()
1529 if (bus_dmamem_alloc(isp->isp_osinfo.reqdmat, (void **)&base, in isp_pci_mbxdma()
1530 BUS_DMA_COHERENT, &isp->isp_osinfo.reqmap) != 0) { in isp_pci_mbxdma()
1531 isp_prt(isp, ISP_LOGERR, "cannot allocate request DMA memory"); in isp_pci_mbxdma()
1532 bus_dma_tag_destroy(isp->isp_osinfo.reqdmat); in isp_pci_mbxdma()
1535 isp->isp_rquest = base; in isp_pci_mbxdma()
1537 if (bus_dmamap_load(isp->isp_osinfo.reqdmat, isp->isp_osinfo.reqmap, in isp_pci_mbxdma()
1539 isp_prt(isp, ISP_LOGERR, "error loading request DMA map %d", im.error); in isp_pci_mbxdma()
1542 isp_prt(isp, ISP_LOGDEBUG0, "request area @ 0x%jx/0x%jx", in isp_pci_mbxdma()
1544 isp->isp_rquest_dma = im.maddr; in isp_pci_mbxdma()
1545 base += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); in isp_pci_mbxdma()
1546 im.maddr += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); in isp_pci_mbxdma()
1547 if (isp->isp_type >= ISP_HA_FC_2200) { in isp_pci_mbxdma()
1548 isp->isp_osinfo.ecmd_dma = im.maddr; in isp_pci_mbxdma()
1549 isp->isp_osinfo.ecmd_free = (isp_ecmd_t *)base; in isp_pci_mbxdma()
1550 isp->isp_osinfo.ecmd_base = isp->isp_osinfo.ecmd_free; in isp_pci_mbxdma()
1551 for (ecmd = isp->isp_osinfo.ecmd_free; in isp_pci_mbxdma()
1552 ecmd < &isp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) { in isp_pci_mbxdma()
1553 if (ecmd == &isp->isp_osinfo.ecmd_free[N_XCMDS - 1]) in isp_pci_mbxdma()
1563 len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); in isp_pci_mbxdma()
1564 if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, in isp_pci_mbxdma()
1566 len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, in isp_pci_mbxdma()
1567 &isp->isp_osinfo.respdmat)) { in isp_pci_mbxdma()
1568 isp_prt(isp, ISP_LOGERR, "cannot create response DMA tag"); in isp_pci_mbxdma()
1571 if (bus_dmamem_alloc(isp->isp_osinfo.respdmat, (void **)&base, in isp_pci_mbxdma()
1572 BUS_DMA_COHERENT, &isp->isp_osinfo.respmap) != 0) { in isp_pci_mbxdma()
1573 isp_prt(isp, ISP_LOGERR, "cannot allocate response DMA memory"); in isp_pci_mbxdma()
1574 bus_dma_tag_destroy(isp->isp_osinfo.respdmat); in isp_pci_mbxdma()
1577 isp->isp_result = base; in isp_pci_mbxdma()
1579 if (bus_dmamap_load(isp->isp_osinfo.respdmat, isp->isp_osinfo.respmap, in isp_pci_mbxdma()
1581 isp_prt(isp, ISP_LOGERR, "error loading response DMA map %d", im.error); in isp_pci_mbxdma()
1584 isp_prt(isp, ISP_LOGDEBUG0, "response area @ 0x%jx/0x%jx", in isp_pci_mbxdma()
1586 isp->isp_result_dma = im.maddr; in isp_pci_mbxdma()
1592 if (IS_24XX(isp)) { in isp_pci_mbxdma()
1593 len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); in isp_pci_mbxdma()
1594 if (bus_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim, in isp_pci_mbxdma()
1596 len, 1, len, 0, busdma_lock_mutex, &isp->isp_lock, in isp_pci_mbxdma()
1597 &isp->isp_osinfo.atiodmat)) { in isp_pci_mbxdma()
1598 isp_prt(isp, ISP_LOGERR, "cannot create ATIO DMA tag"); in isp_pci_mbxdma()
1601 if (bus_dmamem_alloc(isp->isp_osinfo.atiodmat, (void **)&base, in isp_pci_mbxdma()
1602 BUS_DMA_COHERENT, &isp->isp_osinfo.atiomap) != 0) { in isp_pci_mbxdma()
1603 isp_prt(isp, ISP_LOGERR, "cannot allocate ATIO DMA memory"); in isp_pci_mbxdma()
1604 bus_dma_tag_destroy(isp->isp_osinfo.atiodmat); in isp_pci_mbxdma()
1607 isp->isp_atioq = base; in isp_pci_mbxdma()
1609 if (bus_dmamap_load(isp->isp_osinfo.atiodmat, isp->isp_osinfo.atiomap, in isp_pci_mbxdma()
1611 isp_prt(isp, ISP_LOGERR, "error loading ATIO DMA map %d", im.error); in isp_pci_mbxdma()
1614 isp_prt(isp, ISP_LOGDEBUG0, "ATIO area @ 0x%jx/0x%jx", in isp_pci_mbxdma()
1616 isp->isp_atioq_dma = im.maddr; in isp_pci_mbxdma()
1620 if (IS_FC(isp)) { in isp_pci_mbxdma()
1621 if (bus_dma_tag_create(isp->isp_osinfo.dmat, 64, slim, in isp_pci_mbxdma()
1624 &isp->isp_lock, &isp->isp_osinfo.iocbdmat)) { in isp_pci_mbxdma()
1627 if (bus_dmamem_alloc(isp->isp_osinfo.iocbdmat, in isp_pci_mbxdma()
1628 (void **)&base, BUS_DMA_COHERENT, &isp->isp_osinfo.iocbmap) != 0) in isp_pci_mbxdma()
1630 isp->isp_iocb = base; in isp_pci_mbxdma()
1632 if (bus_dmamap_load(isp->isp_osinfo.iocbdmat, isp->isp_osinfo.iocbmap, in isp_pci_mbxdma()
1635 isp->isp_iocb_dma = im.maddr; in isp_pci_mbxdma()
1637 if (bus_dma_tag_create(isp->isp_osinfo.dmat, 64, slim, in isp_pci_mbxdma()
1640 &isp->isp_lock, &isp->isp_osinfo.scdmat)) in isp_pci_mbxdma()
1642 for (cmap = 0; cmap < isp->isp_nchan; cmap++) { in isp_pci_mbxdma()
1643 struct isp_fc *fc = ISP_FC_PC(isp, cmap); in isp_pci_mbxdma()
1644 if (bus_dmamem_alloc(isp->isp_osinfo.scdmat, in isp_pci_mbxdma()
1647 FCPARAM(isp, cmap)->isp_scratch = base; in isp_pci_mbxdma()
1649 if (bus_dmamap_load(isp->isp_osinfo.scdmat, fc->scmap, in isp_pci_mbxdma()
1651 bus_dmamem_free(isp->isp_osinfo.scdmat, in isp_pci_mbxdma()
1653 FCPARAM(isp, cmap)->isp_scratch = NULL; in isp_pci_mbxdma()
1656 FCPARAM(isp, cmap)->isp_scdma = im.maddr; in isp_pci_mbxdma()
1657 if (!IS_2100(isp)) { in isp_pci_mbxdma()
1675 if (isp->isp_maxcmds == 0) { in isp_pci_mbxdma()
1676 ISP_LOCK(isp); in isp_pci_mbxdma()
1681 len = isp->isp_maxcmds * sizeof (struct isp_pcmd); in isp_pci_mbxdma()
1682 isp->isp_osinfo.pcmd_pool = (struct isp_pcmd *) in isp_pci_mbxdma()
1684 for (i = 0; i < isp->isp_maxcmds; i++) { in isp_pci_mbxdma()
1685 struct isp_pcmd *pcmd = &isp->isp_osinfo.pcmd_pool[i]; in isp_pci_mbxdma()
1686 error = bus_dmamap_create(isp->isp_osinfo.dmat, 0, &pcmd->dmap); in isp_pci_mbxdma()
1688 isp_prt(isp, ISP_LOGERR, "error %d creating per-cmd DMA maps", error); in isp_pci_mbxdma()
1690 bus_dmamap_destroy(isp->isp_osinfo.dmat, in isp_pci_mbxdma()
1691 isp->isp_osinfo.pcmd_pool[i].dmap); in isp_pci_mbxdma()
1695 callout_init_mtx(&pcmd->wdog, &isp->isp_lock, 0); in isp_pci_mbxdma()
1696 if (i == isp->isp_maxcmds-1) in isp_pci_mbxdma()
1699 pcmd->next = &isp->isp_osinfo.pcmd_pool[i+1]; in isp_pci_mbxdma()
1701 isp->isp_osinfo.pcmd_free = &isp->isp_osinfo.pcmd_pool[0]; in isp_pci_mbxdma()
1703 len = sizeof (isp_hdl_t) * isp->isp_maxcmds; in isp_pci_mbxdma()
1704 isp->isp_xflist = (isp_hdl_t *) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO); in isp_pci_mbxdma()
1705 for (len = 0; len < isp->isp_maxcmds - 1; len++) in isp_pci_mbxdma()
1706 isp->isp_xflist[len].cmd = &isp->isp_xflist[len+1]; in isp_pci_mbxdma()
1707 isp->isp_xffree = isp->isp_xflist; in isp_pci_mbxdma()
1709 ISP_LOCK(isp); in isp_pci_mbxdma()
1713 isp_pci_mbxdmafree(isp); in isp_pci_mbxdma()
1714 ISP_LOCK(isp); in isp_pci_mbxdma()
1719 isp_pci_mbxdmafree(ispsoftc_t *isp) in isp_pci_mbxdmafree() argument
1723 if (isp->isp_xflist != NULL) { in isp_pci_mbxdmafree()
1724 free(isp->isp_xflist, M_DEVBUF); in isp_pci_mbxdmafree()
1725 isp->isp_xflist = NULL; in isp_pci_mbxdmafree()
1727 if (isp->isp_osinfo.pcmd_pool != NULL) { in isp_pci_mbxdmafree()
1728 for (i = 0; i < isp->isp_maxcmds; i++) { in isp_pci_mbxdmafree()
1729 bus_dmamap_destroy(isp->isp_osinfo.dmat, in isp_pci_mbxdmafree()
1730 isp->isp_osinfo.pcmd_pool[i].dmap); in isp_pci_mbxdmafree()
1732 free(isp->isp_osinfo.pcmd_pool, M_DEVBUF); in isp_pci_mbxdmafree()
1733 isp->isp_osinfo.pcmd_pool = NULL; in isp_pci_mbxdmafree()
1735 if (IS_FC(isp)) { in isp_pci_mbxdmafree()
1736 for (i = 0; i < isp->isp_nchan; i++) { in isp_pci_mbxdmafree()
1737 struct isp_fc *fc = ISP_FC_PC(isp, i); in isp_pci_mbxdmafree()
1738 if (FCPARAM(isp, i)->isp_scdma != 0) { in isp_pci_mbxdmafree()
1739 bus_dmamap_unload(isp->isp_osinfo.scdmat, in isp_pci_mbxdmafree()
1741 FCPARAM(isp, i)->isp_scdma = 0; in isp_pci_mbxdmafree()
1743 if (FCPARAM(isp, i)->isp_scratch != NULL) { in isp_pci_mbxdmafree()
1744 bus_dmamem_free(isp->isp_osinfo.scdmat, in isp_pci_mbxdmafree()
1745 FCPARAM(isp, i)->isp_scratch, fc->scmap); in isp_pci_mbxdmafree()
1746 FCPARAM(isp, i)->isp_scratch = NULL; in isp_pci_mbxdmafree()
1754 if (isp->isp_iocb_dma != 0) { in isp_pci_mbxdmafree()
1755 bus_dma_tag_destroy(isp->isp_osinfo.scdmat); in isp_pci_mbxdmafree()
1756 bus_dmamap_unload(isp->isp_osinfo.iocbdmat, in isp_pci_mbxdmafree()
1757 isp->isp_osinfo.iocbmap); in isp_pci_mbxdmafree()
1758 isp->isp_iocb_dma = 0; in isp_pci_mbxdmafree()
1760 if (isp->isp_iocb != NULL) { in isp_pci_mbxdmafree()
1761 bus_dmamem_free(isp->isp_osinfo.iocbdmat, in isp_pci_mbxdmafree()
1762 isp->isp_iocb, isp->isp_osinfo.iocbmap); in isp_pci_mbxdmafree()
1763 bus_dma_tag_destroy(isp->isp_osinfo.iocbdmat); in isp_pci_mbxdmafree()
1767 if (IS_24XX(isp)) { in isp_pci_mbxdmafree()
1768 if (isp->isp_atioq_dma != 0) { in isp_pci_mbxdmafree()
1769 bus_dmamap_unload(isp->isp_osinfo.atiodmat, in isp_pci_mbxdmafree()
1770 isp->isp_osinfo.atiomap); in isp_pci_mbxdmafree()
1771 isp->isp_atioq_dma = 0; in isp_pci_mbxdmafree()
1773 if (isp->isp_atioq != NULL) { in isp_pci_mbxdmafree()
1774 bus_dmamem_free(isp->isp_osinfo.atiodmat, isp->isp_atioq, in isp_pci_mbxdmafree()
1775 isp->isp_osinfo.atiomap); in isp_pci_mbxdmafree()
1776 bus_dma_tag_destroy(isp->isp_osinfo.atiodmat); in isp_pci_mbxdmafree()
1777 isp->isp_atioq = NULL; in isp_pci_mbxdmafree()
1781 if (isp->isp_result_dma != 0) { in isp_pci_mbxdmafree()
1782 bus_dmamap_unload(isp->isp_osinfo.respdmat, in isp_pci_mbxdmafree()
1783 isp->isp_osinfo.respmap); in isp_pci_mbxdmafree()
1784 isp->isp_result_dma = 0; in isp_pci_mbxdmafree()
1786 if (isp->isp_result != NULL) { in isp_pci_mbxdmafree()
1787 bus_dmamem_free(isp->isp_osinfo.respdmat, isp->isp_result, in isp_pci_mbxdmafree()
1788 isp->isp_osinfo.respmap); in isp_pci_mbxdmafree()
1789 bus_dma_tag_destroy(isp->isp_osinfo.respdmat); in isp_pci_mbxdmafree()
1790 isp->isp_result = NULL; in isp_pci_mbxdmafree()
1792 if (isp->isp_rquest_dma != 0) { in isp_pci_mbxdmafree()
1793 bus_dmamap_unload(isp->isp_osinfo.reqdmat, in isp_pci_mbxdmafree()
1794 isp->isp_osinfo.reqmap); in isp_pci_mbxdmafree()
1795 isp->isp_rquest_dma = 0; in isp_pci_mbxdmafree()
1797 if (isp->isp_rquest != NULL) { in isp_pci_mbxdmafree()
1798 bus_dmamem_free(isp->isp_osinfo.reqdmat, isp->isp_rquest, in isp_pci_mbxdmafree()
1799 isp->isp_osinfo.reqmap); in isp_pci_mbxdmafree()
1800 bus_dma_tag_destroy(isp->isp_osinfo.reqdmat); in isp_pci_mbxdmafree()
1801 isp->isp_rquest = NULL; in isp_pci_mbxdmafree()
1806 ispsoftc_t *isp; member
1818 ispsoftc_t *isp= mp->isp; in dma2() local
1841 bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, in dma2()
1845 error = isp_send_cmd(isp, mp->rq, dm_segs, nseg, XS_XFRLEN(csio), in dma2()
1860 isp_pci_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff) in isp_pci_dmasetup() argument
1866 mp->isp = isp; in isp_pci_dmasetup()
1871 error = bus_dmamap_load_ccb(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, in isp_pci_dmasetup()
1874 bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap); in isp_pci_dmasetup()
1876 isp_prt(isp, ISP_LOGERR, "deferred dma allocation not supported"); in isp_pci_dmasetup()
1879 isp_prt(isp, ISP_LOGERR, "error %d in dma mapping code", error); in isp_pci_dmasetup()
1900 isp_pci_irqsetup(ispsoftc_t *isp) in isp_pci_irqsetup() argument
1902 device_t dev = isp->isp_osinfo.dev; in isp_pci_irqsetup()
1908 if (isp->isp_nirq > 0) in isp_pci_irqsetup()
1911 ISP_UNLOCK(isp); in isp_pci_irqsetup()
1912 if (ISP_CAP_MSIX(isp)) { in isp_pci_irqsetup()
1913 max_irq = IS_26XX(isp) ? 3 : (IS_25XX(isp) ? 2 : 0); in isp_pci_irqsetup()
1947 f, isp, &pcs->irq[i].ih)) { in isp_pci_irqsetup()
1957 isp->isp_nirq = i + 1; in isp_pci_irqsetup()
1959 ISP_LOCK(isp); in isp_pci_irqsetup()
1961 return (isp->isp_nirq == 0); in isp_pci_irqsetup()
1965 isp_pci_dumpregs(ispsoftc_t *isp, const char *msg) in isp_pci_dumpregs() argument
1967 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp; in isp_pci_dumpregs()
1969 printf("%s: %s\n", device_get_nameunit(isp->isp_dev), msg); in isp_pci_dumpregs()
1971 printf("%s:\n", device_get_nameunit(isp->isp_dev)); in isp_pci_dumpregs()
1972 if (IS_SCSI(isp)) in isp_pci_dumpregs()
1973 printf(" biu_conf1=%x", ISP_READ(isp, BIU_CONF1)); in isp_pci_dumpregs()
1975 printf(" biu_csr=%x", ISP_READ(isp, BIU2100_CSR)); in isp_pci_dumpregs()
1976 printf(" biu_icr=%x biu_isr=%x biu_sema=%x ", ISP_READ(isp, BIU_ICR), in isp_pci_dumpregs()
1977 ISP_READ(isp, BIU_ISR), ISP_READ(isp, BIU_SEMA)); in isp_pci_dumpregs()
1978 printf("risc_hccr=%x\n", ISP_READ(isp, HCCR)); in isp_pci_dumpregs()
1981 if (IS_SCSI(isp)) { in isp_pci_dumpregs()
1982 ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE); in isp_pci_dumpregs()
1984 ISP_READ(isp, CDMA_CONF), ISP_READ(isp, CDMA_STATUS), in isp_pci_dumpregs()
1985 ISP_READ(isp, CDMA_FIFO_STS)); in isp_pci_dumpregs()
1987 ISP_READ(isp, DDMA_CONF), ISP_READ(isp, DDMA_STATUS), in isp_pci_dumpregs()
1988 ISP_READ(isp, DDMA_FIFO_STS)); in isp_pci_dumpregs()
1990 ISP_READ(isp, SXP_INTERRUPT), in isp_pci_dumpregs()
1991 ISP_READ(isp, SXP_GROSS_ERR), in isp_pci_dumpregs()
1992 ISP_READ(isp, SXP_PINS_CTRL)); in isp_pci_dumpregs()
1993 ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); in isp_pci_dumpregs()
1996 ISP_READ(isp, OUTMAILBOX0), ISP_READ(isp, OUTMAILBOX1), in isp_pci_dumpregs()
1997 ISP_READ(isp, OUTMAILBOX2), ISP_READ(isp, OUTMAILBOX3), in isp_pci_dumpregs()
1998 ISP_READ(isp, OUTMAILBOX4)); in isp_pci_dumpregs()