[haiku-commits] Change in haiku[master]: freebsd_network: implement missing generic bus access functions

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 3 Jun 2022 17:18:45 +0000

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

Other related posts:

  • » [haiku-commits] Change in haiku[master]: freebsd_network: implement missing generic bus access functions - Gerrit