summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authormjacob <mjacob@cvs.openbsd.org>2000-07-06 05:11:27 +0000
committermjacob <mjacob@cvs.openbsd.org>2000-07-06 05:11:27 +0000
commitbc7b5033cf0864e7c977a9eb7023a154c41c7bcc (patch)
treefb48f325fe0d7bf6621dbb9bf866613cf8521e9b /sys/dev
parente5be4deef6202ca94e2ddfc461156d2c3d3a4422 (diff)
Use new isp_handle_index function. Pull in f/w from separate files.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/isp_pci.c64
1 files changed, 45 insertions, 19 deletions
diff --git a/sys/dev/pci/isp_pci.c b/sys/dev/pci/isp_pci.c
index 8e53c43ea61..a5ac338f90d 100644
--- a/sys/dev/pci/isp_pci.c
+++ b/sys/dev/pci/isp_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: isp_pci.c,v 1.11 2000/02/20 21:16:35 mjacob Exp $ */
+/* $OpenBSD: isp_pci.c,v 1.12 2000/07/06 05:11:26 mjacob Exp $ */
/*
* PCI specific probe and attach routines for Qlogic ISP SCSI adapters.
*
@@ -35,7 +35,6 @@
*/
#include <dev/ic/isp_openbsd.h>
-#include <dev/microcode/isp/asm_pci.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
@@ -43,7 +42,7 @@
static u_int16_t isp_pci_rd_reg __P((struct ispsoftc *, int));
static void isp_pci_wr_reg __P((struct ispsoftc *, int, u_int16_t));
-#if !defined(ISP_DISABLE_1080_SUPPORT) && !defined(ISP_DISABLE_12160_SUPPORT)
+#if !(defined(ISP_DISABLE_1080_SUPPORT) && defined(ISP_DISABLE_12160_SUPPORT))
static u_int16_t isp_pci_rd_reg_1080 __P((struct ispsoftc *, int));
static void isp_pci_wr_reg_1080 __P((struct ispsoftc *, int, u_int16_t));
#endif
@@ -59,23 +58,50 @@ static int isp_pci_intr __P((void *));
#ifndef ISP_CODE_ORG
#define ISP_CODE_ORG 0x1000
#endif
-#ifndef ISP_1040_RISC_CODE
+
+#ifdef ISP_COMPILE_FW
+#define ISP_COMPILE_1040_FW 1
+#define ISP_COMPILE_1080_FW 1
+#define ISP_COMPILE_12160_FW 1
+#define ISP_COMPILE_2100_FW 1
+#define ISP_COMPILE_2200_FW 1
+#endif
+
+#if defined(ISP_DISABLE_1020_SUPPORT) || !defined(ISP_COMPILE_1020_FW)
#define ISP_1040_RISC_CODE NULL
+#else
+#define ISP_1040_RISC_CODE isp_1040_risc_code
+#include <dev/microcode/isp/asm_1040.h>
#endif
-#ifndef ISP_1080_RISC_CODE
+
+#if defined(ISP_DISABLE_1080_SUPPORT) || !defined(ISP_COMPILE_1080_FW)
#define ISP_1080_RISC_CODE NULL
+#else
+#define ISP_1080_RISC_CODE isp_1080_risc_code
+#include <dev/microcode/isp/asm_1080.h>
#endif
-#ifndef ISP_12160_RISC_CODE
+
+#if defined(ISP_DISABLE_12160_SUPPORT) || !defined(ISP_COMPILE_12160_FW)
#define ISP_12160_RISC_CODE NULL
+#else
+#define ISP_12160_RISC_CODE isp_12160_risc_code
+#include <dev/microcode/isp/asm_12160.h>
#endif
-#ifndef ISP_2100_RISC_CODE
+
+#if defined(ISP_DISABLE_2100_SUPPORT) || !defined(ISP_COMPILE_2100_FW)
#define ISP_2100_RISC_CODE NULL
+#else
+#define ISP_2100_RISC_CODE isp_2100_risc_code
+#include <dev/microcode/isp/asm_2100.h>
#endif
-#ifndef ISP_2200_RISC_CODE
+
+#if defined(ISP_DISABLE_2200_SUPPORT) || !defined(ISP_COMPILE_2200_FW)
#define ISP_2200_RISC_CODE NULL
+#else
+#define ISP_2200_RISC_CODE isp_2200_risc_code
+#include <dev/microcode/isp/asm_2200.h>
#endif
-
#ifndef ISP_DISABLE_1020_SUPPORT
static struct ispmdvec mdvec = {
isp_pci_rd_reg,
@@ -581,6 +607,8 @@ isp_pci_attach(parent, self, aux)
}
}
+ ENABLE_INTS(isp);
+
/*
* Do Generic attach now.
*/
@@ -645,7 +673,7 @@ isp_pci_wr_reg(isp, regoff, val)
}
}
-#if !defined(ISP_DISABLE_1080_SUPPORT) && !defined(ISP_DISABLE_12160_SUPPORT)
+#if !(defined(ISP_DISABLE_1080_SUPPORT) && defined(ISP_DISABLE_12160_SUPPORT))
static u_int16_t
isp_pci_rd_reg_1080(isp, regoff)
struct ispsoftc *isp;
@@ -817,15 +845,16 @@ isp_pci_dmasetup(isp, xs, rq, iptrp, optr)
u_int16_t optr;
{
struct isp_pcisoftc *pci = (struct isp_pcisoftc *)isp;
- bus_dmamap_t dmap = pci->pci_xfer_dmap[rq->req_handle - 1];
+ bus_dmamap_t dmap;
ispcontreq_t *crq;
int segcnt, seg, error, ovseg, seglim, drq;
+ dmap = pci->pci_xfer_dmap[isp_handle_index(rq->req_handle)];
+
if (xs->datalen == 0) {
rq->req_seg_count = 1;
goto mbxsync;
}
- assert(rq->req_handle != 0 && rq->req_handle <= isp->isp_maxcmds);
if (xs->flags & SCSI_DATA_IN) {
drq = REQFLAG_DATA_IN;
@@ -874,14 +903,13 @@ isp_pci_dmasetup(isp, xs, rq, iptrp, optr)
goto dmasync;
do {
- crq = (ispcontreq_t *)
- ISP_QUEUE_ENTRY(isp->isp_rquest, *iptrp);
- *iptrp = (*iptrp + 1) & (RQUEST_QUEUE_LEN - 1);
+ crq = (ispcontreq_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, *iptrp);
+ *iptrp = ISP_NXT_QENTRY(*iptrp, RQUEST_QUEUE_LEN);
if (*iptrp == optr) {
printf("%s: Request Queue Overflow++\n", isp->isp_name);
bus_dmamap_unload(pci->pci_dmat, dmap);
XS_SETERR(xs, HBA_BOTCH);
- return (CMD_COMPLETE);
+ return (CMD_EAGAIN);
}
rq->req_header.rqs_entry_count++;
bzero((void *)crq, sizeof (*crq));
@@ -925,9 +953,7 @@ isp_pci_dmateardown(isp, xs, handle)
u_int32_t handle;
{
struct isp_pcisoftc *pci = (struct isp_pcisoftc *)isp;
- bus_dmamap_t dmap;
- assert(handle != 0 && handle <= isp->isp_maxcmds);
- dmap = pci->pci_xfer_dmap[handle-1];
+ bus_dmamap_t dmap = pci->pci_xfer_dmap[isp_handle_index(handle)];
bus_dmamap_sync(pci->pci_dmat, dmap, xs->flags & SCSI_DATA_IN ?
BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE);
bus_dmamap_unload(pci->pci_dmat, dmap);