summaryrefslogtreecommitdiffstats
path: root/sys/dev/isp/isp_freebsd.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/isp/isp_freebsd.h')
-rw-r--r--sys/dev/isp/isp_freebsd.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index 44c8bdf..5d21535 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -338,15 +338,27 @@ struct isposinfo {
#define MAXISPREQUEST(isp) ((IS_FC(isp) || IS_ULTRA2(isp))? 1024 : 256)
-#define MEMORYBARRIER(isp, type, offset, size) \
+#define MEMORYBARRIER(isp, type, offset, size, chan) \
switch (type) { \
case SYNC_SFORDEV: \
+{ \
+ struct isp_fc *fc = ISP_FC_PC(isp, chan); \
+ bus_dmamap_sync(fc->tdmat, fc->tdmap, \
+ BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); \
+ break; \
+} \
case SYNC_REQUEST: \
bus_dmamap_sync(isp->isp_osinfo.cdmat, \
isp->isp_osinfo.cdmap, \
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); \
break; \
case SYNC_SFORCPU: \
+{ \
+ struct isp_fc *fc = ISP_FC_PC(isp, chan); \
+ bus_dmamap_sync(fc->tdmat, fc->tdmap, \
+ BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); \
+ break; \
+} \
case SYNC_RESULT: \
bus_dmamap_sync(isp->isp_osinfo.cdmat, \
isp->isp_osinfo.cdmap, \
OpenPOWER on IntegriCloud