diff options
author | jhb <jhb@FreeBSD.org> | 2000-10-18 10:30:12 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2000-10-18 10:30:12 +0000 |
commit | a4104b417ea985c653c0668f77ffee40394327a6 (patch) | |
tree | 65f9ce24ef1b9657dabe0c1eb26b1faa5882ec1c | |
parent | 8aa01908ad19f43c27b74c89bcd456610e34b435 (diff) | |
download | FreeBSD-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.h | 12 | ||||
-rw-r--r-- | sys/amd64/include/bus_amd64.h | 23 | ||||
-rw-r--r-- | sys/amd64/include/bus_at386.h | 23 | ||||
-rw-r--r-- | sys/amd64/include/bus_dma.h | 23 | ||||
-rw-r--r-- | sys/i386/include/bus_at386.h | 23 | ||||
-rw-r--r-- | sys/i386/include/bus_dma.h | 23 | ||||
-rw-r--r-- | sys/i386/include/bus_pc98.h | 23 | ||||
-rw-r--r-- | sys/ia64/include/bus.h | 22 | ||||
-rw-r--r-- | sys/sys/bus_dma.h | 23 |
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) */ |