diff options
author | mjacob <mjacob@cvs.openbsd.org> | 2000-07-06 05:11:27 +0000 |
---|---|---|
committer | mjacob <mjacob@cvs.openbsd.org> | 2000-07-06 05:11:27 +0000 |
commit | bc7b5033cf0864e7c977a9eb7023a154c41c7bcc (patch) | |
tree | fb48f325fe0d7bf6621dbb9bf866613cf8521e9b /sys/dev | |
parent | e5be4deef6202ca94e2ddfc461156d2c3d3a4422 (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.c | 64 |
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); |