summaryrefslogtreecommitdiff
path: root/sys/dev/ic/ami.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/ic/ami.c')
-rw-r--r--sys/dev/ic/ami.c64
1 files changed, 32 insertions, 32 deletions
diff --git a/sys/dev/ic/ami.c b/sys/dev/ic/ami.c
index de0a387a03c..c5f394ea479 100644
--- a/sys/dev/ic/ami.c
+++ b/sys/dev/ic/ami.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ami.c,v 1.156 2006/05/12 20:51:25 marco Exp $ */
+/* $OpenBSD: ami.c,v 1.157 2006/05/21 02:51:09 dlg Exp $ */
/*
* Copyright (c) 2001 Michael Shalayeff
@@ -1151,16 +1151,16 @@ ami_done_pt(struct ami_softc *sc, struct ami_ccb *ccb)
struct ami_rawsoftc *rsc = link->adapter_softc;
u_int8_t target = link->target, type;
+ bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
+ ccb->ccb_offset, sizeof(struct ami_ccbmem),
+ BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+
if (xs->data != NULL) {
bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0,
ccb->ccb_dmamap->dm_mapsize,
(xs->flags & SCSI_DATA_IN) ?
BUS_DMASYNC_POSTREAD : BUS_DMASYNC_POSTWRITE);
- bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
- ccb->ccb_offset, sizeof(struct ami_ccbmem),
- BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
-
bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmamap);
}
@@ -1361,45 +1361,45 @@ ami_load_ptmem(struct ami_softc *sc, struct ami_ccb *ccb, void *data,
{
bus_dmamap_t dmap = ccb->ccb_dmamap;
bus_dma_segment_t *sgd;
- int error = 0, i;
-
- if (data == NULL) /* nothing to do */
- return (0);
+ int error, i;
- error = bus_dmamap_load(sc->sc_dmat, ccb->ccb_dmamap, data, len,
- NULL, nowait ? BUS_DMA_NOWAIT : BUS_DMA_WAITOK);
- if (error) {
- if (error == EFBIG)
- printf("more than %d dma segs\n", AMI_MAXOFFSETS);
- else
- printf("error %d loading dma map\n", error);
+ if (data != NULL) {
+ error = bus_dmamap_load(sc->sc_dmat, dmap, data, len, NULL,
+ nowait ? BUS_DMA_NOWAIT : BUS_DMA_WAITOK);
+ if (error) {
+ if (error == EFBIG)
+ printf("more than %d dma segs\n",
+ AMI_MAXOFFSETS);
+ else
+ printf("error %d loading dma map\n", error);
- return (1);
- }
+ return (1);
+ }
- sgd = dmap->dm_segs;
- if (dmap->dm_nsegs > 1) {
- struct ami_sgent *sgl = ccb->ccb_sglist;
+ sgd = dmap->dm_segs;
+ if (dmap->dm_nsegs > 1) {
+ struct ami_sgent *sgl = ccb->ccb_sglist;
- ccb->ccb_pt->apt_nsge = dmap->dm_nsegs;
- ccb->ccb_pt->apt_data = ccb->ccb_sglistpa;
+ ccb->ccb_pt->apt_nsge = dmap->dm_nsegs;
+ ccb->ccb_pt->apt_data = ccb->ccb_sglistpa;
- for (i = 0; i < dmap->dm_nsegs; i++) {
- sgl[i].asg_addr = htole32(sgd[i].ds_addr);
- sgl[i].asg_len = htole32(sgd[i].ds_len);
+ for (i = 0; i < dmap->dm_nsegs; i++) {
+ sgl[i].asg_addr = htole32(sgd[i].ds_addr);
+ sgl[i].asg_len = htole32(sgd[i].ds_len);
+ }
+ } else {
+ ccb->ccb_pt->apt_nsge = 0;
+ ccb->ccb_pt->apt_data = htole32(sgd->ds_addr);
}
- } else {
- ccb->ccb_pt->apt_nsge = 0;
- ccb->ccb_pt->apt_data = htole32(sgd->ds_addr);
+
+ bus_dmamap_sync(sc->sc_dmat, dmap, 0, dmap->dm_mapsize,
+ read ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
}
bus_dmamap_sync(sc->sc_dmat, AMIMEM_MAP(sc->sc_ccbmem_am),
ccb->ccb_offset, sizeof(struct ami_ccbmem),
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
- bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0, dmap->dm_mapsize,
- read ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
-
return (0);
}