summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2000-10-18 10:30:12 +0000
committerjhb <jhb@FreeBSD.org>2000-10-18 10:30:12 +0000
commita4104b417ea985c653c0668f77ffee40394327a6 (patch)
tree65f9ce24ef1b9657dabe0c1eb26b1faa5882ec1c
parent8aa01908ad19f43c27b74c89bcd456610e34b435 (diff)
downloadFreeBSD-src-a4104b417ea985c653c0668f77ffee40394327a6.zip
FreeBSD-src-a4104b417ea985c653c0668f77ffee40394327a6.tar.gz
Add in a simple API for memory barriers to machine/bus.h:
- barrier_read() enforces a memory read barrier - barrier_write() enforces a memory write barrier - barrier_rw() enforces a memory read/write barrier
-rw-r--r--sys/alpha/include/bus.h12
-rw-r--r--sys/amd64/include/bus_amd64.h23
-rw-r--r--sys/amd64/include/bus_at386.h23
-rw-r--r--sys/amd64/include/bus_dma.h23
-rw-r--r--sys/i386/include/bus_at386.h23
-rw-r--r--sys/i386/include/bus_dma.h23
-rw-r--r--sys/i386/include/bus_pc98.h23
-rw-r--r--sys/ia64/include/bus.h22
-rw-r--r--sys/sys/bus_dma.h23
9 files changed, 195 insertions, 0 deletions
diff --git a/sys/alpha/include/bus.h b/sys/alpha/include/bus.h
index 7fe2726..1810c4b 100644
--- a/sys/alpha/include/bus.h
+++ b/sys/alpha/include/bus.h
@@ -364,6 +364,18 @@ void busspace_generic_barrier(struct alpha_busspace *space,
#define bus_space_barrier(t, h, o, l, f) \
(t)->ab_ops->abo_barrier(t, (h)+(o), l, f)
+#define barrier_read \
+ bus_space_barrier(busspace_isa_mem, 0, BUS_SPACE_UNRESTRICTED, \
+ BUS_SPACE_BARRIER_READ)
+
+#define barrier_write \
+ bus_space_barrier(busspace_isa_mem, 0, BUS_SPACE_UNRESTRICTED, \
+ BUS_SPACE_BARRIER_WRITE)
+
+#define barrier_rw \
+ bus_space_barrier(busspace_isa_mem, 0, BUS_SPACE_UNRESTRICTED, \
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE)
+
/*
* Flags used in various bus DMA methods.
*/
diff --git a/sys/amd64/include/bus_amd64.h b/sys/amd64/include/bus_amd64.h
index 2d84400..3423e6b 100644
--- a/sys/amd64/include/bus_amd64.h
+++ b/sys/amd64/include/bus_amd64.h
@@ -1154,6 +1154,29 @@ bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
/*
+ * Generic memory barrier functions.
+ */
+static __inline void
+barrier_read(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0, BUS_SPACE_BARRIER_READ);
+}
+
+static __inline void
+barrier_write(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_WRITE);
+}
+
+static __inline void
+barrier_rw(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+}
+
+/*
* Flags used in various bus DMA methods.
*/
#define BUS_DMA_WAITOK 0x00 /* safe to sleep (pseudo-flag) */
diff --git a/sys/amd64/include/bus_at386.h b/sys/amd64/include/bus_at386.h
index 2d84400..3423e6b 100644
--- a/sys/amd64/include/bus_at386.h
+++ b/sys/amd64/include/bus_at386.h
@@ -1154,6 +1154,29 @@ bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
/*
+ * Generic memory barrier functions.
+ */
+static __inline void
+barrier_read(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0, BUS_SPACE_BARRIER_READ);
+}
+
+static __inline void
+barrier_write(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_WRITE);
+}
+
+static __inline void
+barrier_rw(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+}
+
+/*
* Flags used in various bus DMA methods.
*/
#define BUS_DMA_WAITOK 0x00 /* safe to sleep (pseudo-flag) */
diff --git a/sys/amd64/include/bus_dma.h b/sys/amd64/include/bus_dma.h
index 2d84400..3423e6b 100644
--- a/sys/amd64/include/bus_dma.h
+++ b/sys/amd64/include/bus_dma.h
@@ -1154,6 +1154,29 @@ bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
/*
+ * Generic memory barrier functions.
+ */
+static __inline void
+barrier_read(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0, BUS_SPACE_BARRIER_READ);
+}
+
+static __inline void
+barrier_write(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_WRITE);
+}
+
+static __inline void
+barrier_rw(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+}
+
+/*
* Flags used in various bus DMA methods.
*/
#define BUS_DMA_WAITOK 0x00 /* safe to sleep (pseudo-flag) */
diff --git a/sys/i386/include/bus_at386.h b/sys/i386/include/bus_at386.h
index 2d84400..3423e6b 100644
--- a/sys/i386/include/bus_at386.h
+++ b/sys/i386/include/bus_at386.h
@@ -1154,6 +1154,29 @@ bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
/*
+ * Generic memory barrier functions.
+ */
+static __inline void
+barrier_read(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0, BUS_SPACE_BARRIER_READ);
+}
+
+static __inline void
+barrier_write(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_WRITE);
+}
+
+static __inline void
+barrier_rw(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+}
+
+/*
* Flags used in various bus DMA methods.
*/
#define BUS_DMA_WAITOK 0x00 /* safe to sleep (pseudo-flag) */
diff --git a/sys/i386/include/bus_dma.h b/sys/i386/include/bus_dma.h
index 2d84400..3423e6b 100644
--- a/sys/i386/include/bus_dma.h
+++ b/sys/i386/include/bus_dma.h
@@ -1154,6 +1154,29 @@ bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
/*
+ * Generic memory barrier functions.
+ */
+static __inline void
+barrier_read(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0, BUS_SPACE_BARRIER_READ);
+}
+
+static __inline void
+barrier_write(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_WRITE);
+}
+
+static __inline void
+barrier_rw(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+}
+
+/*
* Flags used in various bus DMA methods.
*/
#define BUS_DMA_WAITOK 0x00 /* safe to sleep (pseudo-flag) */
diff --git a/sys/i386/include/bus_pc98.h b/sys/i386/include/bus_pc98.h
index c18029d..fef8b86 100644
--- a/sys/i386/include/bus_pc98.h
+++ b/sys/i386/include/bus_pc98.h
@@ -1456,6 +1456,29 @@ bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
/*
+ * Generic memory barrier functions.
+ */
+static __inline void
+barrier_read(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0, BUS_SPACE_BARRIER_READ);
+}
+
+static __inline void
+barrier_write(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_WRITE);
+}
+
+static __inline void
+barrier_rw(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+}
+
+/*
* Flags used in various bus DMA methods.
*/
#define BUS_DMA_WAITOK 0x00 /* safe to sleep (pseudo-flag) */
diff --git a/sys/ia64/include/bus.h b/sys/ia64/include/bus.h
index c054193..9bb2f76 100644
--- a/sys/ia64/include/bus.h
+++ b/sys/ia64/include/bus.h
@@ -1023,6 +1023,28 @@ bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
ia64_mf();
}
+/*
+ * Generic memory barrier functions.
+ */
+static __inline void
+barrier_read(void)
+{
+ bus_space_barrier(IA64_BUS_SPACE_MEM, 0, 0, ~0, BUS_SPACE_BARRIER_READ);
+}
+
+static __inline void
+barrier_write(void)
+{
+ bus_space_barrier(IA64_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_WRITE);
+}
+
+static __inline void
+barrier_rw(void)
+{
+ bus_space_barrier(IA64_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+}
/*
* Flags used in various bus DMA methods.
diff --git a/sys/sys/bus_dma.h b/sys/sys/bus_dma.h
index 2d84400..3423e6b 100644
--- a/sys/sys/bus_dma.h
+++ b/sys/sys/bus_dma.h
@@ -1154,6 +1154,29 @@ bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
/*
+ * Generic memory barrier functions.
+ */
+static __inline void
+barrier_read(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0, BUS_SPACE_BARRIER_READ);
+}
+
+static __inline void
+barrier_write(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_WRITE);
+}
+
+static __inline void
+barrier_rw(void)
+{
+ bus_space_barrier(I386_BUS_SPACE_MEM, 0, 0, ~0,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+}
+
+/*
* Flags used in various bus DMA methods.
*/
#define BUS_DMA_WAITOK 0x00 /* safe to sleep (pseudo-flag) */
OpenPOWER on IntegriCloud