summaryrefslogtreecommitdiffstats
path: root/sys/dev/isp/isp_pci.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2017-03-28 10:11:00 +0000
committermav <mav@FreeBSD.org>2017-03-28 10:11:00 +0000
commit32cc3379865a39bb1f388add5455b75e4c785026 (patch)
tree8362bfc85a02d0b4c44fd184340631a32ac9f43f /sys/dev/isp/isp_pci.c
parent93828a44b5ed52374d903b2cbfe916854c641175 (diff)
downloadFreeBSD-src-32cc3379865a39bb1f388add5455b75e4c785026.zip
FreeBSD-src-32cc3379865a39bb1f388add5455b75e4c785026.tar.gz
MFC r315234: Improvements around attach, reset and detach.
This change fixes DMA resource leak on driver unload. Also it removes DMA resources allocation for hardcoded number of requests before fetching the real number from firmware. Also it prepares ground for more flexible IRQs allocation according to firmware capabilities.
Diffstat (limited to 'sys/dev/isp/isp_pci.c')
-rw-r--r--sys/dev/isp/isp_pci.c290
1 files changed, 141 insertions, 149 deletions
diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c
index 8a51cf5..bb1322a 100644
--- a/sys/dev/isp/isp_pci.c
+++ b/sys/dev/isp/isp_pci.c
@@ -65,11 +65,9 @@ static int isp_pci_rd_isr(ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
static int isp_pci_rd_isr_2300(ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
static int isp_pci_rd_isr_2400(ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
static int isp_pci_mbxdma(ispsoftc_t *);
+static void isp_pci_mbxdmafree(ispsoftc_t *);
static int isp_pci_dmasetup(ispsoftc_t *, XS_T *, void *);
-
-
-static void isp_pci_reset0(ispsoftc_t *);
-static void isp_pci_reset1(ispsoftc_t *);
+static int isp_pci_irqsetup(ispsoftc_t *);
static void isp_pci_dumpregs(ispsoftc_t *, const char *);
static struct ispmdvec mdvec = {
@@ -79,8 +77,7 @@ static struct ispmdvec mdvec = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
isp_pci_dumpregs,
NULL,
BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_64
@@ -93,8 +90,7 @@ static struct ispmdvec mdvec_1080 = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
isp_pci_dumpregs,
NULL,
BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_64
@@ -107,8 +103,7 @@ static struct ispmdvec mdvec_12160 = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
isp_pci_dumpregs,
NULL,
BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_64
@@ -121,8 +116,7 @@ static struct ispmdvec mdvec_2100 = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
isp_pci_dumpregs
};
@@ -133,8 +127,7 @@ static struct ispmdvec mdvec_2200 = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
isp_pci_dumpregs
};
@@ -145,8 +138,7 @@ static struct ispmdvec mdvec_2300 = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
isp_pci_dumpregs
};
@@ -157,8 +149,7 @@ static struct ispmdvec mdvec_2400 = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
NULL
};
@@ -169,8 +160,7 @@ static struct ispmdvec mdvec_2500 = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
NULL
};
@@ -181,8 +171,7 @@ static struct ispmdvec mdvec_2600 = {
isp_pci_mbxdma,
isp_pci_dmasetup,
isp_common_dmateardown,
- isp_pci_reset0,
- isp_pci_reset1,
+ isp_pci_irqsetup,
NULL
};
@@ -681,26 +670,19 @@ isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp)
static int
isp_pci_attach(device_t dev)
{
- int i, locksetup = 0;
+ struct isp_pcisoftc *pcs = device_get_softc(dev);
+ ispsoftc_t *isp = &pcs->pci_isp;
+ int i;
uint32_t data, cmd, linesz, did;
- struct isp_pcisoftc *pcs;
- ispsoftc_t *isp;
size_t psize, xsize;
char fwname[32];
- pcs = device_get_softc(dev);
- if (pcs == NULL) {
- device_printf(dev, "cannot get softc\n");
- return (ENOMEM);
- }
- memset(pcs, 0, sizeof (*pcs));
-
pcs->pci_dev = dev;
- isp = &pcs->pci_isp;
isp->isp_dev = dev;
isp->isp_nchan = 1;
if (sizeof (bus_addr_t) > 4)
isp->isp_osinfo.sixtyfourbit = 1;
+ mtx_init(&isp->isp_osinfo.lock, "isp", NULL, MTX_DEF);
/*
* Get Generic Options
@@ -980,10 +962,6 @@ isp_pci_attach(device_t dev)
goto bad;
}
- /* Make sure the lock is set up. */
- mtx_init(&isp->isp_osinfo.lock, "isp", NULL, MTX_DEF);
- locksetup++;
-
if (isp_setup_intr(dev, pcs->irq, ISP_IFLAGS, NULL, isp_platform_intr, isp, &pcs->ih)) {
device_printf(dev, "could not setup interrupt\n");
goto bad;
@@ -1007,7 +985,7 @@ isp_pci_attach(device_t dev)
ISP_UNLOCK(isp);
if (isp_attach(isp)) {
ISP_LOCK(isp);
- isp_uninit(isp);
+ isp_shutdown(isp);
ISP_UNLOCK(isp);
goto bad;
}
@@ -1017,9 +995,6 @@ bad:
if (pcs->ih) {
(void) bus_teardown_intr(dev, pcs->irq, pcs->ih);
}
- if (locksetup) {
- mtx_destroy(&isp->isp_osinfo.lock);
- }
if (pcs->irq) {
(void) bus_release_resource(dev, SYS_RES_IRQ, pcs->iqd, pcs->irq);
}
@@ -1040,43 +1015,34 @@ bad:
free(pcs->pci_isp.isp_osinfo.pc.ptr, M_DEVBUF);
pcs->pci_isp.isp_osinfo.pc.ptr = NULL;
}
+ mtx_destroy(&isp->isp_osinfo.lock);
return (ENXIO);
}
static int
isp_pci_detach(device_t dev)
{
- struct isp_pcisoftc *pcs;
- ispsoftc_t *isp;
+ struct isp_pcisoftc *pcs = device_get_softc(dev);
+ ispsoftc_t *isp = &pcs->pci_isp;
int status;
- pcs = device_get_softc(dev);
- if (pcs == NULL) {
- return (ENXIO);
- }
- isp = (ispsoftc_t *) pcs;
status = isp_detach(isp);
if (status)
return (status);
ISP_LOCK(isp);
- isp_uninit(isp);
- if (pcs->ih) {
- (void) bus_teardown_intr(dev, pcs->irq, pcs->ih);
- }
+ isp_shutdown(isp);
ISP_UNLOCK(isp);
- mtx_destroy(&isp->isp_osinfo.lock);
+ if (pcs->ih)
+ (void) bus_teardown_intr(dev, pcs->irq, pcs->ih);
(void) bus_release_resource(dev, SYS_RES_IRQ, pcs->iqd, pcs->irq);
- if (pcs->msicount) {
+ if (pcs->msicount)
pci_release_msi(dev);
- }
(void) bus_release_resource(dev, pcs->rtp, pcs->rgd, pcs->regs);
if (pcs->regs1)
(void) bus_release_resource(dev, pcs->rtp1, pcs->rgd1, pcs->regs1);
if (pcs->regs2)
(void) bus_release_resource(dev, pcs->rtp2, pcs->rgd2, pcs->regs2);
- /*
- * XXX: THERE IS A LOT OF LEAKAGE HERE
- */
+ isp_pci_mbxdmafree(isp);
if (pcs->pci_isp.isp_param) {
free(pcs->pci_isp.isp_param, M_DEVBUF);
pcs->pci_isp.isp_param = NULL;
@@ -1085,6 +1051,7 @@ isp_pci_detach(device_t dev)
free(pcs->pci_isp.isp_osinfo.pc.ptr, M_DEVBUF);
pcs->pci_isp.isp_osinfo.pc.ptr = NULL;
}
+ mtx_destroy(&isp->isp_osinfo.lock);
return (0);
}
@@ -1571,56 +1538,39 @@ isp_pci_mbxdma(ispsoftc_t *isp)
struct imush im;
isp_ecmd_t *ecmd;
- /*
- * Already been here? If so, leave...
- */
- if (isp->isp_rquest) {
+ /* Already been here? If so, leave... */
+ if (isp->isp_xflist != NULL)
+ return (0);
+ if (isp->isp_rquest != NULL && isp->isp_maxcmds == 0)
return (0);
- }
ISP_UNLOCK(isp);
-
- if (isp->isp_maxcmds == 0) {
- isp_prt(isp, ISP_LOGERR, "maxcmds not set");
- ISP_LOCK(isp);
- return (1);
- }
+ if (isp->isp_rquest != NULL)
+ goto gotmaxcmds;
hlim = BUS_SPACE_MAXADDR;
if (IS_ULTRA2(isp) || IS_FC(isp) || IS_1240(isp)) {
- if (sizeof (bus_size_t) > 4) {
+ if (sizeof (bus_size_t) > 4)
slim = (bus_size_t) (1ULL << 32);
- } else {
+ else
slim = (bus_size_t) (1UL << 31);
- }
llim = BUS_SPACE_MAXADDR;
} else {
- llim = BUS_SPACE_MAXADDR_32BIT;
slim = (1UL << 24);
+ llim = BUS_SPACE_MAXADDR_32BIT;
}
-
- len = isp->isp_maxcmds * sizeof (struct isp_pcmd);
- isp->isp_osinfo.pcmd_pool = (struct isp_pcmd *) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO);
-
- if (isp->isp_osinfo.sixtyfourbit) {
+ if (isp->isp_osinfo.sixtyfourbit)
nsegs = ISP_NSEG64_MAX;
- } else {
+ else
nsegs = ISP_NSEG_MAX;
- }
- 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)) {
- free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
+ 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)) {
ISP_LOCK(isp);
isp_prt(isp, ISP_LOGERR, "could not create master dma tag");
return (1);
}
- len = sizeof (isp_hdl_t) * isp->isp_maxcmds;
- isp->isp_xflist = (isp_hdl_t *) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO);
- for (len = 0; len < isp->isp_maxcmds - 1; len++) {
- isp->isp_xflist[len].cmd = &isp->isp_xflist[len+1];
- }
- isp->isp_xffree = isp->isp_xflist;
-
/*
* Allocate and map the request queue and a region for external
* DMA addressable command/status structures (22XX and later).
@@ -1632,20 +1582,20 @@ isp_pci_mbxdma(ispsoftc_t *isp)
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
len, 1, len, 0, &isp->isp_osinfo.reqdmat)) {
isp_prt(isp, ISP_LOGERR, "cannot create request DMA tag");
- goto bad1;
+ goto bad;
}
if (bus_dmamem_alloc(isp->isp_osinfo.reqdmat, (void **)&base,
BUS_DMA_COHERENT, &isp->isp_osinfo.reqmap) != 0) {
isp_prt(isp, ISP_LOGERR, "cannot allocate request DMA memory");
bus_dma_tag_destroy(isp->isp_osinfo.reqdmat);
- goto bad1;
+ goto bad;
}
isp->isp_rquest = base;
im.error = 0;
if (bus_dmamap_load(isp->isp_osinfo.reqdmat, isp->isp_osinfo.reqmap,
base, len, imc, &im, 0) || im.error) {
isp_prt(isp, ISP_LOGERR, "error loading request DMA map %d", im.error);
- goto bad1;
+ goto bad;
}
isp_prt(isp, ISP_LOGDEBUG0, "request area @ 0x%jx/0x%jx",
(uintmax_t)im.maddr, (uintmax_t)len);
@@ -1673,20 +1623,20 @@ isp_pci_mbxdma(ispsoftc_t *isp)
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
len, 1, len, 0, &isp->isp_osinfo.respdmat)) {
isp_prt(isp, ISP_LOGERR, "cannot create response DMA tag");
- goto bad1;
+ goto bad;
}
if (bus_dmamem_alloc(isp->isp_osinfo.respdmat, (void **)&base,
BUS_DMA_COHERENT, &isp->isp_osinfo.respmap) != 0) {
isp_prt(isp, ISP_LOGERR, "cannot allocate response DMA memory");
bus_dma_tag_destroy(isp->isp_osinfo.respdmat);
- goto bad1;
+ goto bad;
}
isp->isp_result = base;
im.error = 0;
if (bus_dmamap_load(isp->isp_osinfo.respdmat, isp->isp_osinfo.respmap,
base, len, imc, &im, 0) || im.error) {
isp_prt(isp, ISP_LOGERR, "error loading response DMA map %d", im.error);
- goto bad1;
+ goto bad;
}
isp_prt(isp, ISP_LOGDEBUG0, "response area @ 0x%jx/0x%jx",
(uintmax_t)im.maddr, (uintmax_t)len);
@@ -1702,13 +1652,13 @@ isp_pci_mbxdma(ispsoftc_t *isp)
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
len, 1, len, 0, &isp->isp_osinfo.atiodmat)) {
isp_prt(isp, ISP_LOGERR, "cannot create ATIO DMA tag");
- goto bad1;
+ goto bad;
}
if (bus_dmamem_alloc(isp->isp_osinfo.atiodmat, (void **)&base,
BUS_DMA_COHERENT, &isp->isp_osinfo.atiomap) != 0) {
isp_prt(isp, ISP_LOGERR, "cannot allocate ATIO DMA memory");
bus_dma_tag_destroy(isp->isp_osinfo.atiodmat);
- goto bad1;
+ goto bad;
}
isp->isp_atioq = base;
im.error = 0;
@@ -1754,6 +1704,7 @@ isp_pci_mbxdma(ispsoftc_t *isp)
base, ISP_FC_SCRLEN, imc, &im, 0) || im.error) {
bus_dmamem_free(isp->isp_osinfo.scdmat,
base, fc->scmap);
+ FCPARAM(isp, cmap)->isp_scratch = NULL;
goto bad;
}
FCPARAM(isp, cmap)->isp_scdma = im.maddr;
@@ -1775,83 +1726,134 @@ isp_pci_mbxdma(ispsoftc_t *isp)
}
}
+ if (isp->isp_maxcmds == 0) {
+ ISP_LOCK(isp);
+ return (0);
+ }
+
+gotmaxcmds:
+ len = isp->isp_maxcmds * sizeof (struct isp_pcmd);
+ isp->isp_osinfo.pcmd_pool = (struct isp_pcmd *)
+ malloc(len, M_DEVBUF, M_WAITOK | M_ZERO);
for (i = 0; i < isp->isp_maxcmds; i++) {
struct isp_pcmd *pcmd = &isp->isp_osinfo.pcmd_pool[i];
error = bus_dmamap_create(isp->isp_osinfo.dmat, 0, &pcmd->dmap);
if (error) {
isp_prt(isp, ISP_LOGERR, "error %d creating per-cmd DMA maps", error);
while (--i >= 0) {
- bus_dmamap_destroy(isp->isp_osinfo.dmat, isp->isp_osinfo.pcmd_pool[i].dmap);
+ bus_dmamap_destroy(isp->isp_osinfo.dmat,
+ isp->isp_osinfo.pcmd_pool[i].dmap);
}
goto bad;
}
callout_init_mtx(&pcmd->wdog, &isp->isp_osinfo.lock, 0);
- if (i == isp->isp_maxcmds-1) {
+ if (i == isp->isp_maxcmds-1)
pcmd->next = NULL;
- } else {
+ else
pcmd->next = &isp->isp_osinfo.pcmd_pool[i+1];
- }
}
isp->isp_osinfo.pcmd_free = &isp->isp_osinfo.pcmd_pool[0];
+
+ len = sizeof (isp_hdl_t) * isp->isp_maxcmds;
+ isp->isp_xflist = (isp_hdl_t *) malloc(len, M_DEVBUF, M_WAITOK | M_ZERO);
+ for (len = 0; len < isp->isp_maxcmds - 1; len++)
+ isp->isp_xflist[len].cmd = &isp->isp_xflist[len+1];
+ isp->isp_xffree = isp->isp_xflist;
+
ISP_LOCK(isp);
return (0);
bad:
+ isp_pci_mbxdmafree(isp);
+ ISP_LOCK(isp);
+ return (1);
+}
+
+static void
+isp_pci_mbxdmafree(ispsoftc_t *isp)
+{
+ int i;
+
+ if (isp->isp_xflist != NULL) {
+ free(isp->isp_xflist, M_DEVBUF);
+ isp->isp_xflist = NULL;
+ }
+ if (isp->isp_osinfo.pcmd_pool != NULL) {
+ for (i = 0; i < isp->isp_maxcmds; i++) {
+ bus_dmamap_destroy(isp->isp_osinfo.dmat,
+ isp->isp_osinfo.pcmd_pool[i].dmap);
+ }
+ free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
+ isp->isp_osinfo.pcmd_pool = NULL;
+ }
if (IS_FC(isp)) {
- while (--cmap >= 0) {
- struct isp_fc *fc = ISP_FC_PC(isp, cmap);
- bus_dmamap_unload(isp->isp_osinfo.scdmat, fc->scmap);
- bus_dmamem_free(isp->isp_osinfo.scdmat,
- FCPARAM(isp, cmap)->isp_scratch, fc->scmap);
+ for (i = 0; i < isp->isp_nchan; i++) {
+ struct isp_fc *fc = ISP_FC_PC(isp, i);
+ if (FCPARAM(isp, i)->isp_scdma != 0) {
+ bus_dmamap_unload(isp->isp_osinfo.scdmat,
+ fc->scmap);
+ FCPARAM(isp, i)->isp_scdma = 0;
+ }
+ if (FCPARAM(isp, i)->isp_scratch != NULL) {
+ bus_dmamem_free(isp->isp_osinfo.scdmat,
+ FCPARAM(isp, i)->isp_scratch, fc->scmap);
+ FCPARAM(isp, i)->isp_scratch = NULL;
+ }
while (fc->nexus_free_list) {
struct isp_nexus *n = fc->nexus_free_list;
fc->nexus_free_list = n->next;
free(n, M_DEVBUF);
}
}
- bus_dma_tag_destroy(isp->isp_osinfo.scdmat);
- bus_dmamap_unload(isp->isp_osinfo.iocbdmat, isp->isp_osinfo.iocbmap);
- bus_dmamem_free(isp->isp_osinfo.iocbdmat, isp->isp_iocb,
- isp->isp_osinfo.iocbmap);
- bus_dma_tag_destroy(isp->isp_osinfo.iocbdmat);
- }
-bad1:
- if (isp->isp_rquest_dma != 0) {
- bus_dmamap_unload(isp->isp_osinfo.reqdmat,
- isp->isp_osinfo.reqmap);
- }
- if (isp->isp_rquest != NULL) {
- bus_dmamem_free(isp->isp_osinfo.reqdmat, isp->isp_rquest,
- isp->isp_osinfo.reqmap);
- bus_dma_tag_destroy(isp->isp_osinfo.reqdmat);
- }
- if (isp->isp_result_dma != 0) {
- bus_dmamap_unload(isp->isp_osinfo.respdmat,
- isp->isp_osinfo.respmap);
- }
- if (isp->isp_result != NULL) {
- bus_dmamem_free(isp->isp_osinfo.respdmat, isp->isp_result,
- isp->isp_osinfo.respmap);
- bus_dma_tag_destroy(isp->isp_osinfo.respdmat);
+ if (isp->isp_iocb_dma != 0) {
+ bus_dma_tag_destroy(isp->isp_osinfo.scdmat);
+ bus_dmamap_unload(isp->isp_osinfo.iocbdmat,
+ isp->isp_osinfo.iocbmap);
+ isp->isp_iocb_dma = 0;
+ }
+ if (isp->isp_iocb != NULL) {
+ bus_dmamem_free(isp->isp_osinfo.iocbdmat,
+ isp->isp_iocb, isp->isp_osinfo.iocbmap);
+ bus_dma_tag_destroy(isp->isp_osinfo.iocbdmat);
+ }
}
#ifdef ISP_TARGET_MODE
if (IS_24XX(isp)) {
if (isp->isp_atioq_dma != 0) {
bus_dmamap_unload(isp->isp_osinfo.atiodmat,
isp->isp_osinfo.atiomap);
+ isp->isp_atioq_dma = 0;
}
if (isp->isp_atioq != NULL) {
- bus_dmamem_free(isp->isp_osinfo.reqdmat, isp->isp_atioq,
+ bus_dmamem_free(isp->isp_osinfo.atiodmat, isp->isp_atioq,
isp->isp_osinfo.atiomap);
bus_dma_tag_destroy(isp->isp_osinfo.atiodmat);
+ isp->isp_atioq = NULL;
}
}
#endif
- free(isp->isp_xflist, M_DEVBUF);
- free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
- isp->isp_rquest = NULL;
- ISP_LOCK(isp);
- return (1);
+ if (isp->isp_result_dma != 0) {
+ bus_dmamap_unload(isp->isp_osinfo.respdmat,
+ isp->isp_osinfo.respmap);
+ isp->isp_result_dma = 0;
+ }
+ if (isp->isp_result != NULL) {
+ bus_dmamem_free(isp->isp_osinfo.respdmat, isp->isp_result,
+ isp->isp_osinfo.respmap);
+ bus_dma_tag_destroy(isp->isp_osinfo.respdmat);
+ isp->isp_result = NULL;
+ }
+ if (isp->isp_rquest_dma != 0) {
+ bus_dmamap_unload(isp->isp_osinfo.reqdmat,
+ isp->isp_osinfo.reqmap);
+ isp->isp_rquest_dma = 0;
+ }
+ if (isp->isp_rquest != NULL) {
+ bus_dmamem_free(isp->isp_osinfo.reqdmat, isp->isp_rquest,
+ isp->isp_osinfo.reqmap);
+ bus_dma_tag_destroy(isp->isp_osinfo.reqdmat);
+ isp->isp_rquest = NULL;
+ }
}
typedef struct {
@@ -2071,21 +2073,11 @@ isp_pci_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff)
return (CMD_QUEUED);
}
-static void
-isp_pci_reset0(ispsoftc_t *isp)
+static int
+isp_pci_irqsetup(ispsoftc_t *isp)
{
- ISP_DISABLE_INTS(isp);
-}
-static void
-isp_pci_reset1(ispsoftc_t *isp)
-{
- if (!IS_24XX(isp)) {
- /* Make sure the BIOS is disabled */
- isp_pci_wr_reg(isp, HCCR, PCI_HCCR_CMD_BIOS);
- }
- /* and enable interrupts */
- ISP_ENABLE_INTS(isp);
+ return (0);
}
static void
OpenPOWER on IntegriCloud