Lines Matching defs:isp

31 __FBSDID("$FreeBSD: releng/10.3/sys/dev/isp/isp_pci.c 292929 2015-12-30 11:54:37Z mav $");
54 #include <dev/isp/isp_freebsd.h>
371 #define ISP_PCD(isp) ((struct isp_pcisoftc *)isp)->pci_dev
402 "isp", isp_pci_methods, sizeof (struct isp_pcisoftc)
405 DRIVER_MODULE(isp, pci, isp_pci_driver, isp_devclass, 0, 0);
406 MODULE_DEPEND(isp, cam, 1, 1, 1);
407 MODULE_DEPEND(isp, firmware, 1, 1, 1);
492 isp_get_generic_options(device_t dev, ispsoftc_t *isp)
498 isp->isp_confopts |= ISP_CFG_NORELOAD;
502 isp->isp_confopts |= ISP_CFG_NONVRAM;
507 isp->isp_dblev = tval;
509 isp->isp_dblev = ISP_LOGWARN|ISP_LOGERR;
512 isp->isp_dblev |= ISP_LOGCONFIG|ISP_LOGINFO;
525 isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp)
538 if (IS_FC(isp)) {
539 ISP_FC_PC(isp, chan)->default_id = 109 - chan;
542 ISP_SPI_PC(isp, chan)->iid = OF_getscsinitid(dev);
544 ISP_SPI_PC(isp, chan)->iid = 7;
548 if (IS_FC(isp)) {
549 ISP_FC_PC(isp, chan)->default_id = tval - chan;
551 ISP_SPI_PC(isp, chan)->iid = tval;
553 isp->isp_confopts |= ISP_CFG_OWNLOOPID;
556 if (IS_SCSI(isp))
578 ISP_FC_PC(isp, chan)->def_role = tval;
584 isp->isp_confopts |= ISP_CFG_FULL_DUPLEX;
591 isp->isp_confopts |= ISP_CFG_LPORT;
593 isp->isp_confopts |= ISP_CFG_NPORT;
595 isp->isp_confopts |= ISP_CFG_LPORT_ONLY;
597 isp->isp_confopts |= ISP_CFG_NPORT_ONLY;
606 isp->isp_confopts |= ISP_CFG_NOFCTAPE;
614 isp->isp_confopts &= ~ISP_CFG_NOFCTAPE;
615 isp->isp_confopts |= ISP_CFG_FCTAPE;
633 ISP_FC_PC(isp, chan)->def_wwpn = strtouq(sptr, &eptr, 16);
634 if (eptr < sptr + 16 || ISP_FC_PC(isp, chan)->def_wwpn == -1) {
636 ISP_FC_PC(isp, chan)->def_wwpn = 0;
646 ISP_FC_PC(isp, chan)->def_wwnn = strtouq(sptr, &eptr, 16);
647 if (eptr < sptr + 16 || ISP_FC_PC(isp, chan)->def_wwnn == 0) {
649 ISP_FC_PC(isp, chan)->def_wwnn = 0;
658 ISP_FC_PC(isp, chan)->loop_down_limit = tval;
660 ISP_FC_PC(isp, chan)->loop_down_limit = isp_loop_down_limit;
668 ISP_FC_PC(isp, chan)->gone_device_time = tval;
670 ISP_FC_PC(isp, chan)->gone_device_time = isp_gone_device_time;
680 ispsoftc_t *isp;
692 isp = &pcs->pci_isp;
693 isp->isp_dev = dev;
694 isp->isp_nchan = 1;
696 isp->isp_osinfo.sixtyfourbit = 1;
702 isp_get_generic_options(dev, isp);
718 isp->isp_mdvec = &mdvec;
719 isp->isp_type = ISP_HA_SCSI_UNKNOWN;
723 isp->isp_mdvec = &mdvec_1080;
724 isp->isp_type = ISP_HA_SCSI_1080;
729 isp->isp_mdvec = &mdvec_1080;
730 isp->isp_type = ISP_HA_SCSI_1240;
731 isp->isp_nchan = 2;
736 isp->isp_mdvec = &mdvec_1080;
737 isp->isp_type = ISP_HA_SCSI_1280;
742 isp->isp_mdvec = &mdvec_12160;
743 isp->isp_type = ISP_HA_SCSI_10160;
748 isp->isp_nchan = 2;
749 isp->isp_mdvec = &mdvec_12160;
750 isp->isp_type = ISP_HA_SCSI_12160;
755 isp->isp_mdvec = &mdvec_2100;
756 isp->isp_type = ISP_HA_FC_2100;
770 isp->isp_mdvec = &mdvec_2200;
771 isp->isp_type = ISP_HA_FC_2200;
776 isp->isp_mdvec = &mdvec_2300;
777 isp->isp_type = ISP_HA_FC_2300;
783 isp->isp_mdvec = &mdvec_2300;
784 isp->isp_type = ISP_HA_FC_2312;
790 isp->isp_mdvec = &mdvec_2300;
791 isp->isp_type = ISP_HA_FC_2322;
797 isp->isp_nchan += isp_nvports;
798 isp->isp_mdvec = &mdvec_2400;
799 isp->isp_type = ISP_HA_FC_2400;
804 isp->isp_nchan += isp_nvports;
805 isp->isp_mdvec = &mdvec_2500;
806 isp->isp_type = ISP_HA_FC_2500;
811 isp->isp_mdvec = &mdvec_2500;
812 isp->isp_type = ISP_HA_FC_2500;
818 isp->isp_nchan += isp_nvports;
819 isp->isp_mdvec = &mdvec_2600;
820 isp->isp_type = ISP_HA_FC_2600;
828 isp->isp_revision = pci_get_revid(dev);
830 if (IS_26XX(isp)) {
863 isp->isp_regs = pcs->regs;
864 isp->isp_regs2 = pcs->regs2;
866 if (IS_FC(isp)) {
873 psize *= isp->isp_nchan;
874 xsize *= isp->isp_nchan;
875 isp->isp_param = malloc(psize, M_DEVBUF, M_NOWAIT | M_ZERO);
876 if (isp->isp_param == NULL) {
880 isp->isp_osinfo.pc.ptr = malloc(xsize, M_DEVBUF, M_NOWAIT | M_ZERO);
881 if (isp->isp_osinfo.pc.ptr == NULL) {
889 for (i = 0; i < isp->isp_nchan; i++) {
890 isp_get_specific_options(dev, i, isp);
893 isp->isp_osinfo.fw = NULL;
894 if (isp->isp_osinfo.fw == NULL) {
896 isp->isp_osinfo.fw = firmware_get(fwname);
898 if (isp->isp_osinfo.fw != NULL) {
899 isp_prt(isp, ISP_LOGCONFIG, "loaded firmware %s", fwname);
900 isp->isp_mdvec->dv_ispfw = isp->isp_osinfo.fw->data;
908 if (IS_2300(isp)) { /* per QLogic errata */
911 if (IS_2322(isp) || pci_get_devid(dev) == PCI_QLOGIC_ISP6312) {
914 if (IS_24XX(isp)) {
924 isp_prt(isp, ISP_LOGDEBUG0, "set PCI line size to %d from %d", linesz, data);
935 isp_prt(isp, ISP_LOGDEBUG0, "set PCI latency to %d", data);
946 if (IS_26XX(isp)) {
956 if (pcs->msicount == 0 && (IS_24XX(isp) || IS_2322(isp))) {
977 mtx_init(&isp->isp_osinfo.lock, "isp", NULL, MTX_DEF);
980 if (isp_setup_intr(dev, pcs->irq, ISP_IFLAGS, NULL, isp_platform_intr, isp, &pcs->ih)) {
988 if (IS_23XX(isp) || IS_24XX(isp)) {
989 isp->isp_port = pci_get_function(dev);
995 ISP_LOCK(isp);
996 if (isp_reinit(isp, 1) != 0) {
997 ISP_UNLOCK(isp);
1000 ISP_UNLOCK(isp);
1001 if (isp_attach(isp)) {
1002 ISP_LOCK(isp);
1003 isp_uninit(isp);
1004 ISP_UNLOCK(isp);
1014 mtx_destroy(&isp->isp_osinfo.lock);
1043 ispsoftc_t *isp;
1050 isp = (ispsoftc_t *) pcs;
1051 status = isp_detach(isp);
1054 ISP_LOCK(isp);
1055 isp_uninit(isp);
1059 ISP_UNLOCK(isp);
1060 mtx_destroy(&isp->isp_osinfo.lock);
1088 #define BXR2(isp, off) bus_read_2((isp)->isp_regs, (off))
1089 #define BXW2(isp, off, v) bus_write_2((isp)->isp_regs, (off), (v))
1090 #define BXR4(isp, off) bus_read_4((isp)->isp_regs, (off))
1091 #define BXW4(isp, off, v) bus_write_4((isp)->isp_regs, (off), (v))
1092 #define B2R4(isp, off) bus_read_4((isp)->isp_regs2, (off))
1093 #define B2W4(isp, off, v) bus_write_4((isp)->isp_regs2, (off), (v))
1096 isp_pci_rd_debounced(ispsoftc_t *isp, int off, uint16_t *rp)
1102 val0 = BXR2(isp, IspVirt2Off(isp, off));
1103 val1 = BXR2(isp, IspVirt2Off(isp, off));
1113 isp_pci_rd_isr(ispsoftc_t *isp, uint16_t *isrp, uint16_t *semap, uint16_t *info)
1117 if (IS_2100(isp)) {
1118 if (isp_pci_rd_debounced(isp, BIU_ISR, &isr)) {
1121 if (isp_pci_rd_debounced(isp, BIU_SEMA, &sema)) {
1125 isr = BXR2(isp, IspVirt2Off(isp, BIU_ISR));
1126 sema = BXR2(isp, IspVirt2Off(isp, BIU_SEMA));
1128 isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema);
1129 isr &= INT_PENDING_MASK(isp);
1136 if (IS_2100(isp)) {
1137 if (isp_pci_rd_debounced(isp, OUTMAILBOX0, info)) {
1141 *info = BXR2(isp, IspVirt2Off(isp, OUTMAILBOX0));
1148 isp_pci_rd_isr_2300(ispsoftc_t *isp, uint16_t *isrp, uint16_t *semap, uint16_t *info)
1152 if (!(BXR2(isp, IspVirt2Off(isp, BIU_ISR) & BIU2100_ISR_RISC_INT))) {
1156 r2hisr = BXR4(isp, IspVirt2Off(isp, BIU_R2HSTSLO));
1157 isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
1186 hccr = ISP_READ(isp, HCCR);
1188 ISP_WRITE(isp, HCCR, HCCR_RESET);
1189 isp_prt(isp, ISP_LOGERR, "RISC paused at interrupt (%x->%x)", hccr, ISP_READ(isp, HCCR));
1190 ISP_WRITE(isp, BIU_ICR, 0);
1192 isp_prt(isp, ISP_LOGERR, "unknown interrupt 0x%x\n", r2hisr);
1201 isp_pci_rd_isr_2400(ispsoftc_t *isp, uint16_t *isrp, uint16_t *semap, uint16_t *info)
1205 r2hisr = BXR4(isp, IspVirt2Off(isp, BIU2400_R2HSTSLO));
1206 isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
1227 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT);
1228 isp_prt(isp, ISP_LOGERR, "unknown interrupt 0x%x\n", r2hisr);
1236 isp_pci_rd_reg(ispsoftc_t *isp, int regoff)
1245 oldconf = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
1246 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oldconf | BIU_PCI_CONF1_SXP);
1247 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1249 rv = BXR2(isp, IspVirt2Off(isp, regoff));
1251 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oldconf);
1252 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1258 isp_pci_wr_reg(ispsoftc_t *isp, int regoff, uint32_t val)
1266 oldconf = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
1267 BXW2(isp, IspVirt2Off(isp, BIU_CONF1),
1269 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1271 BXW2(isp, IspVirt2Off(isp, regoff), val);
1272 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2, -1);
1274 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oldconf);
1275 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1281 isp_pci_rd_reg_1080(ispsoftc_t *isp, int regoff)
1290 oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
1296 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), tc);
1297 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1299 oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
1300 BXW2(isp, IspVirt2Off(isp, BIU_CONF1),
1302 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1304 rv = BXR2(isp, IspVirt2Off(isp, regoff));
1306 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oc);
1307 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1313 isp_pci_wr_reg_1080(ispsoftc_t *isp, int regoff, uint32_t val)
1322 oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
1328 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), tc);
1329 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1331 oc = BXR2(isp, IspVirt2Off(isp, BIU_CONF1));
1332 BXW2(isp, IspVirt2Off(isp, BIU_CONF1),
1334 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1336 BXW2(isp, IspVirt2Off(isp, regoff), val);
1337 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2, -1);
1339 BXW2(isp, IspVirt2Off(isp, BIU_CONF1), oc);
1340 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, BIU_CONF1), 2, -1);
1345 isp_pci_rd_reg_2400(ispsoftc_t *isp, int regoff)
1354 return (BXR2(isp, IspVirt2Off(isp, regoff)));
1356 isp_prt(isp, ISP_LOGERR, "SXP_BLOCK read at 0x%x", regoff);
1359 isp_prt(isp, ISP_LOGERR, "RISC_BLOCK read at 0x%x", regoff);
1362 isp_prt(isp, ISP_LOGERR, "DMA_BLOCK read at 0x%x", regoff);
1365 isp_prt(isp, ISP_LOGERR, "unknown block read at 0x%x", regoff);
1387 rv = BXR4(isp, IspVirt2Off(isp, regoff));
1390 rv = BXR4(isp, IspVirt2Off(isp, regoff));
1393 rv = BXR4(isp, IspVirt2Off(isp, regoff)) >> 16;
1396 isp_prt(isp, ISP_LOGERR, "unknown register read at 0x%x",
1405 isp_pci_wr_reg_2400(ispsoftc_t *isp, int regoff, uint32_t val)
1413 BXW2(isp, IspVirt2Off(isp, regoff), val);
1414 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 2, -1);
1417 isp_prt(isp, ISP_LOGERR, "SXP_BLOCK write at 0x%x", regoff);
1420 isp_prt(isp, ISP_LOGERR, "RISC_BLOCK write at 0x%x", regoff);
1423 isp_prt(isp, ISP_LOGERR, "DMA_BLOCK write at 0x%x", regoff);
1426 isp_prt(isp, ISP_LOGERR, "unknown block write at 0x%x", regoff);
1448 BXW4(isp, IspVirt2Off(isp, regoff), val);
1454 MEMORYBARRIERW(isp, SYNC_REG,
1455 IspVirt2Off(isp, regoff), 4, -1)
1458 MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 4, -1);
1461 isp_prt(isp, ISP_LOGERR, "unknown register write at 0x%x",
1468 isp_pci_rd_reg_2600(ispsoftc_t *isp, int regoff)
1475 isp_prt(isp, ISP_LOGERR, "unknown register read at 0x%x",
1480 rv = B2R4(isp, 0x00);
1483 rv = B2R4(isp, 0x04);
1486 rv = B2R4(isp, 0x08);
1489 rv = B2R4(isp, 0x0c);
1492 rv = B2R4(isp, 0x10);
1495 rv = B2R4(isp, 0x14);
1498 rv = isp_pci_rd_reg_2400(isp, regoff);
1505 isp_pci_wr_reg_2600(ispsoftc_t *isp, int regoff, uint32_t val)
1512 isp_prt(isp, ISP_LOGERR, "unknown register write at 0x%x",
1534 isp_pci_wr_reg_2400(isp, regoff, val);
1537 B2W4(isp, off, val);
1556 isp_pci_mbxdma(ispsoftc_t *isp)
1570 if (isp->isp_rquest) {
1573 ISP_UNLOCK(isp);
1575 if (isp->isp_maxcmds == 0) {
1576 isp_prt(isp, ISP_LOGERR, "maxcmds not set");
1577 ISP_LOCK(isp);
1582 if (IS_ULTRA2(isp) || IS_FC(isp) || IS_1240(isp)) {
1594 len = isp->isp_maxcmds * sizeof (struct isp_pcmd);
1595 isp->isp_osinfo.pcmd_pool = (struct isp_pcmd *) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO);
1596 if (isp->isp_osinfo.pcmd_pool == NULL) {
1597 isp_prt(isp, ISP_LOGERR, "cannot allocate pcmds");
1598 ISP_LOCK(isp);
1602 if (isp->isp_osinfo.sixtyfourbit) {
1608 if (isp_dma_tag_create(BUS_DMA_ROOTARG(ISP_PCD(isp)), 1, slim, llim, hlim, NULL, NULL, BUS_SPACE_MAXSIZE, nsegs, slim, 0, &isp->isp_osinfo.dmat)) {
1609 free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
1610 ISP_LOCK(isp);
1611 isp_prt(isp, ISP_LOGERR, "could not create master dma tag");
1615 len = sizeof (isp_hdl_t) * isp->isp_maxcmds;
1616 isp->isp_xflist = (isp_hdl_t *) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO);
1617 if (isp->isp_xflist == NULL) {
1618 free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
1619 ISP_LOCK(isp);
1620 isp_prt(isp, ISP_LOGERR, "cannot alloc xflist array");
1623 for (len = 0; len < isp->isp_maxcmds - 1; len++) {
1624 isp->isp_xflist[len].cmd = &isp->isp_xflist[len+1];
1626 isp->isp_xffree = isp->isp_xflist;
1632 len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp));
1633 if (isp->isp_type >= ISP_HA_FC_2200)
1635 if (isp_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim,
1637 len, 1, len, 0, &isp->isp_osinfo.reqdmat)) {
1638 isp_prt(isp, ISP_LOGERR, "cannot create request DMA tag");
1641 if (bus_dmamem_alloc(isp->isp_osinfo.reqdmat, (void **)&base,
1642 BUS_DMA_COHERENT, &isp->isp_osinfo.reqmap) != 0) {
1643 isp_prt(isp, ISP_LOGERR, "cannot allocate request DMA memory");
1644 bus_dma_tag_destroy(isp->isp_osinfo.reqdmat);
1647 isp->isp_rquest = base;
1649 if (bus_dmamap_load(isp->isp_osinfo.reqdmat, isp->isp_osinfo.reqmap,
1651 isp_prt(isp, ISP_LOGERR, "error loading request DMA map %d", im.error);
1654 isp_prt(isp, ISP_LOGDEBUG0, "request area @ 0x%jx/0x%jx",
1656 isp->isp_rquest_dma = im.maddr;
1657 base += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp));
1658 im.maddr += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp));
1659 if (isp->isp_type >= ISP_HA_FC_2200) {
1660 isp->isp_osinfo.ecmd_dma = im.maddr;
1661 isp->isp_osinfo.ecmd_free = (isp_ecmd_t *)base;
1662 isp->isp_osinfo.ecmd_base = isp->isp_osinfo.ecmd_free;
1663 for (ecmd = isp->isp_osinfo.ecmd_free;
1664 ecmd < &isp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) {
1665 if (ecmd == &isp->isp_osinfo.ecmd_free[N_XCMDS - 1])
1675 len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
1676 if (isp_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim,
1678 len, 1, len, 0, &isp->isp_osinfo.respdmat)) {
1679 isp_prt(isp, ISP_LOGERR, "cannot create response DMA tag");
1682 if (bus_dmamem_alloc(isp->isp_osinfo.respdmat, (void **)&base,
1683 BUS_DMA_COHERENT, &isp->isp_osinfo.respmap) != 0) {
1684 isp_prt(isp, ISP_LOGERR, "cannot allocate response DMA memory");
1685 bus_dma_tag_destroy(isp->isp_osinfo.respdmat);
1688 isp->isp_result = base;
1690 if (bus_dmamap_load(isp->isp_osinfo.respdmat, isp->isp_osinfo.respmap,
1692 isp_prt(isp, ISP_LOGERR, "error loading response DMA map %d", im.error);
1695 isp_prt(isp, ISP_LOGDEBUG0, "response area @ 0x%jx/0x%jx",
1697 isp->isp_result_dma = im.maddr;
1703 if (IS_24XX(isp)) {
1704 len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
1705 if (isp_dma_tag_create(isp->isp_osinfo.dmat, QENTRY_LEN, slim,
1707 len, 1, len, 0, &isp->isp_osinfo.atiodmat)) {
1708 isp_prt(isp, ISP_LOGERR, "cannot create ATIO DMA tag");
1711 if (bus_dmamem_alloc(isp->isp_osinfo.atiodmat, (void **)&base,
1712 BUS_DMA_COHERENT, &isp->isp_osinfo.atiomap) != 0) {
1713 isp_prt(isp, ISP_LOGERR, "cannot allocate ATIO DMA memory");
1714 bus_dma_tag_destroy(isp->isp_osinfo.atiodmat);
1717 isp->isp_atioq = base;
1719 if (bus_dmamap_load(isp->isp_osinfo.atiodmat, isp->isp_osinfo.atiomap,
1721 isp_prt(isp, ISP_LOGERR, "error loading ATIO DMA map %d", im.error);
1724 isp_prt(isp, ISP_LOGDEBUG0, "ATIO area @ 0x%jx/0x%jx",
1726 isp->isp_atioq_dma = im.maddr;
1730 if (IS_FC(isp)) {
1731 if (isp_dma_tag_create(isp->isp_osinfo.dmat, 64, slim,
1733 ISP_FC_SCRLEN, 1, ISP_FC_SCRLEN, 0, &isp->isp_osinfo.scdmat)) {
1736 for (cmap = 0; cmap < isp->isp_nchan; cmap++) {
1737 struct isp_fc *fc = ISP_FC_PC(isp, cmap);
1738 if (bus_dmamem_alloc(isp->isp_osinfo.scdmat,
1741 FCPARAM(isp, cmap)->isp_scratch = base;
1743 if (bus_dmamap_load(isp->isp_osinfo.scdmat, fc->scmap,
1745 bus_dmamem_free(isp->isp_osinfo.scdmat,
1749 FCPARAM(isp, cmap)->isp_scdma = im.maddr;
1750 if (!IS_2100(isp)) {
1768 for (i = 0; i < isp->isp_maxcmds; i++) {
1769 struct isp_pcmd *pcmd = &isp->isp_osinfo.pcmd_pool[i];
1770 error = bus_dmamap_create(isp->isp_osinfo.dmat, 0, &pcmd->dmap);
1772 isp_prt(isp, ISP_LOGERR, "error %d creating per-cmd DMA maps", error);
1774 bus_dmamap_destroy(isp->isp_osinfo.dmat, isp->isp_osinfo.pcmd_pool[i].dmap);
1778 callout_init_mtx(&pcmd->wdog, &isp->isp_osinfo.lock, 0);
1779 if (i == isp->isp_maxcmds-1) {
1782 pcmd->next = &isp->isp_osinfo.pcmd_pool[i+1];
1785 isp->isp_osinfo.pcmd_free = &isp->isp_osinfo.pcmd_pool[0];
1786 ISP_LOCK(isp);
1790 if (IS_FC(isp)) {
1792 struct isp_fc *fc = ISP_FC_PC(isp, cmap);
1793 bus_dmamap_unload(isp->isp_osinfo.scdmat, fc->scmap);
1794 bus_dmamem_free(isp->isp_osinfo.scdmat, base, fc->scmap);
1801 bus_dma_tag_destroy(isp->isp_osinfo.scdmat);
1804 if (isp->isp_rquest_dma != 0) {
1805 bus_dmamap_unload(isp->isp_osinfo.reqdmat,
1806 isp->isp_osinfo.reqmap);
1808 if (isp->isp_rquest != NULL) {
1809 bus_dmamem_free(isp->isp_osinfo.reqdmat, isp->isp_rquest,
1810 isp->isp_osinfo.reqmap);
1811 bus_dma_tag_destroy(isp->isp_osinfo.reqdmat);
1813 if (isp->isp_result_dma != 0) {
1814 bus_dmamap_unload(isp->isp_osinfo.respdmat,
1815 isp->isp_osinfo.respmap);
1817 if (isp->isp_result != NULL) {
1818 bus_dmamem_free(isp->isp_osinfo.respdmat, isp->isp_result,
1819 isp->isp_osinfo.respmap);
1820 bus_dma_tag_destroy(isp->isp_osinfo.respdmat);
1823 if (IS_24XX(isp)) {
1824 if (isp->isp_atioq_dma != 0) {
1825 bus_dmamap_unload(isp->isp_osinfo.atiodmat,
1826 isp->isp_osinfo.atiomap);
1828 if (isp->isp_atioq != NULL) {
1829 bus_dmamem_free(isp->isp_osinfo.reqdmat, isp->isp_atioq,
1830 isp->isp_osinfo.atiomap);
1831 bus_dma_tag_destroy(isp->isp_osinfo.atiodmat);
1835 free(isp->isp_xflist, M_DEVBUF);
1836 free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
1837 isp->isp_rquest = NULL;
1838 ISP_LOCK(isp);
1843 ispsoftc_t *isp;
1869 ispsoftc_t *isp;
1880 isp = mp->isp;
1883 if (isp->isp_osinfo.sixtyfourbit) {
1885 isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG64_MAX);
1894 isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG_MAX);
1900 bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREWRITE);
1903 bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREREAD);
1916 error = isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, &csio->sense_data, csio->sense_len);
1944 ispsoftc_t *isp;
1955 isp = mp->isp;
1958 if (isp->isp_osinfo.sixtyfourbit) {
1960 isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG64_MAX);
1971 isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG_MAX);
1977 bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREREAD);
1980 bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREWRITE);
1991 error = isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, (ispds64_t *)csio->req_map);
2005 isp_pci_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff)
2013 mp->isp = isp;
2031 error = bus_dmamap_load_ccb(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap,
2034 bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap);
2036 isp_prt(isp, ISP_LOGERR, "deferred dma allocation not supported");
2039 isp_prt(isp, ISP_LOGERR, "error %d in dma mapping code", error);
2060 isp_pci_reset0(ispsoftc_t *isp)
2062 ISP_DISABLE_INTS(isp);
2066 isp_pci_reset1(ispsoftc_t *isp)
2068 if (!IS_24XX(isp)) {
2070 isp_pci_wr_reg(isp, HCCR, PCI_HCCR_CMD_BIOS);
2073 ISP_ENABLE_INTS(isp);
2077 isp_pci_dumpregs(ispsoftc_t *isp, const char *msg)
2079 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
2081 printf("%s: %s\n", device_get_nameunit(isp->isp_dev), msg);
2083 printf("%s:\n", device_get_nameunit(isp->isp_dev));
2084 if (IS_SCSI(isp))
2085 printf(" biu_conf1=%x", ISP_READ(isp, BIU_CONF1));
2087 printf(" biu_csr=%x", ISP_READ(isp, BIU2100_CSR));
2088 printf(" biu_icr=%x biu_isr=%x biu_sema=%x ", ISP_READ(isp, BIU_ICR),
2089 ISP_READ(isp, BIU_ISR), ISP_READ(isp, BIU_SEMA));
2090 printf("risc_hccr=%x\n", ISP_READ(isp, HCCR));
2093 if (IS_SCSI(isp)) {
2094 ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
2096 ISP_READ(isp, CDMA_CONF), ISP_READ(isp, CDMA_STATUS),
2097 ISP_READ(isp, CDMA_FIFO_STS));
2099 ISP_READ(isp, DDMA_CONF), ISP_READ(isp, DDMA_STATUS),
2100 ISP_READ(isp, DDMA_FIFO_STS));
2102 ISP_READ(isp, SXP_INTERRUPT),
2103 ISP_READ(isp, SXP_GROSS_ERR),
2104 ISP_READ(isp, SXP_PINS_CTRL));
2105 ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
2108 ISP_READ(isp, OUTMAILBOX0), ISP_READ(isp, OUTMAILBOX1),
2109 ISP_READ(isp, OUTMAILBOX2), ISP_READ(isp, OUTMAILBOX3),
2110 ISP_READ(isp, OUTMAILBOX4));