From X512 <danger_mail@xxxxxxx>:
X512 has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/5352 ;)
Change subject: freebsd_network: implement missing generic bus access functions
......................................................................
freebsd_network: implement missing generic bus access functions
Change-Id: I9ed7b0f4187d659df798eac1d01c4f0e1f978e73
---
M src/libs/compat/freebsd_network/compat/machine/generic/bus.h
1 file changed, 155 insertions(+), 0 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/52/5352/1
diff --git a/src/libs/compat/freebsd_network/compat/machine/generic/bus.h
b/src/libs/compat/freebsd_network/compat/machine/generic/bus.h
index abfcf13..9975c2b 100644
--- a/src/libs/compat/freebsd_network/compat/machine/generic/bus.h
+++ b/src/libs/compat/freebsd_network/compat/machine/generic/bus.h
@@ -102,6 +102,160 @@
*(volatile uint64_t *)(bsh + offset) = value;
}
+/*
+ * Read `count' 1, 2, 4, or 8 byte quantities from bus space
+ * described by tag/handle and starting at `offset' and copy into
+ * buffer provided.
+ */
+static __inline void
+bus_space_read_region_1(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset, u_int8_t *addr,
+ size_t count)
+{
+ for (; count > 0; offset += 1, addr++, count--)
+ *addr = bus_space_read_1(tag, bsh, offset);
+}
+
+
+static __inline void bus_space_read_region_2(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset, u_int16_t *addr,
+ size_t count)
+{
+ for (; count > 0; offset += 2, addr++, count--)
+ *addr = bus_space_read_1(tag, bsh, offset);
+}
+
+
+static __inline void bus_space_read_region_4(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset, u_int32_t *addr,
+ size_t count)
+{
+ for (; count > 0; offset += 4, addr++, count--)
+ *addr = bus_space_read_1(tag, bsh, offset);
+}
+
+
+/*
+ * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
+ * provided to bus space described by tag/handle/offset.
+ */
+
+static __inline void
+bus_space_write_multi_1(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ const u_int8_t *addr,
+ size_t count)
+{
+ for (; count > 0; addr++, count--)
+ bus_space_write_1(tag, bsh, offset, *addr);
+}
+
+
+static __inline void
+bus_space_write_multi_2(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ const u_int16_t *addr,
+ size_t count)
+{
+ for (; count > 0; addr++, count--)
+ bus_space_write_2(tag, bsh, offset, *addr);
+}
+
+
+static __inline void
+bus_space_write_multi_4(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ const u_int32_t *addr,
+ size_t count)
+{
+ for (; count > 0; addr++, count--)
+ bus_space_write_4(tag, bsh, offset, *addr);
+}
+
+
+/*
+ * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided
+ * to bus space described by tag/handle starting at `offset'.
+ */
+
+static __inline void
+bus_space_write_region_1(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ const u_int8_t *addr,
+ size_t count)
+{
+ for (; count > 0; offset += 1, addr++, count--)
+ bus_space_write_1(tag, bsh, offset, *addr);
+}
+
+
+static __inline void
+bus_space_write_region_2(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ const u_int16_t *addr,
+ size_t count)
+{
+ for (; count > 0; offset += 2, addr++, count--)
+ bus_space_write_2(tag, bsh, offset, *addr);
+}
+
+
+static __inline void
+bus_space_write_region_4(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ const u_int32_t *addr,
+ size_t count)
+{
+ for (; count > 0; offset += 4, addr++, count--)
+ bus_space_write_4(tag, bsh, offset, *addr);
+}
+
+
+static __inline void
+bus_space_set_region_1(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ u_int8_t value,
+ size_t count)
+{
+ for (; count > 0; count--)
+ bus_space_write_1(tag, bsh, offset, value);
+}
+
+
+static __inline void
+bus_space_set_region_2(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ u_int16_t value,
+ size_t count)
+{
+ for (; count > 0; count--)
+ bus_space_write_2(tag, bsh, offset, value);
+}
+
+
+static __inline void
+bus_space_set_region_4(bus_space_tag_t tag,
+ bus_space_handle_t bsh,
+ bus_size_t offset,
+ u_int32_t value,
+ size_t count)
+{
+ for (; count > 0; count--)
+ bus_space_write_4(tag, bsh, offset, value);
+}
+
+
#define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */
#define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier
*/
@@ -114,6 +268,7 @@
__compiler_membar();
}
+#include <machine/bus_dma.h>
/* Assume stream accesses are the same as normal accesses. */
#define bus_space_read_stream_1(t, h, o) bus_space_read_1((t),
(h), (o))
--
To view, visit https://review.haiku-os.org/c/haiku/+/5352
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I9ed7b0f4187d659df798eac1d01c4f0e1f978e73
Gerrit-Change-Number: 5352
Gerrit-PatchSet: 1
Gerrit-Owner: X512 <danger_mail@xxxxxxx>
Gerrit-MessageType: newchange