Page MenuHomeFreeBSD

D44860.diff
No OneTemporary

D44860.diff

diff --git a/sys/dev/aic7xxx/aic79xx_osm.c b/sys/dev/aic7xxx/aic79xx_osm.c
--- a/sys/dev/aic7xxx/aic79xx_osm.c
+++ b/sys/dev/aic7xxx/aic79xx_osm.c
@@ -303,6 +303,25 @@
ahd_unlock(ahd);
}
+static void
+ahd_sync_ccb(struct ahd_softc *ahd, struct scb *scb, union ccb *ccb, bool post)
+{
+ bus_dmasync_op_t op;
+ uint32_t rdmask;
+
+ if (ccb->ccb_h.func_code == XPT_CONT_TARGET_IO)
+ rdmask = CAM_DIR_OUT;
+ else
+ rdmask = CAM_DIR_IN;
+
+ if ((ccb->ccb_h.flags & CAM_DIR_MASK) == rdmask)
+ op = post ? BUS_DMASYNC_POSTREAD : BUS_DMASYNC_PREREAD;
+ else
+ op = post ? BUS_DMASYNC_POSTWRITE : BUS_DMASYNC_PREWRITE;
+
+ bus_dmamap_sync(ahd->buffer_dmat, scb->dmamap, op);
+}
+
/*
* We have an scb which has been processed by the
* adaptor, now we look to see how the operation
@@ -324,13 +343,7 @@
callout_stop(&scb->io_timer);
if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) {
- bus_dmasync_op_t op;
-
- if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)
- op = BUS_DMASYNC_POSTREAD;
- else
- op = BUS_DMASYNC_POSTWRITE;
- bus_dmamap_sync(ahd->buffer_dmat, scb->dmamap, op);
+ ahd_sync_ccb(ahd, scb, ccb, true);
bus_dmamap_unload(ahd->buffer_dmat, scb->dmamap);
}
@@ -961,7 +974,6 @@
scb->sg_count = 0;
if (nsegments != 0) {
void *sg;
- bus_dmasync_op_t op;
u_int i;
/* Copy the segments into our SG list */
@@ -971,13 +983,8 @@
/*last*/i == 1);
dm_segs++;
}
-
- if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)
- op = BUS_DMASYNC_PREREAD;
- else
- op = BUS_DMASYNC_PREWRITE;
- bus_dmamap_sync(ahd->buffer_dmat, scb->dmamap, op);
+ ahd_sync_ccb(ahd, scb, ccb, false);
if (ccb->ccb_h.func_code == XPT_CONT_TARGET_IO) {
struct target_data *tdata;
diff --git a/sys/dev/aic7xxx/aic7xxx_osm.c b/sys/dev/aic7xxx/aic7xxx_osm.c
--- a/sys/dev/aic7xxx/aic7xxx_osm.c
+++ b/sys/dev/aic7xxx/aic7xxx_osm.c
@@ -302,6 +302,25 @@
ahc_unlock(ahc);
}
+static void
+ahc_sync_ccb(struct ahc_softc *ahc, struct scb *scb, union ccb *ccb, bool post)
+{
+ bus_dmasync_op_t op;
+ uint32_t rdmask;
+
+ if (ccb->ccb_h.func_code == XPT_CONT_TARGET_IO)
+ rdmask = CAM_DIR_OUT;
+ else
+ rdmask = CAM_DIR_IN;
+
+ if ((ccb->ccb_h.flags & CAM_DIR_MASK) == rdmask)
+ op = post ? BUS_DMASYNC_POSTREAD : BUS_DMASYNC_PREREAD;
+ else
+ op = post ? BUS_DMASYNC_POSTWRITE : BUS_DMASYNC_PREWRITE;
+
+ bus_dmamap_sync(ahc->buffer_dmat, scb->dmamap, op);
+}
+
/*
* We have an scb which has been processed by the
* adaptor, now we look to see how the operation
@@ -333,13 +352,7 @@
callout_stop(&scb->io_timer);
if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) {
- bus_dmasync_op_t op;
-
- if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)
- op = BUS_DMASYNC_POSTREAD;
- else
- op = BUS_DMASYNC_POSTWRITE;
- bus_dmamap_sync(ahc->buffer_dmat, scb->dmamap, op);
+ ahc_sync_ccb(ahc, scb, ccb, true);
bus_dmamap_unload(ahc->buffer_dmat, scb->dmamap);
}
@@ -943,7 +956,6 @@
if (nsegments != 0) {
struct ahc_dma_seg *sg;
bus_dma_segment_t *end_seg;
- bus_dmasync_op_t op;
end_seg = dm_segs + nsegments;
@@ -968,12 +980,7 @@
*/
scb->hscb->sgptr = aic_htole32(scb->sg_list_phys|SG_FULL_RESID);
- if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)
- op = BUS_DMASYNC_PREREAD;
- else
- op = BUS_DMASYNC_PREWRITE;
-
- bus_dmamap_sync(ahc->buffer_dmat, scb->dmamap, op);
+ ahc_sync_ccb(ahc, scb, ccb, false);
if (ccb->ccb_h.func_code == XPT_CONT_TARGET_IO) {
struct target_data *tdata;

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 20, 12:30 PM (21 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14738461
Default Alt Text
D44860.diff (3 KB)

Event Timeline