Lines Matching defs:isp
32 * PCI specific probe and attach routines for Qlogic ISP SCSI adapters.
85 #include <dev/microcode/isp/asm_1040.h>
92 #include <dev/microcode/isp/asm_1080.h>
99 #include <dev/microcode/isp/asm_12160.h>
106 #include <dev/microcode/isp/asm_2100.h>
113 #include <dev/microcode/isp/asm_2200.h>
120 #include <dev/microcode/isp/asm_2300.h>
126 #include <dev/microcode/isp/asm_2322.h>
137 #include <dev/microcode/isp/asm_2400.h>
138 #include <dev/microcode/isp/asm_2500.h>
486 struct ispsoftc *isp = &pcs->pci_isp;
497 isp->isp_osinfo.dev = self;
524 isp->isp_nchan = 1;
542 isp->isp_mdvec = &mdvec;
543 isp->isp_type = ISP_HA_SCSI_UNKNOWN;
550 isp->isp_mdvec = &mdvec_1080;
551 isp->isp_type = ISP_HA_SCSI_1080;
558 isp->isp_mdvec = &mdvec_1080;
559 isp->isp_type = ISP_HA_SCSI_1240;
560 isp->isp_nchan++;
567 isp->isp_mdvec = &mdvec_1080;
568 isp->isp_type = ISP_HA_SCSI_1280;
569 isp->isp_nchan++;
578 isp->isp_mdvec = &mdvec_12160;
579 isp->isp_type = ISP_HA_SCSI_10160;
586 isp->isp_mdvec = &mdvec_12160;
587 isp->isp_type = ISP_HA_SCSI_12160;
588 isp->isp_nchan++;
597 isp->isp_mdvec = &mdvec_2100;
598 isp->isp_type = ISP_HA_FC_2100;
616 isp->isp_mdvec = &mdvec_2200;
617 isp->isp_type = ISP_HA_FC_2200;
628 isp->isp_mdvec = &mdvec_2300;
632 isp->isp_type = ISP_HA_FC_2300;
636 isp->isp_port = pa->pa_function;
638 isp->isp_type = ISP_HA_FC_2312;
648 isp->isp_mdvec = &mdvec_2322;
650 isp->isp_type = ISP_HA_FC_2322;
651 isp->isp_port = pa->pa_function;
661 isp->isp_mdvec = &mdvec_2400;
667 isp->isp_type = ISP_HA_FC_2400;
668 isp->isp_port = pa->pa_function;
675 isp->isp_mdvec = &mdvec_2500;
677 isp->isp_type = ISP_HA_FC_2500;
678 isp->isp_port = pa->pa_function;
689 isp->isp_param = malloc(mamt, M_DEVBUF, M_WAITOK | M_ZERO);
690 mamt = sizeof (struct scsipi_channel) * isp->isp_nchan;
691 isp->isp_osinfo.chan = malloc(mamt, M_DEVBUF, M_WAITOK | M_ZERO);
692 isp->isp_osinfo.adapter.adapt_nchannels = isp->isp_nchan;
698 isp->isp_dblev = ISP_LOGDEFAULT;
700 isp->isp_dblev = ISP_LOGWARN|ISP_LOGERR;
702 isp->isp_dblev |= ISP_LOGCONFIG|ISP_LOGINFO;
704 isp->isp_dblev |= ISP_LOGDEBUG0|ISP_LOGDEBUG1|ISP_LOGDEBUG2;
707 if (isp->isp_dblev & ISP_LOGCONFIG) {
713 isp->isp_dmatag = pa->pa_dmat;
714 isp->isp_revision = rev;
727 if (IS_2300(isp)) { /* per QLogic errata */
749 free(isp->isp_param, M_DEVBUF);
750 free(isp->isp_osinfo.chan, M_DEVBUF);
757 isp_pci_intr, isp, device_xname(self));
761 free(isp->isp_param, M_DEVBUF);
762 free(isp->isp_osinfo.chan, M_DEVBUF);
768 isp->isp_confopts = device_cfdata(self)->cf_flags;
769 ISP_LOCK(isp);
770 isp_reset(isp, 1);
771 if (isp->isp_state != ISP_RESETSTATE) {
772 ISP_UNLOCK(isp);
773 free(isp->isp_param, M_DEVBUF);
774 free(isp->isp_osinfo.chan, M_DEVBUF);
777 isp_init(isp);
778 if (isp->isp_state != ISP_INITSTATE) {
779 isp_uninit(isp);
780 ISP_UNLOCK(isp);
781 free(isp->isp_param, M_DEVBUF);
782 free(isp->isp_osinfo.chan, M_DEVBUF);
788 ISP_UNLOCK(isp);
789 isp_attach(isp);
807 isp_pci_rd_debounced(struct ispsoftc *isp, int off, uint16_t *rp)
809 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
814 val0 = BXR2(pcs, IspVirt2Off(isp, off));
815 val1 = BXR2(pcs, IspVirt2Off(isp, off));
830 isp_pci_rd_isr(struct ispsoftc *isp, uint32_t *isrp,
833 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
836 if (IS_2100(isp)) {
837 if (isp_pci_rd_debounced(isp, BIU_ISR, &isr)) {
840 if (isp_pci_rd_debounced(isp, BIU_SEMA, &sema)) {
844 isr = BXR2(pcs, IspVirt2Off(isp, BIU_ISR));
845 sema = BXR2(pcs, IspVirt2Off(isp, BIU_SEMA));
847 isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema);
848 isr &= INT_PENDING_MASK(isp);
855 if (IS_2100(isp)) {
856 if (isp_pci_rd_debounced(isp, OUTMAILBOX0, mbp)) {
860 *mbp = BXR2(pcs, IspVirt2Off(isp, OUTMAILBOX0));
869 isp_pci_rd_isr_2300(struct ispsoftc *isp, uint32_t *isrp,
872 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
875 if (!(BXR2(pcs, IspVirt2Off(isp, BIU_ISR)) & BIU2100_ISR_RISC_INT)) {
881 isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
924 isp_pci_rd_isr_2400(ispsoftc_t *isp, uint32_t *isrp,
927 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
931 isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
954 ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT);
955 isp_prt(isp, ISP_LOGERR, "unknown interrupt 0x%x\n", r2hisr);
961 isp_pci_rd_reg_2400(ispsoftc_t *isp, int regoff)
963 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
973 isp_prt(isp, ISP_LOGWARN, "SXP_BLOCK read at 0x%x", regoff);
976 isp_prt(isp, ISP_LOGWARN, "RISC_BLOCK read at 0x%x", regoff);
979 isp_prt(isp, ISP_LOGWARN, "DMA_BLOCK read at 0x%x", regoff);
982 isp_prt(isp, ISP_LOGWARN, "unknown block read at 0x%x", regoff);
1014 isp_prt(isp, ISP_LOGERR,
1023 isp_pci_wr_reg_2400(ispsoftc_t *isp, int regoff, uint32_t val)
1025 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
1036 isp_prt(isp, ISP_LOGWARN, "SXP_BLOCK write at 0x%x", regoff);
1039 isp_prt(isp, ISP_LOGWARN, "RISC_BLOCK write at 0x%x", regoff);
1042 isp_prt(isp, ISP_LOGWARN, "DMA_BLOCK write at 0x%x", regoff);
1045 isp_prt(isp, ISP_LOGWARN, "unknown block write at 0x%x",
1072 isp_prt(isp, ISP_LOGERR,
1080 isp_pci_rd_reg(struct ispsoftc *isp, int regoff)
1083 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
1090 oldconf = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
1091 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1),
1094 rv = BXR2(pcs, IspVirt2Off(isp, regoff));
1096 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), oldconf);
1102 isp_pci_wr_reg(struct ispsoftc *isp, int regoff, uint32_t val)
1104 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
1111 oldconf = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
1112 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1),
1115 BXW2(pcs, IspVirt2Off(isp, regoff), val);
1117 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), oldconf);
1123 isp_pci_rd_reg_1080(struct ispsoftc *isp, int regoff)
1126 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
1133 oc = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
1139 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), tc);
1141 oc = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
1142 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1),
1145 rv = BXR2(pcs, IspVirt2Off(isp, regoff));
1147 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), oc);
1153 isp_pci_wr_reg_1080(struct ispsoftc *isp, int regoff, uint32_t val)
1155 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
1163 oc = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
1169 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), tc);
1171 oc = BXR2(pcs, IspVirt2Off(isp, BIU_CONF1));
1172 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1),
1175 BXW2(pcs, IspVirt2Off(isp, regoff), val);
1177 BXW2(pcs, IspVirt2Off(isp, BIU_CONF1), oc);
1183 isp_pci_mbxdma(struct ispsoftc *isp)
1185 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
1186 bus_dma_tag_t dmat = isp->isp_dmatag;
1192 if (isp->isp_rquest_dma) /* been here before? */
1195 if (isp->isp_type <= ISP_HA_SCSI_1040B) {
1203 len = isp->isp_maxcmds * sizeof (isp_hdl_t);
1204 isp->isp_xflist = (isp_hdl_t *) malloc(len, M_DEVBUF, M_WAITOK);
1205 if (isp->isp_xflist == NULL) {
1206 isp_prt(isp, ISP_LOGERR, "cannot malloc xflist array");
1209 memset(isp->isp_xflist, 0, len);
1210 for (len = 0; len < isp->isp_maxcmds - 1; len++) {
1211 isp->isp_xflist[len].cmd = &isp->isp_xflist[len+1];
1213 isp->isp_xffree = isp->isp_xflist;
1214 len = isp->isp_maxcmds * sizeof (bus_dmamap_t);
1217 free(isp->isp_xflist, M_DEVBUF);
1218 isp->isp_xflist = NULL;
1219 isp_prt(isp, ISP_LOGERR, "cannot malloc DMA map array");
1222 for (i = 0; i < isp->isp_maxcmds; i++) {
1225 isp_prt(isp, ISP_LOGERR, "cannot create DMA maps");
1229 if (i < isp->isp_maxcmds) {
1233 free(isp->isp_xflist, M_DEVBUF);
1235 isp->isp_xflist = NULL;
1243 len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp));
1247 if (bus_dmamem_map(isp->isp_dmatag, &sg, rs, len,
1248 (void *)&isp->isp_rquest, BUS_DMA_NOWAIT|BUS_DMA_COHERENT)) {
1252 &isp->isp_rqdmap)) {
1255 if (bus_dmamap_load(dmat, isp->isp_rqdmap, isp->isp_rquest, len, NULL,
1259 isp->isp_rquest_dma = isp->isp_rqdmap->dm_segs[0].ds_addr;
1264 len = ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
1270 (void *)&isp->isp_result, BUS_DMA_NOWAIT|BUS_DMA_COHERENT)) {
1274 &isp->isp_rsdmap)) {
1277 if (bus_dmamap_load(dmat, isp->isp_rsdmap, isp->isp_result, len, NULL,
1281 isp->isp_result_dma = isp->isp_rsdmap->dm_segs[0].ds_addr;
1283 if (IS_SCSI(isp)) {
1290 fcp = isp->isp_param;
1301 &isp->isp_scdmap)) {
1304 if (bus_dmamap_load(dmat, isp->isp_scdmap, fcp->isp_scratch, len, NULL,
1308 fcp->isp_scdma = isp->isp_scdmap->dm_segs[0].ds_addr;
1311 isp_prt(isp, ISP_LOGERR, "mailbox DMA setup failure");
1312 for (i = 0; i < isp->isp_maxcmds; i++) {
1315 free(isp->isp_xflist, M_DEVBUF);
1317 isp->isp_xflist = NULL;
1323 isp_pci_dmasetup(struct ispsoftc *isp, struct scsipi_xfer *xs, void *arg)
1325 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
1332 hidx = isp_handle_index(isp, rq->req_handle);
1363 error = bus_dmamap_load(isp->isp_dmatag, dmap, xs->data,
1368 isp_prt(isp, ISP_LOGWARN, "unable to load DMA (%d)",
1379 bus_dmamap_sync(isp->isp_dmatag, dmap, 0, dmap->dm_mapsize,
1383 if (isp_send_cmd(isp, rq, dm_segs, nsegs, xs->datalen, ddir)
1396 struct ispsoftc *isp = arg;
1398 isp->isp_intcnt++;
1399 if (ISP_READ_ISR(isp, &isr, &sema, &mbox) == 0) {
1400 isp->isp_intbogus++;
1403 isp->isp_osinfo.onintstack = 1;
1404 isp_intr(isp, isr, sema, mbox);
1405 isp->isp_osinfo.onintstack = 0;
1411 isp_pci_dmateardown(struct ispsoftc *isp, XS_T *xs, uint32_t handle)
1413 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
1417 hidx = isp_handle_index(isp, handle);
1419 isp_xs_prt(isp, xs, ISP_LOGERR, "bad handle on teardown");
1423 bus_dmamap_sync(isp->isp_dmatag, dmap, 0, dmap->dm_mapsize,
1426 bus_dmamap_unload(isp->isp_dmatag, dmap);
1430 isp_pci_reset0(ispsoftc_t *isp)
1432 ISP_DISABLE_INTS(isp);
1436 isp_pci_reset1(ispsoftc_t *isp)
1438 if (!IS_24XX(isp)) {
1440 isp_pci_wr_reg(isp, HCCR, PCI_HCCR_CMD_BIOS);
1443 ISP_ENABLE_INTS(isp);
1447 isp_pci_dumpregs(struct ispsoftc *isp, const char *msg)
1449 struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
1451 printf("%s: %s\n", device_xname(isp->isp_osinfo.dev), msg);
1452 if (IS_SCSI(isp))
1453 printf(" biu_conf1=%x", ISP_READ(isp, BIU_CONF1));
1455 printf(" biu_csr=%x", ISP_READ(isp, BIU2100_CSR));
1456 printf(" biu_icr=%x biu_isr=%x biu_sema=%x ", ISP_READ(isp, BIU_ICR),
1457 ISP_READ(isp, BIU_ISR), ISP_READ(isp, BIU_SEMA));
1458 printf("risc_hccr=%x\n", ISP_READ(isp, HCCR));
1461 if (IS_SCSI(isp)) {
1462 ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
1464 ISP_READ(isp, CDMA_CONF), ISP_READ(isp, CDMA_STATUS),
1465 ISP_READ(isp, CDMA_FIFO_STS));
1467 ISP_READ(isp, DDMA_CONF), ISP_READ(isp, DDMA_STATUS),
1468 ISP_READ(isp, DDMA_FIFO_STS));
1470 ISP_READ(isp, SXP_INTERRUPT),
1471 ISP_READ(isp, SXP_GROSS_ERR),
1472 ISP_READ(isp, SXP_PINS_CTRL));
1473 ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
1476 ISP_READ(isp, OUTMAILBOX0), ISP_READ(isp, OUTMAILBOX1),
1477 ISP_READ(isp, OUTMAILBOX2), ISP_READ(isp, OUTMAILBOX3),
1478 ISP_READ(isp, OUTMAILBOX4));