diff options
author | mjacob <mjacob@FreeBSD.org> | 2012-08-03 14:25:35 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 2012-08-03 14:25:35 +0000 |
commit | 553b28950617d1cb84240453941c4866c5253b82 (patch) | |
tree | 6eaff3c0dc400d1df2bf690b47ba2513cefef1d5 /sys/dev/isp | |
parent | aea2d2f2c51943cd210e6b8f38dbf4f02c9a5607 (diff) | |
download | FreeBSD-src-553b28950617d1cb84240453941c4866c5253b82.zip FreeBSD-src-553b28950617d1cb84240453941c4866c5253b82.tar.gz |
Oops. We only do allocate room for extended commands
and responses for 2300 cards are newer.
Sponsored by: Spectralogic
Noticed by: Our Friend Manfred
MFC after: 1 month
X-MFC: 238869
Diffstat (limited to 'sys/dev/isp')
-rw-r--r-- | sys/dev/isp/isp_pci.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c index f9f419a..d4a214b 100644 --- a/sys/dev/isp/isp_pci.c +++ b/sys/dev/isp/isp_pci.c @@ -1482,16 +1482,18 @@ imc(void *arg, bus_dma_segment_t *segs, int nseg, int error) segs->ds_addr += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp)); imushp->vbase += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp)); - imushp->isp->isp_osinfo.ecmd_dma = segs->ds_addr; - imushp->isp->isp_osinfo.ecmd_free = (isp_ecmd_t *)imushp->vbase; - imushp->isp->isp_osinfo.ecmd_base = imushp->isp->isp_osinfo.ecmd_free; - for (ecmd = imushp->isp->isp_osinfo.ecmd_free; ecmd < &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) { - if (ecmd == &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS - 1]) { - ecmd->next = NULL; - } else { - ecmd->next = ecmd + 1; - } - } + if (imushp->isp->isp_type >= ISP_HA_FC_2300) { + imushp->isp->isp_osinfo.ecmd_dma = segs->ds_addr; + imushp->isp->isp_osinfo.ecmd_free = (isp_ecmd_t *)imushp->vbase; + imushp->isp->isp_osinfo.ecmd_base = imushp->isp->isp_osinfo.ecmd_free; + for (ecmd = imushp->isp->isp_osinfo.ecmd_free; ecmd < &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) { + if (ecmd == &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS - 1]) { + ecmd->next = NULL; + } else { + ecmd->next = ecmd + 1; + } + } + } #ifdef ISP_TARGET_MODE segs->ds_addr += (N_XCMDS * XCMD_SIZE); imushp->vbase += (N_XCMDS * XCMD_SIZE); |