summaryrefslogtreecommitdiffstats
path: root/sys/dev/isp/isp_freebsd.h
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2002-04-02 23:36:14 +0000
committermjacob <mjacob@FreeBSD.org>2002-04-02 23:36:14 +0000
commitaad01d8119fbe546c9fef66008eae583874245f8 (patch)
tree1353dda2753cfda5c18da616a495bbf50d2c9804 /sys/dev/isp/isp_freebsd.h
parent2a92b7860202c657cca9efd1658d53c2ed3da121 (diff)
downloadFreeBSD-src-aad01d8119fbe546c9fef66008eae583874245f8.zip
FreeBSD-src-aad01d8119fbe546c9fef66008eae583874245f8.tar.gz
Redo stuff for sparc64- primarily fix bus dma implementation. The endian
stuff was right, but the busdma stuff was massively not right. Didn't really test on ia64 or i386- don't have the former h/w and my FreeBSD-current disk is unwell right now. Hope that this is okay. MFC after: 1 week
Diffstat (limited to 'sys/dev/isp/isp_freebsd.h')
-rw-r--r--sys/dev/isp/isp_freebsd.h29
1 files changed, 20 insertions, 9 deletions
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index e1a0cec..38f0b36 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -63,7 +63,7 @@
/*
* Efficiency- get rid of SBus code && tests unless we need them.
*/
-#if defined(__sparcv9__ ) || defined(__sparc__)
+#if _MACHINE_ARCH == sparc64
#define ISP_SBUS_SUPPORTED 1
#else
#define ISP_SBUS_SUPPORTED 0
@@ -117,6 +117,10 @@ struct isposinfo {
struct mtx lock;
struct cv kthread_cv;
struct proc *kproc;
+ bus_dma_tag_t cdmat;
+ bus_dmamap_t cdmap;
+#define isp_cdmat isp_osinfo.cdmat
+#define isp_cdmap isp_osinfo.cdmap
#ifdef ISP_TARGET_MODE
#define TM_WANTED 0x80
#define TM_BUSY 0x40
@@ -173,14 +177,21 @@ struct isposinfo {
#define MAXISPREQUEST(isp) 256
-#if defined(__alpha__)
-#define MEMORYBARRIER(isp, type, offset, size) alpha_mb()
-#elif defined(__ia64__)
-#define MEMORYBARRIER(isp, type, offset, size) \
- do { ia64_mf(); ia64_mf_a(); } while (0)
-#else
-#define MEMORYBARRIER(isp, type, offset, size)
-#endif
+#define MEMORYBARRIER(isp, type, offset, size) \
+switch (type) { \
+case SYNC_SFORDEV: \
+case SYNC_REQUEST: \
+ bus_dmamap_sync(isp->isp_cdmat, isp->isp_cdmap, \
+ BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); \
+ break; \
+case SYNC_SFORCPU: \
+case SYNC_RESULT: \
+ bus_dmamap_sync(isp->isp_cdmat, isp->isp_cdmap, \
+ BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); \
+ break; \
+default: \
+ break; \
+}
#define MBOX_ACQUIRE(isp)
#define MBOX_WAIT_COMPLETE isp_mbox_wait_complete
OpenPOWER on IntegriCloud