summaryrefslogtreecommitdiff
path: root/static/freebsd/man9/bus_space.9 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man9/bus_space.9 3.html')
-rw-r--r--static/freebsd/man9/bus_space.9 3.html1712
1 files changed, 0 insertions, 1712 deletions
diff --git a/static/freebsd/man9/bus_space.9 3.html b/static/freebsd/man9/bus_space.9 3.html
deleted file mode 100644
index e2f00da9..00000000
--- a/static/freebsd/man9/bus_space.9 3.html
+++ /dev/null
@@ -1,1712 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">BUS_SPACE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">BUS_SPACE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">bus_space</code>,
- <code class="Nm">bus_space_barrier</code>,
- <code class="Nm">bus_space_copy_region_1</code>,
- <code class="Nm">bus_space_copy_region_2</code>,
- <code class="Nm">bus_space_copy_region_4</code>,
- <code class="Nm">bus_space_copy_region_8</code>,
- <code class="Nm">bus_space_copy_region_stream_1</code>,
- <code class="Nm">bus_space_copy_region_stream_2</code>,
- <code class="Nm">bus_space_copy_region_stream_4</code>,
- <code class="Nm">bus_space_copy_region_stream_8</code>,
- <code class="Nm">bus_space_free</code>,
- <code class="Nm">bus_space_map</code>,
- <code class="Nm">bus_space_peek_1</code>,
- <code class="Nm">bus_space_peek_2</code>,
- <code class="Nm">bus_space_peek_4</code>,
- <code class="Nm">bus_space_peek_8</code>,
- <code class="Nm">bus_space_poke_1</code>,
- <code class="Nm">bus_space_poke_2</code>,
- <code class="Nm">bus_space_poke_4</code>,
- <code class="Nm">bus_space_poke_8</code>,
- <code class="Nm">bus_space_read_1</code>,
- <code class="Nm">bus_space_read_2</code>,
- <code class="Nm">bus_space_read_4</code>,
- <code class="Nm">bus_space_read_8</code>,
- <code class="Nm">bus_space_read_multi_1</code>,
- <code class="Nm">bus_space_read_multi_2</code>,
- <code class="Nm">bus_space_read_multi_4</code>,
- <code class="Nm">bus_space_read_multi_8</code>,
- <code class="Nm">bus_space_read_multi_stream_1</code>,
- <code class="Nm">bus_space_read_multi_stream_2</code>,
- <code class="Nm">bus_space_read_multi_stream_4</code>,
- <code class="Nm">bus_space_read_multi_stream_8</code>,
- <code class="Nm">bus_space_read_region_1</code>,
- <code class="Nm">bus_space_read_region_2</code>,
- <code class="Nm">bus_space_read_region_4</code>,
- <code class="Nm">bus_space_read_region_8</code>,
- <code class="Nm">bus_space_read_region_stream_1</code>,
- <code class="Nm">bus_space_read_region_stream_2</code>,
- <code class="Nm">bus_space_read_region_stream_4</code>,
- <code class="Nm">bus_space_read_region_stream_8</code>,
- <code class="Nm">bus_space_read_stream_1</code>,
- <code class="Nm">bus_space_read_stream_2</code>,
- <code class="Nm">bus_space_read_stream_4</code>,
- <code class="Nm">bus_space_read_stream_8</code>,
- <code class="Nm">bus_space_set_multi_1</code>,
- <code class="Nm">bus_space_set_multi_2</code>,
- <code class="Nm">bus_space_set_multi_4</code>,
- <code class="Nm">bus_space_set_multi_8</code>,
- <code class="Nm">bus_space_set_multi_stream_1</code>,
- <code class="Nm">bus_space_set_multi_stream_2</code>,
- <code class="Nm">bus_space_set_multi_stream_4</code>,
- <code class="Nm">bus_space_set_multi_stream_8</code>,
- <code class="Nm">bus_space_set_region_1</code>,
- <code class="Nm">bus_space_set_region_2</code>,
- <code class="Nm">bus_space_set_region_4</code>,
- <code class="Nm">bus_space_set_region_8</code>,
- <code class="Nm">bus_space_set_region_stream_1</code>,
- <code class="Nm">bus_space_set_region_stream_2</code>,
- <code class="Nm">bus_space_set_region_stream_4</code>,
- <code class="Nm">bus_space_set_region_stream_8</code>,
- <code class="Nm">bus_space_subregion</code>,
- <code class="Nm">bus_space_unmap</code>,
- <code class="Nm">bus_space_write_1</code>,
- <code class="Nm">bus_space_write_2</code>,
- <code class="Nm">bus_space_write_4</code>,
- <code class="Nm">bus_space_write_8</code>,
- <code class="Nm">bus_space_write_multi_1</code>,
- <code class="Nm">bus_space_write_multi_2</code>,
- <code class="Nm">bus_space_write_multi_4</code>,
- <code class="Nm">bus_space_write_multi_8</code>,
- <code class="Nm">bus_space_write_multi_stream_1</code>,
- <code class="Nm">bus_space_write_multi_stream_2</code>,
- <code class="Nm">bus_space_write_multi_stream_4</code>,
- <code class="Nm">bus_space_write_multi_stream_8</code>,
- <code class="Nm">bus_space_write_region_1</code>,
- <code class="Nm">bus_space_write_region_2</code>,
- <code class="Nm">bus_space_write_region_4</code>,
- <code class="Nm">bus_space_write_region_8</code>,
- <code class="Nm">bus_space_write_region_stream_1</code>,
- <code class="Nm">bus_space_write_region_stream_2</code>,
- <code class="Nm">bus_space_write_region_stream_4</code>,
- <code class="Nm">bus_space_write_region_stream_8</code>,
- <code class="Nm">bus_space_write_stream_1</code>,
- <code class="Nm">bus_space_write_stream_2</code>,
- <code class="Nm">bus_space_write_stream_4</code>,
- <code class="Nm">bus_space_write_stream_8</code> &#x2014;
- <span class="Nd">bus space manipulation functions</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">machine/bus.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_map</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_addr_t address</var>,
- <var class="Fa">bus_size_t size</var>, <var class="Fa">int flags</var>,
- <var class="Fa">bus_space_handle_t *handlep</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_unmap</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_subregion</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">bus_size_t
- size</var>, <var class="Fa">bus_space_handle_t *nhandlep</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_alloc</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_addr_t reg_start</var>,
- <var class="Fa">bus_addr_t reg_end</var>, <var class="Fa">bus_size_t
- size</var>, <var class="Fa">bus_size_t alignment</var>,
- <var class="Fa">bus_size_t boundary</var>, <var class="Fa">int flags</var>,
- <var class="Fa">bus_addr_t *addrp</var>, <var class="Fa">bus_space_handle_t
- *handlep</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_free</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_peek_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_peek_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_peek_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_peek_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_poke_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_poke_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_poke_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">bus_space_poke_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">bus_space_read_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">bus_space_read_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bus_space_read_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">bus_space_read_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint8_t</var>
- <br/>
- <code class="Fn">bus_space_read_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint16_t</var>
- <br/>
- <code class="Fn">bus_space_read_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint32_t</var>
- <br/>
- <code class="Fn">bus_space_read_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">uint64_t</var>
- <br/>
- <code class="Fn">bus_space_read_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_barrier</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">bus_size_t
- length</var>, <var class="Fa">int flags</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_region_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_region_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_copy_region_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t srchandle</var>,
- <var class="Fa">bus_size_t srcoffset</var>,
- <var class="Fa">bus_space_handle_t dsthandle</var>,
- <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t
- count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_region_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_read_multi_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_write_multi_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- *datap</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_stream_1</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_stream_2</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_stream_4</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">bus_space_set_multi_stream_8</code>(<var class="Fa">bus_space_tag_t
- space</var>, <var class="Fa">bus_space_handle_t handle</var>,
- <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t
- value</var>, <var class="Fa">bus_size_t count</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">bus_space</code> functions exist to allow
- device drivers machine-independent access to bus memory and register areas.
- All of the functions and types described in this document can be used by
- including the
- <code class="In">&lt;<a class="In">machine/bus.h</a>&gt;</code> header
- file.</p>
-<p class="Pp">Many common devices are used on multiple architectures, but are
- accessed differently on each because of architectural constraints. For
- instance, a device which is mapped in one system's I/O space may be mapped
- in memory space on a second system. On a third system, architectural
- limitations might change the way registers need to be accessed (e.g.
- creating a non-linear register space). In some cases, a single driver may
- need to access the same type of device in multiple ways in a single system
- or architecture. The goal of the <code class="Nm">bus_space</code> functions
- is to allow a single driver source file to manipulate a set of devices on
- different system architectures, and to allow a single driver object file to
- manipulate a set of devices on multiple bus types on a single
- architecture.</p>
-<p class="Pp">Not all buses have to implement all functions described in this
- document, though that is encouraged if the operations are logically
- supported by the bus. Unimplemented functions should cause compile-time
- errors if possible.</p>
-<p class="Pp">All of the interface definitions described in this document are
- shown as function prototypes and discussed as if they were required to be
- functions. Implementations are encouraged to implement prototyped
- (type-checked) versions of these interfaces, but may implement them as
- macros if appropriate. Machine-dependent types, variables, and functions
- should be marked clearly in
- <code class="In">&lt;<a class="In">machine/bus.h</a>&gt;</code> to avoid
- confusion with the machine-independent types and functions, and, if
- possible, should be given names which make the machine-dependence clear.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CONCEPTS_AND_GUIDELINES"><a class="permalink" href="#CONCEPTS_AND_GUIDELINES">CONCEPTS
- AND GUIDELINES</a></h1>
-<p class="Pp">Bus spaces are described by bus space tags, which can be created
- only by machine-dependent code. A given machine may have several different
- types of bus space (e.g. memory space and I/O space), and thus may provide
- multiple different bus space tags. Individual buses or devices on a machine
- may use more than one bus space tag. For instance, ISA devices are given an
- ISA memory space tag and an ISA I/O space tag. Architectures may have
- several different tags which represent the same type of space, for instance
- because of multiple different host bus interface chipsets.</p>
-<p class="Pp">A range in bus space is described by a bus address and a bus size.
- The bus address describes the start of the range in bus space. The bus size
- describes the size of the range in bytes. Buses which are not byte
- addressable may require use of bus space ranges with appropriately aligned
- addresses and properly rounded sizes.</p>
-<p class="Pp">Access to regions of bus space is facilitated by use of bus space
- handles, which are usually created by mapping a specific range of a bus
- space. Handles may also be created by allocating and mapping a range of bus
- space, the actual location of which is picked by the implementation within
- bounds specified by the caller of the allocation function.</p>
-<p class="Pp">All of the bus space access functions require one bus space tag
- argument, at least one handle argument, and at least one offset argument (a
- bus size). The bus space tag specifies the space, each handle specifies a
- region in the space, and each offset specifies the offset into the region of
- the actual location(s) to be accessed. Offsets are given in bytes, though
- buses may impose alignment constraints. The offset used to access data
- relative to a given handle must be such that all of the data being accessed
- is in the mapped region that the handle describes. Trying to access data
- outside that region is an error.</p>
-<p class="Pp">Because some architectures' memory systems use buffering to
- improve memory and device access performance, there is a mechanism which can
- be used to create &#x201C;barriers&#x201D; in the bus space read and write
- stream. There are three types of barriers: read, write, and read/write. All
- reads started to the region before a read barrier must complete before any
- reads after the read barrier are started. (The analogous requirement is true
- for write barriers.) Read/write barriers force all reads and writes started
- before the barrier to complete before any reads or writes after the barrier
- are started. Correctly-written drivers will include all appropriate
- barriers, and assume only the read/write ordering imposed by the barrier
- operations.</p>
-<p class="Pp">People trying to write portable drivers with the
- <code class="Nm">bus_space</code> functions should try to make minimal
- assumptions about what the system allows. In particular, they should expect
- that the system requires bus space addresses being accessed to be naturally
- aligned (i.e., base address of handle added to offset is a multiple of the
- access size), and that the system does alignment checking on pointers (i.e.,
- pointer to objects being read and written must point to properly-aligned
- data).</p>
-<p class="Pp">The descriptions of the <code class="Nm">bus_space</code>
- functions given below all assume that they are called with proper arguments.
- If called with invalid arguments or arguments that are out of range (e.g.
- trying to access data outside of the region mapped when a given handle was
- created), undefined behaviour results. In that case, they may cause the
- system to halt, either intentionally (via panic) or unintentionally (by
- causing a fatal trap of by some other means) or may cause improper operation
- which is not immediately fatal. Functions which return
- <var class="Ft">void</var> or which return data read from bus space (i.e.,
- functions which do not obviously return an error code) do not fail. They
- could only fail if given invalid arguments, and in that case their behaviour
- is undefined. Functions which take a count of bytes have undefined results
- if the specified <var class="Fa">count</var> is zero.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="TYPES"><a class="permalink" href="#TYPES">TYPES</a></h1>
-<p class="Pp">Several types are defined in
- <code class="In">&lt;<a class="In">machine/bus.h</a>&gt;</code> to
- facilitate use of the <code class="Nm">bus_space</code> functions by
- drivers.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_addr_t"><a class="permalink" href="#bus_addr_t"><var class="Vt">bus_addr_t</var></a></h2>
-<p class="Pp">The <var class="Vt">bus_addr_t</var> type is used to describe bus
- addresses. It must be an unsigned integral type capable of holding the
- largest bus address usable by the architecture. This type is primarily used
- when mapping and unmapping bus space.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_size_t"><a class="permalink" href="#bus_size_t"><var class="Vt">bus_size_t</var></a></h2>
-<p class="Pp">The <var class="Vt">bus_size_t</var> type is used to describe
- sizes of ranges in bus space. It must be an unsigned integral type capable
- of holding the size of the largest bus address range usable on the
- architecture. This type is used by virtually all of the
- <code class="Nm">bus_space</code> functions, describing sizes when mapping
- regions and offsets into regions when performing space access
- operations.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_tag_t"><a class="permalink" href="#bus_space_tag_t"><var class="Vt">bus_space_tag_t</var></a></h2>
-<p class="Pp">The <var class="Vt">bus_space_tag_t</var> type is used to describe
- a particular bus space on a machine. Its contents are machine-dependent and
- should be considered opaque by machine-independent code. This type is used
- by all <code class="Nm">bus_space</code> functions to name the space on
- which they are operating.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_handle_t"><a class="permalink" href="#bus_space_handle_t"><var class="Vt">bus_space_handle_t</var></a></h2>
-<p class="Pp">The <var class="Vt">bus_space_handle_t</var> type is used to
- describe a mapping of a range of bus space. Its contents are
- machine-dependent and should be considered opaque by machine-independent
- code. This type is used when performing bus space access operations.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="MAPPING_AND_UNMAPPING_BUS_SPACE"><a class="permalink" href="#MAPPING_AND_UNMAPPING_BUS_SPACE">MAPPING
- AND UNMAPPING BUS SPACE</a></h1>
-<p class="Pp">This section is specific to the <span class="Ux">NetBSD</span>
- version of these functions and may or may not apply to the
- <span class="Ux">FreeBSD</span> version.</p>
-<p class="Pp" id="bus_space_map">Bus space must be mapped before it can be used,
- and should be unmapped when it is no longer needed. The
- <a class="permalink" href="#bus_space_map"><code class="Fn">bus_space_map</code></a>()
- and <code class="Fn">bus_space_unmap</code>() functions provide these
- capabilities.</p>
-<p class="Pp" id="bus_space_subregion">Some drivers need to be able to pass a
- subregion of already-mapped bus space to another driver or module within a
- driver. The
- <a class="permalink" href="#bus_space_subregion"><code class="Fn">bus_space_subregion</code></a>()
- function allows such subregions to be created.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_map_space_address_size_flags_handlep"><a class="permalink" href="#bus_space_map_space_address_size_flags_handlep"><code class="Fn">bus_space_map</code>(<var class="Fa">space</var>,
- <var class="Fa">address</var>, <var class="Fa">size</var>,
- <var class="Fa">flags</var>, <var class="Fa">handlep</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_map</code>() function maps the
- region of bus space named by the <var class="Fa">space</var>,
- <var class="Fa">address</var>, and <var class="Fa">size</var> arguments. If
- successful, it returns zero and fills in the bus space handle pointed to by
- <var class="Fa">handlep</var> with the handle that can be used to access the
- mapped region. If unsuccessful, it will return non-zero and leave the bus
- space handle pointed to by <var class="Fa">handlep</var> in an undefined
- state.</p>
-<p class="Pp">The <var class="Fa">flags</var> argument controls how the space is
- to be mapped. Supported flags include:</p>
-<dl class="Bl-tag">
- <dt id="BUS_SPACE_MAP_CACHEABLE"><a class="permalink" href="#BUS_SPACE_MAP_CACHEABLE"><code class="Dv">BUS_SPACE_MAP_CACHEABLE</code></a></dt>
- <dd>Try to map the space so that accesses can be cached and/or prefetched by
- the system. If this flag is not specified, the implementation should map
- the space so that it will not be cached or prefetched.
- <p class="Pp">This flag must have a value of 1 on all implementations for
- backward compatibility.</p>
- </dd>
- <dt id="BUS_SPACE_MAP_LINEAR"><a class="permalink" href="#BUS_SPACE_MAP_LINEAR"><code class="Dv">BUS_SPACE_MAP_LINEAR</code></a></dt>
- <dd>Try to map the space so that its contents can be accessed linearly via
- normal memory access methods (e.g. pointer dereferencing and structure
- accesses). This is useful when software wants to do direct access to a
- memory device, e.g. a frame buffer. If this flag is specified and linear
- mapping is not possible, the
- <a class="permalink" href="#bus_space_map~2"><code class="Fn" id="bus_space_map~2">bus_space_map</code></a>()
- call should fail. If this flag is not specified, the system may map the
- space in whatever way is most convenient.</dd>
- <dt id="BUS_SPACE_MAP_NONPOSTED"><a class="permalink" href="#BUS_SPACE_MAP_NONPOSTED"><code class="Dv">BUS_SPACE_MAP_NONPOSTED</code></a></dt>
- <dd>Try to map the space using non-posted device memory. This is to support
- buses and devices where mapping with posted device memory is unsupported
- or broken. This flag is currently only available on arm64.</dd>
-</dl>
-<p class="Pp">Not all combinations of flags make sense or are supported with all
- spaces. For instance, <code class="Dv">BUS_SPACE_MAP_CACHEABLE</code> may be
- meaningless when used on many systems' I/O port spaces, and on some systems
- <code class="Dv">BUS_SPACE_MAP_LINEAR</code> without
- <code class="Dv">BUS_SPACE_MAP_CACHEABLE</code> may never work. When the
- system hardware or firmware provides hints as to how spaces should be mapped
- (e.g. the PCI memory mapping registers' &#x201C;prefetchable&#x201D; bit),
- those hints should be followed for maximum compatibility. On some systems,
- requesting a mapping that cannot be satisfied (e.g. requesting a
- non-cacheable mapping when the system can only provide a cacheable one) will
- cause the request to fail.</p>
-<p class="Pp">Some implementations may keep track of use of bus space for some
- or all bus spaces and refuse to allow duplicate allocations. This is
- encouraged for bus spaces which have no notion of slot-specific space
- addressing, such as ISA, and for spaces which coexist with those spaces
- (e.g. PCI memory and I/O spaces co-existing with ISA memory and I/O
- spaces).</p>
-<p class="Pp">Mapped regions may contain areas for which there is no device on
- the bus. If space in those areas is accessed, the results are
- bus-dependent.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_unmap_space_handle_size"><a class="permalink" href="#bus_space_unmap_space_handle_size"><a class="permalink" href="#bus_space_unmap"><code class="Fn" id="bus_space_unmap">bus_space_unmap</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">size</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_unmap</code>() function unmaps a
- region of bus space mapped with <code class="Fn">bus_space_map</code>().
- When unmapping a region, the <var class="Fa">size</var> specified should be
- the same as the size given to <code class="Fn">bus_space_map</code>() when
- mapping that region.</p>
-<p class="Pp" id="bus_space_unmap~2">After
- <a class="permalink" href="#bus_space_unmap~2"><code class="Fn">bus_space_unmap</code></a>()
- is called on a handle, that handle is no longer valid. (If copies were made
- of the handle they are no longer valid, either.)</p>
-<p class="Pp" id="bus_space_unmap~3">This function will never fail. If it would
- fail (e.g. because of an argument error), that indicates a software bug
- which should cause a panic. In that case,
- <a class="permalink" href="#bus_space_unmap~3"><code class="Fn">bus_space_unmap</code></a>()
- will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_subregion_space_handle_offset_size_nhandlep"><a class="permalink" href="#bus_space_subregion_space_handle_offset_size_nhandlep"><code class="Fn">bus_space_subregion</code>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">size</var>, <var class="Fa">nhandlep</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_subregion</code>() function is a
- convenience function which makes a new handle to some subregion of an
- already-mapped region of bus space. The subregion described by the new
- handle starts at byte offset <var class="Fa">offset</var> into the region
- described by <var class="Fa">handle</var>, with the size give by
- <var class="Fa">size</var>, and must be wholly contained within the original
- region.</p>
-<p class="Pp" id="bus_space_subregion~2">If successful,
- <a class="permalink" href="#bus_space_subregion~2"><code class="Fn">bus_space_subregion</code></a>()
- returns zero and fills in the bus space handle pointed to by
- <var class="Fa">nhandlep</var>. If unsuccessful, it returns non-zero and
- leaves the bus space handle pointed to by <var class="Fa">nhandlep</var> in
- an undefined state. In either case, the handle described by
- <var class="Fa">handle</var> remains valid and is unmodified.</p>
-<p class="Pp" id="bus_space_subregion~3">When done with a handle created by
- <a class="permalink" href="#bus_space_subregion~3"><code class="Fn">bus_space_subregion</code></a>(),
- the handle should be thrown away. Under no circumstances should
- <code class="Fn">bus_space_unmap</code>() be used on the handle. Doing so
- may confuse any resource management being done on the space, and will result
- in undefined behaviour. When <code class="Fn">bus_space_unmap</code>() or
- <code class="Fn">bus_space_free</code>() is called on a handle, all
- subregions of that handle become invalid.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ALLOCATING_AND_FREEING_BUS_SPACE"><a class="permalink" href="#ALLOCATING_AND_FREEING_BUS_SPACE">ALLOCATING
- AND FREEING BUS SPACE</a></h1>
-<p class="Pp">This section is specific to the <span class="Ux">NetBSD</span>
- version of these functions and may or may not apply to the
- <span class="Ux">FreeBSD</span> version.</p>
-<p class="Pp" id="bus_space_alloc">Some devices require or allow bus space to be
- allocated by the operating system for device use. When the devices no longer
- need the space, the operating system should free it for use by other
- devices. The
- <a class="permalink" href="#bus_space_alloc"><code class="Fn">bus_space_alloc</code></a>()
- and <code class="Fn">bus_space_free</code>() functions provide these
- capabilities.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_alloc_space_reg_start_reg_end_size_alignment_boundary_flags_addrp_handlep"><a class="permalink" href="#bus_space_alloc_space_reg_start_reg_end_size_alignment_boundary_flags_addrp_handlep"><code class="Fn">bus_space_alloc</code>(<var class="Fa">space</var>,
- <var class="Fa">reg_start</var>, <var class="Fa">reg_end</var>,
- <var class="Fa">size</var>, <var class="Fa">alignment</var>,
- <var class="Fa">boundary</var>, <var class="Fa">flags</var>,
- <var class="Fa">addrp</var>, <var class="Fa">handlep</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_alloc</code>() function allocates
- and maps a region of bus space with the size given by
- <var class="Fa">size</var>, corresponding to the given constraints. If
- successful, it returns zero, fills in the bus address pointed to by
- <var class="Fa">addrp</var> with the bus space address of the allocated
- region, and fills in the bus space handle pointed to by
- <var class="Fa">handlep</var> with the handle that can be used to access
- that region. If unsuccessful, it returns non-zero and leaves the bus address
- pointed to by <var class="Fa">addrp</var> and the bus space handle pointed
- to by <var class="Fa">handlep</var> in an undefined state.</p>
-<p class="Pp" id="bus_space_alloc~2">Constraints on the allocation are given by
- the <var class="Fa">reg_start</var>, <var class="Fa">reg_end</var>,
- <var class="Fa">alignment</var>, and <var class="Fa">boundary</var>
- parameters. The allocated region will start at or after
- <var class="Fa">reg_start</var> and end before or at
- <var class="Fa">reg_end</var>. The <var class="Fa">alignment</var>
- constraint must be a power of two, and the allocated region will start at an
- address that is an even multiple of that power of two. The
- <var class="Fa">boundary</var> constraint, if non-zero, ensures that the
- region is allocated so that <var class="Fa">first address in region</var> /
- <var class="Fa">boundary</var> has the same value as <var class="Fa">last
- address in region</var> / <var class="Fa">boundary</var>. If the constraints
- cannot be met,
- <a class="permalink" href="#bus_space_alloc~2"><code class="Fn">bus_space_alloc</code></a>()
- will fail. It is an error to specify a set of constraints that can never be
- met (for example, <var class="Fa">size</var> greater than
- <var class="Fa">boundary</var>).</p>
-<p class="Pp" id="bus_space_map~3">The <var class="Fa">flags</var> parameter is
- the same as the like-named parameter to
- <a class="permalink" href="#bus_space_map~3"><code class="Fn">bus_space_map</code></a>(),
- the same flag values should be used, and they have the same meanings.</p>
-<p class="Pp" id="bus_space_alloc~3">Handles created by
- <a class="permalink" href="#bus_space_alloc~3"><code class="Fn">bus_space_alloc</code></a>()
- should only be freed with <code class="Fn">bus_space_free</code>(). Trying
- to use <code class="Fn">bus_space_unmap</code>() on them causes undefined
- behaviour. The <code class="Fn">bus_space_subregion</code>() function can be
- used on handles created by <code class="Fn">bus_space_alloc</code>().</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_free_space_handle_size"><a class="permalink" href="#bus_space_free_space_handle_size"><code class="Fn">bus_space_free</code>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">size</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_free</code>() function unmaps and
- frees a region of bus space mapped and allocated with
- <code class="Fn">bus_space_alloc</code>(). When unmapping a region, the
- <var class="Fa">size</var> specified should be the same as the size given to
- <code class="Fn">bus_space_alloc</code>() when allocating the region.</p>
-<p class="Pp" id="bus_space_free">After
- <a class="permalink" href="#bus_space_free"><code class="Fn">bus_space_free</code></a>()
- is called on a handle, that handle is no longer valid. (If copies were made
- of the handle, they are no longer valid, either.)</p>
-<p class="Pp" id="bus_space_free~2">This function will never fail. If it would
- fail (e.g. because of an argument error), that indicates a software bug
- which should cause a panic. In that case,
- <a class="permalink" href="#bus_space_free~2"><code class="Fn">bus_space_free</code></a>()
- will never return.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="READING_AND_WRITING_SINGLE_DATA_ITEMS"><a class="permalink" href="#READING_AND_WRITING_SINGLE_DATA_ITEMS">READING
- AND WRITING SINGLE DATA ITEMS</a></h1>
-<p class="Pp">The simplest way to access bus space is to read or write a single
- data item. The <code class="Fn">bus_space_read_N</code>() and
- <code class="Fn">bus_space_write_N</code>() families of functions provide
- the ability to read and write 1, 2, 4, and 8 byte data items on buses which
- support those access sizes.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_1_space_handle_offset"><a class="permalink" href="#bus_space_read_1_space_handle_offset"><a class="permalink" href="#bus_space_read_1"><code class="Fn" id="bus_space_read_1">bus_space_read_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_2_space_handle_offset"><a class="permalink" href="#bus_space_read_2_space_handle_offset"><a class="permalink" href="#bus_space_read_2"><code class="Fn" id="bus_space_read_2">bus_space_read_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_4_space_handle_offset"><a class="permalink" href="#bus_space_read_4_space_handle_offset"><a class="permalink" href="#bus_space_read_4"><code class="Fn" id="bus_space_read_4">bus_space_read_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_8_space_handle_offset"><a class="permalink" href="#bus_space_read_8_space_handle_offset"><a class="permalink" href="#bus_space_read_8"><code class="Fn" id="bus_space_read_8">bus_space_read_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_read_N</code>() family of functions
- reads a 1, 2, 4, or 8 byte data item from the offset specified by
- <var class="Fa">offset</var> into the region specified by
- <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. The location being read must lie within the bus
- space region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data item being read. On some systems, not obeying this requirement
- may cause incorrect data to be read, on others it may cause a system
- crash.</p>
-<p class="Pp" id="bus_space_read_N">Read operations done by the
- <a class="permalink" href="#bus_space_read_N"><code class="Fn">bus_space_read_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_1_space_handle_offset_value"><a class="permalink" href="#bus_space_write_1_space_handle_offset_value"><a class="permalink" href="#bus_space_write_1"><code class="Fn" id="bus_space_write_1">bus_space_write_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_2_space_handle_offset_value"><a class="permalink" href="#bus_space_write_2_space_handle_offset_value"><a class="permalink" href="#bus_space_write_2"><code class="Fn" id="bus_space_write_2">bus_space_write_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_4_space_handle_offset_value"><a class="permalink" href="#bus_space_write_4_space_handle_offset_value"><a class="permalink" href="#bus_space_write_4"><code class="Fn" id="bus_space_write_4">bus_space_write_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_8_space_handle_offset_value"><a class="permalink" href="#bus_space_write_8_space_handle_offset_value"><a class="permalink" href="#bus_space_write_8"><code class="Fn" id="bus_space_write_8">bus_space_write_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_write_N</code>() family of
- functions writes a 1, 2, 4, or 8 byte data item to the offset specified by
- <var class="Fa">offset</var> into the region specified by
- <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. The location being written must lie within the
- bus space region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data item being written. On some systems, not obeying this
- requirement may cause incorrect data to be written, on others it may cause a
- system crash.</p>
-<p class="Pp" id="bus_space_write_N">Write operations done by the
- <a class="permalink" href="#bus_space_write_N"><code class="Fn">bus_space_write_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PROBING_BUS_SPACE_FOR_HARDWARE_WHICH_MAY_NOT_RESPOND"><a class="permalink" href="#PROBING_BUS_SPACE_FOR_HARDWARE_WHICH_MAY_NOT_RESPOND">PROBING
- BUS SPACE FOR HARDWARE WHICH MAY NOT RESPOND</a></h1>
-<p class="Pp">One problem with the
- <a class="permalink" href="#bus_space_read_N~2"><code class="Fn" id="bus_space_read_N~2">bus_space_read_N</code></a>()
- and <code class="Fn">bus_space_write_N</code>() family of functions is that
- they provide no protection against exceptions which can occur when no
- physical hardware or device responds to the read or write cycles. In such a
- situation, the system typically would panic due to a kernel-mode bus error.
- The <code class="Fn">bus_space_peek_N</code>() and
- <code class="Fn">bus_space_poke_N</code>() family of functions provide a
- mechanism to handle these exceptions gracefully without the risk of crashing
- the system.</p>
-<p class="Pp" id="bus_space_read_N~3">As with
- <a class="permalink" href="#bus_space_read_N~3"><code class="Fn">bus_space_read_N</code></a>()
- and <code class="Fn">bus_space_write_N</code>(), the peek and poke functions
- provide the ability to read and write 1, 2, 4, and 8 byte data items on
- busses which support those access sizes. All of the constraints specified in
- the descriptions of the <code class="Fn">bus_space_read_N</code>() and
- <code class="Fn">bus_space_write_N</code>() functions also apply to
- <code class="Fn">bus_space_peek_N</code>() and
- <code class="Fn">bus_space_poke_N</code>().</p>
-<p class="Pp" id="bus_space_barrier">In addition, explicit calls to the
- <a class="permalink" href="#bus_space_barrier"><code class="Fn">bus_space_barrier</code></a>()
- function are not required as the implementation will ensure all pending
- operations complete before the peek or poke operation starts. The
- implementation will also ensure that the peek or poke operations complete
- before returning.</p>
-<p class="Pp" id="bus_space_peek_N">The return value indicates the outcome of
- the peek or poke operation. A return value of zero implies that a hardware
- device is responding to the operation at the specified offset in the bus
- space. A non-zero return value indicates that the kernel intercepted a
- hardware exception (e.g., bus error) when the peek or poke operation was
- attempted. Note that some busses are incapable of generating exceptions when
- non-existent hardware is accessed. In such cases, these functions will
- always return zero and the value of the data read by
- <a class="permalink" href="#bus_space_peek_N"><code class="Fn">bus_space_peek_N</code></a>()
- will be unspecified.</p>
-<p class="Pp" id="bus_space_peek_N~2">Finally, it should be noted that at this
- time the
- <a class="permalink" href="#bus_space_peek_N~2"><code class="Fn">bus_space_peek_N</code></a>()
- and <code class="Fn">bus_space_poke_N</code>() functions are not re-entrant
- and should not, therefore, be used from within an interrupt service routine.
- This constraint may be removed at some point in the future.</p>
-<p class="Pp"></p>
-<dl class="Bl-ohang Bl-compact">
- <dt id="bus_space_peek_1"><a class="permalink" href="#bus_space_peek_1"><code class="Fn">bus_space_peek_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>)</dt>
- <dd></dd>
- <dt id="bus_space_peek_2"><a class="permalink" href="#bus_space_peek_2"><code class="Fn">bus_space_peek_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>)</dt>
- <dd></dd>
- <dt id="bus_space_peek_4"><a class="permalink" href="#bus_space_peek_4"><code class="Fn">bus_space_peek_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>)</dt>
- <dd></dd>
- <dt id="bus_space_peek_8"><a class="permalink" href="#bus_space_peek_8"><code class="Fn">bus_space_peek_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>)</dt>
- <dd>
- <p class="Pp" id="bus_space_peek_N~3">The
- <a class="permalink" href="#bus_space_peek_N~3"><code class="Fn">bus_space_peek_N</code></a>()
- family of functions cautiously read a 1, 2, 4, or 8 byte data item from
- the offset specified by <var class="Fa">offset</var> in the region
- specified by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. The data item read is stored in the
- location pointed to by <var class="Fa">datap</var>. It is permissible
- for <var class="Fa">datap</var> to be NULL, in which case the data item
- will be discarded after being read.</p>
- <p class="Pp"></p>
- </dd>
- <dt id="bus_space_poke_1"><a class="permalink" href="#bus_space_poke_1"><code class="Fn">bus_space_poke_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</dt>
- <dd></dd>
- <dt id="bus_space_poke_2"><a class="permalink" href="#bus_space_poke_2"><code class="Fn">bus_space_poke_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</dt>
- <dd></dd>
- <dt id="bus_space_poke_4"><a class="permalink" href="#bus_space_poke_4"><code class="Fn">bus_space_poke_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</dt>
- <dd></dd>
- <dt id="bus_space_poke_8"><a class="permalink" href="#bus_space_poke_8"><code class="Fn">bus_space_poke_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>)</dt>
- <dd>
- <p class="Pp" id="bus_space_poke_N">The
- <a class="permalink" href="#bus_space_poke_N"><code class="Fn">bus_space_poke_N</code></a>()
- family of functions cautiously write a 1, 2, 4, or 8 byte data item
- specified by <var class="Fa">value</var> to the offset specified by
- <var class="Fa">offset</var> in the region specified by
- <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>.</p>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BARRIERS"><a class="permalink" href="#BARRIERS">BARRIERS</a></h1>
-<p class="Pp">In order to allow high-performance buffering implementations to
- avoid bus activity on every operation, read and write ordering should be
- specified explicitly by drivers when necessary. The
- <code class="Fn">bus_space_barrier</code>() function provides that
- ability.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_barrier_space_handle_offset_length_flags"><a class="permalink" href="#bus_space_barrier_space_handle_offset_length_flags"><code class="Fn">bus_space_barrier</code>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">length</var>, <var class="Fa">flags</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_barrier</code>() function enforces
- ordering of bus space read and write operations for the specified subregion
- (described by the <var class="Fa">offset</var> and
- <var class="Fa">length</var> parameters) of the region named by
- <var class="Fa">handle</var> in the space named by
- <var class="Fa">space</var>.</p>
-<p class="Pp">The <var class="Fa">flags</var> argument controls what types of
- operations are to be ordered. Supported flags are:</p>
-<dl class="Bl-tag">
- <dt id="BUS_SPACE_BARRIER_READ"><a class="permalink" href="#BUS_SPACE_BARRIER_READ"><code class="Dv">BUS_SPACE_BARRIER_READ</code></a></dt>
- <dd>Synchronize read operations.</dd>
- <dt id="BUS_SPACE_BARRIER_WRITE"><a class="permalink" href="#BUS_SPACE_BARRIER_WRITE"><code class="Dv">BUS_SPACE_BARRIER_WRITE</code></a></dt>
- <dd>Synchronize write operations.</dd>
-</dl>
-<p class="Pp">Those flags can be combined (or-ed together) to enforce ordering
- on both read and write operations.</p>
-<p class="Pp">All of the specified type(s) of operation which are done to the
- region before the barrier operation are guaranteed to complete before any of
- the specified type(s) of operation done after the barrier.</p>
-<p class="Pp">Example: Consider a hypothetical device with two single-byte
- ports, one write-only input port (at offset 0) and a read-only output port
- (at offset 1). Operation of the device is as follows: data bytes are written
- to the input port, and are placed by the device on a stack, the top of which
- is read by reading from the output port. The sequence to correctly write two
- data bytes to the device then read those two data bytes back would be:</p>
-<div class="Bd Pp Li">
-<pre>/*
- * t and h are the tag and handle for the mapped device's
- * space.
- */
-bus_space_write_1(t, h, 0, data0);
-bus_space_barrier(t, h, 0, 1, BUS_SPACE_BARRIER_WRITE); /* 1 */
-bus_space_write_1(t, h, 0, data1);
-bus_space_barrier(t, h, 0, 2,
- BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); /* 2 */
-ndata1 = bus_space_read_1(t, h, 1);
-bus_space_barrier(t, h, 1, 1, BUS_SPACE_BARRIER_READ); /* 3 */
-ndata0 = bus_space_read_1(t, h, 1);
-/* data0 == ndata0, data1 == ndata1 */</pre>
-</div>
-<p class="Pp">The first barrier makes sure that the first write finishes before
- the second write is issued, so that two writes to the input port are done in
- order and are not collapsed into a single write. This ensures that the data
- bytes are written to the device correctly and in order.</p>
-<p class="Pp">The second barrier makes sure that the writes to the output port
- finish before any of the reads to the input port are issued, thereby making
- sure that all of the writes are finished before data is read. This ensures
- that the first byte read from the device really is the last one that was
- written.</p>
-<p class="Pp">The third barrier makes sure that the first read finishes before
- the second read is issued, ensuring that data is read correctly and in
- order.</p>
-<p class="Pp">The barriers in the example above are specified to cover the
- absolute minimum number of bus space locations. It is correct (and often
- easier) to make barrier operations cover the device's whole range of bus
- space, that is, to specify an offset of zero and the size of the whole
- region.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="REGION_OPERATIONS"><a class="permalink" href="#REGION_OPERATIONS">REGION
- OPERATIONS</a></h1>
-<p class="Pp">Some devices use buffers which are mapped as regions in bus space.
- Often, drivers want to copy the contents of those buffers to or from memory,
- e.g. into mbufs which can be passed to higher levels of the system or from
- mbufs to be output to a network. In order to allow drivers to do this as
- efficiently as possible, the
- <a class="permalink" href="#bus_space_read_region_N"><code class="Fn" id="bus_space_read_region_N">bus_space_read_region_N</code></a>()
- and <code class="Fn">bus_space_write_region_N</code>() families of functions
- are provided.</p>
-<p class="Pp" id="bus_space_copy_region_N">Drivers occasionally need to copy one
- region of a bus space to another, or to set all locations in a region of bus
- space to contain a single value. The
- <a class="permalink" href="#bus_space_copy_region_N"><code class="Fn">bus_space_copy_region_N</code></a>()
- family of functions and the <code class="Fn">bus_space_set_region_N</code>()
- family of functions allow drivers to perform these operations.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_1"><code class="Fn" id="bus_space_read_region_1">bus_space_read_region_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_2"><code class="Fn" id="bus_space_read_region_2">bus_space_read_region_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_4"><code class="Fn" id="bus_space_read_region_4">bus_space_read_region_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_8"><code class="Fn" id="bus_space_read_region_8">bus_space_read_region_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_read_region_N</code>() family of
- functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- from bus space starting at byte offset <var class="Fa">offset</var> in the
- region specified by <var class="Fa">handle</var> of the bus space specified
- by <var class="Fa">space</var> and writes them into the array specified by
- <var class="Fa">datap</var>. Each successive data item is read from an
- offset 1, 2, 4, or 8 bytes after the previous data item (depending on which
- function is used). All locations being read must lie within the bus space
- region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being read and the data array pointer should be properly
- aligned. On some systems, not obeying these requirements may cause incorrect
- data to be read, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_read_region_N~2">Read operations done by the
- <a class="permalink" href="#bus_space_read_region_N~2"><code class="Fn">bus_space_read_region_N</code></a>()
- functions may be executed in any order. They may also be executed out of
- order with respect to other pending read and write operations unless order
- is enforced by use of the <code class="Fn">bus_space_barrier</code>()
- function. There is no way to insert barriers between reads of individual bus
- space locations executed by the
- <code class="Fn">bus_space_read_region_N</code>() functions.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_1"><code class="Fn" id="bus_space_write_region_1">bus_space_write_region_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_2"><code class="Fn" id="bus_space_write_region_2">bus_space_write_region_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_4"><code class="Fn" id="bus_space_write_region_4">bus_space_write_region_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_8"><code class="Fn" id="bus_space_write_region_8">bus_space_write_region_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_write_region_N</code>() family of
- functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- from the array specified by <var class="Fa">datap</var> and writes them to
- bus space starting at byte offset <var class="Fa">offset</var> in the region
- specified by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. Each successive data item is written to an
- offset 1, 2, 4, or 8 bytes after the previous data item (depending on which
- function is used). All locations being written must lie within the bus space
- region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being written and the data array pointer should be
- properly aligned. On some systems, not obeying these requirements may cause
- incorrect data to be written, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_write_region_N">Write operations done by the
- <a class="permalink" href="#bus_space_write_region_N"><code class="Fn">bus_space_write_region_N</code></a>()
- functions may be executed in any order. They may also be executed out of
- order with respect to other pending read and write operations unless order
- is enforced by use of the <code class="Fn">bus_space_barrier</code>()
- function. There is no way to insert barriers between writes of individual
- bus space locations executed by the
- <code class="Fn">bus_space_write_region_N</code>() functions.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_copy_region_1_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_1_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_1"><code class="Fn" id="bus_space_copy_region_1">bus_space_copy_region_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>,
- <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>,
- <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_copy_region_2_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_2_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_2"><code class="Fn" id="bus_space_copy_region_2">bus_space_copy_region_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>,
- <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>,
- <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_copy_region_4_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_4_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_4"><code class="Fn" id="bus_space_copy_region_4">bus_space_copy_region_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>,
- <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>,
- <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_copy_region_8_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_8_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_8"><code class="Fn" id="bus_space_copy_region_8">bus_space_copy_region_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>,
- <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>,
- <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_copy_region_N</code>() family of
- functions copies <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- in bus space from the area starting at byte offset
- <var class="Fa">srcoffset</var> in the region specified by
- <var class="Fa">srchandle</var> of the bus space specified by
- <var class="Fa">space</var> to the area starting at byte offset
- <var class="Fa">dstoffset</var> in the region specified by
- <var class="Fa">dsthandle</var> in the same bus space. Each successive data
- item read or written has an offset 1, 2, 4, or 8 bytes after the previous
- data item (depending on which function is used). All locations being read
- and written must lie within the bus space region specified by their
- respective handles.</p>
-<p class="Pp">For portability, the starting addresses of the regions specified
- by the each handle plus its respective offset should be a multiple of the
- size of data items being copied. On some systems, not obeying this
- requirement may cause incorrect data to be copied, on others it may cause a
- system crash.</p>
-<p class="Pp" id="bus_space_copy_region_N~2">Read and write operations done by
- the
- <a class="permalink" href="#bus_space_copy_region_N~2"><code class="Fn">bus_space_copy_region_N</code></a>()
- functions may be executed in any order. They may also be executed out of
- order with respect to other pending read and write operations unless order
- is enforced by use of the <code class="Fn">bus_space_barrier</code>()
- function. There is no way to insert barriers between reads or writes of
- individual bus space locations executed by the
- <code class="Fn">bus_space_copy_region_N</code>() functions.</p>
-<p class="Pp" id="bus_space_copy_region_N~3">Overlapping copies between
- different subregions of a single region of bus space are handled correctly
- by the
- <a class="permalink" href="#bus_space_copy_region_N~3"><code class="Fn">bus_space_copy_region_N</code></a>()
- functions.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_region_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_1"><code class="Fn" id="bus_space_set_region_1">bus_space_set_region_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_region_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_2"><code class="Fn" id="bus_space_set_region_2">bus_space_set_region_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_region_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_4"><code class="Fn" id="bus_space_set_region_4">bus_space_set_region_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_region_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_8"><code class="Fn" id="bus_space_set_region_8">bus_space_set_region_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_set_region_N</code>() family of
- functions writes the given <var class="Fa">value</var> to
- <var class="Fa">count</var> 1, 2, 4, or 8 byte data items in bus space
- starting at byte offset <var class="Fa">offset</var> in the region specified
- by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. Each successive data item has an offset 1, 2,
- 4, or 8 bytes after the previous data item (depending on which function is
- used). All locations being written must lie within the bus space region
- specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being written. On some systems, not obeying this
- requirement may cause incorrect data to be written, on others it may cause a
- system crash.</p>
-<p class="Pp" id="bus_space_set_region_N">Write operations done by the
- <a class="permalink" href="#bus_space_set_region_N"><code class="Fn">bus_space_set_region_N</code></a>()
- functions may be executed in any order. They may also be executed out of
- order with respect to other pending read and write operations unless order
- is enforced by use of the <code class="Fn">bus_space_barrier</code>()
- function. There is no way to insert barriers between writes of individual
- bus space locations executed by the
- <code class="Fn">bus_space_set_region_N</code>() functions.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="READING_AND_WRITING_A_SINGLE_LOCATION_MULTIPLE_TIMES"><a class="permalink" href="#READING_AND_WRITING_A_SINGLE_LOCATION_MULTIPLE_TIMES">READING
- AND WRITING A SINGLE LOCATION MULTIPLE TIMES</a></h1>
-<p class="Pp">Some devices implement single locations in bus space which are to
- be read or written multiple times to communicate data, e.g. some ethernet
- devices' packet buffer FIFOs. In order to allow drivers to manipulate these
- types of devices as efficiently as possible, the
- <a class="permalink" href="#bus_space_read_multi_N"><code class="Fn" id="bus_space_read_multi_N">bus_space_read_multi_N</code></a>(),
- <code class="Fn">bus_space_set_multi_N</code>(), and
- <code class="Fn">bus_space_write_multi_N</code>() families of functions are
- provided.</p>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_1"><code class="Fn" id="bus_space_read_multi_1">bus_space_read_multi_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_2"><code class="Fn" id="bus_space_read_multi_2">bus_space_read_multi_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_4"><code class="Fn" id="bus_space_read_multi_4">bus_space_read_multi_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_read_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_8"><code class="Fn" id="bus_space_read_multi_8">bus_space_read_multi_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_read_multi_N</code>() family of
- functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- from bus space at byte offset <var class="Fa">offset</var> in the region
- specified by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var> and writes them into the array specified by
- <var class="Fa">datap</var>. Each successive data item is read from the same
- location in bus space. The location being read must lie within the bus space
- region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being read and the data array pointer should be properly
- aligned. On some systems, not obeying these requirements may cause incorrect
- data to be read, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_read_multi_N~2">Read operations done by the
- <a class="permalink" href="#bus_space_read_multi_N~2"><code class="Fn">bus_space_read_multi_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function. Because the
- <code class="Fn">bus_space_read_multi_N</code>() functions read the same bus
- space location multiple times, they place an implicit read barrier between
- each successive read of that bus space location.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_1"><code class="Fn" id="bus_space_write_multi_1">bus_space_write_multi_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_2"><code class="Fn" id="bus_space_write_multi_2">bus_space_write_multi_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_4"><code class="Fn" id="bus_space_write_multi_4">bus_space_write_multi_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_write_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_8"><code class="Fn" id="bus_space_write_multi_8">bus_space_write_multi_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_write_multi_N</code>() family of
- functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items
- from the array specified by <var class="Fa">datap</var> and writes them into
- bus space at byte offset <var class="Fa">offset</var> in the region
- specified by <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>. Each successive data item is written to the
- same location in bus space. The location being written must lie within the
- bus space region specified by <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being written and the data array pointer should be
- properly aligned. On some systems, not obeying these requirements may cause
- incorrect data to be written, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_write_multi_N">Write operations done by the
- <a class="permalink" href="#bus_space_write_multi_N"><code class="Fn">bus_space_write_multi_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function. Because the
- <code class="Fn">bus_space_write_multi_N</code>() functions write the same
- bus space location multiple times, they place an implicit write barrier
- between each successive write of that bus space location.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_multi_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_1"><code class="Fn" id="bus_space_set_multi_1">bus_space_set_multi_1</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_multi_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_2"><code class="Fn" id="bus_space_set_multi_2">bus_space_set_multi_2</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_multi_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_4"><code class="Fn" id="bus_space_set_multi_4">bus_space_set_multi_4</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="bus_space_set_multi_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_8"><code class="Fn" id="bus_space_set_multi_8">bus_space_set_multi_8</code></a>(<var class="Fa">space</var>,
- <var class="Fa">handle</var>, <var class="Fa">offset</var>,
- <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2>
-<p class="Pp">The <code class="Fn">bus_space_set_multi_N</code>() writes
- <var class="Fa">value</var> into bus space at byte offset
- <var class="Fa">offset</var> in the region specified by
- <var class="Fa">handle</var> of the bus space specified by
- <var class="Fa">space</var>, <var class="Fa">count</var> times. The location
- being written must lie within the bus space region specified by
- <var class="Fa">handle</var>.</p>
-<p class="Pp">For portability, the starting address of the region specified by
- <var class="Fa">handle</var> plus the offset should be a multiple of the
- size of data items being written and the data array pointer should be
- properly aligned. On some systems, not obeying these requirements may cause
- incorrect data to be written, on others it may cause a system crash.</p>
-<p class="Pp" id="bus_space_set_multi_N">Write operations done by the
- <a class="permalink" href="#bus_space_set_multi_N"><code class="Fn">bus_space_set_multi_N</code></a>()
- functions may be executed out of order with respect to other pending read
- and write operations unless order is enforced by use of the
- <code class="Fn">bus_space_barrier</code>() function. Because the
- <code class="Fn">bus_space_set_multi_N</code>() functions write the same bus
- space location multiple times, they place an implicit write barrier between
- each successive write of that bus space location.</p>
-<p class="Pp">These functions will never fail. If they would fail (e.g. because
- of an argument error), that indicates a software bug which should cause a
- panic. In that case, they will never return.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="STREAM_FUNCTIONS"><a class="permalink" href="#STREAM_FUNCTIONS">STREAM
- FUNCTIONS</a></h1>
-<p class="Pp">Most of the <code class="Nm">bus_space</code> functions imply a
- host byte-order and a bus byte-order and take care of any translation for
- the caller. In some cases, however, hardware may map a FIFO or some other
- memory region for which the caller may want to use multi-word, yet
- untranslated access. Access to these types of memory regions should be with
- the
- <a class="permalink" href="#bus_space_*_stream_N"><code class="Fn" id="bus_space_*_stream_N">bus_space_*_stream_N</code></a>()
- functions.</p>
-<p class="Pp"></p>
-<dl class="Bl-tag Bl-compact">
- <dt id="bus_space_read_stream_1"><a class="permalink" href="#bus_space_read_stream_1"><code class="Fn">bus_space_read_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_stream_2"><a class="permalink" href="#bus_space_read_stream_2"><code class="Fn">bus_space_read_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_stream_4"><a class="permalink" href="#bus_space_read_stream_4"><code class="Fn">bus_space_read_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_stream_8"><a class="permalink" href="#bus_space_read_stream_8"><code class="Fn">bus_space_read_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_multi_stream_1"><a class="permalink" href="#bus_space_read_multi_stream_1"><code class="Fn">bus_space_read_multi_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_multi_stream_2"><a class="permalink" href="#bus_space_read_multi_stream_2"><code class="Fn">bus_space_read_multi_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_multi_stream_4"><a class="permalink" href="#bus_space_read_multi_stream_4"><code class="Fn">bus_space_read_multi_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_multi_stream_8"><a class="permalink" href="#bus_space_read_multi_stream_8"><code class="Fn">bus_space_read_multi_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_region_stream_1"><a class="permalink" href="#bus_space_read_region_stream_1"><code class="Fn">bus_space_read_region_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_region_stream_2"><a class="permalink" href="#bus_space_read_region_stream_2"><code class="Fn">bus_space_read_region_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_region_stream_4"><a class="permalink" href="#bus_space_read_region_stream_4"><code class="Fn">bus_space_read_region_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_read_region_stream_8"><a class="permalink" href="#bus_space_read_region_stream_8"><code class="Fn">bus_space_read_region_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_stream_1"><a class="permalink" href="#bus_space_write_stream_1"><code class="Fn">bus_space_write_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_stream_2"><a class="permalink" href="#bus_space_write_stream_2"><code class="Fn">bus_space_write_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_stream_4"><a class="permalink" href="#bus_space_write_stream_4"><code class="Fn">bus_space_write_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_stream_8"><a class="permalink" href="#bus_space_write_stream_8"><code class="Fn">bus_space_write_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_multi_stream_1"><a class="permalink" href="#bus_space_write_multi_stream_1"><code class="Fn">bus_space_write_multi_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_multi_stream_2"><a class="permalink" href="#bus_space_write_multi_stream_2"><code class="Fn">bus_space_write_multi_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_multi_stream_4"><a class="permalink" href="#bus_space_write_multi_stream_4"><code class="Fn">bus_space_write_multi_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_multi_stream_8"><a class="permalink" href="#bus_space_write_multi_stream_8"><code class="Fn">bus_space_write_multi_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_region_stream_1"><a class="permalink" href="#bus_space_write_region_stream_1"><code class="Fn">bus_space_write_region_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_region_stream_2"><a class="permalink" href="#bus_space_write_region_stream_2"><code class="Fn">bus_space_write_region_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_region_stream_4"><a class="permalink" href="#bus_space_write_region_stream_4"><code class="Fn">bus_space_write_region_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_write_region_stream_8"><a class="permalink" href="#bus_space_write_region_stream_8"><code class="Fn">bus_space_write_region_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_copy_region_stream_1"><a class="permalink" href="#bus_space_copy_region_stream_1"><code class="Fn">bus_space_copy_region_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_copy_region_stream_2"><a class="permalink" href="#bus_space_copy_region_stream_2"><code class="Fn">bus_space_copy_region_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_copy_region_stream_4"><a class="permalink" href="#bus_space_copy_region_stream_4"><code class="Fn">bus_space_copy_region_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_copy_region_stream_8"><a class="permalink" href="#bus_space_copy_region_stream_8"><code class="Fn">bus_space_copy_region_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_multi_stream_1"><a class="permalink" href="#bus_space_set_multi_stream_1"><code class="Fn">bus_space_set_multi_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_multi_stream_2"><a class="permalink" href="#bus_space_set_multi_stream_2"><code class="Fn">bus_space_set_multi_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_multi_stream_4"><a class="permalink" href="#bus_space_set_multi_stream_4"><code class="Fn">bus_space_set_multi_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_multi_stream_8"><a class="permalink" href="#bus_space_set_multi_stream_8"><code class="Fn">bus_space_set_multi_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_region_stream_1"><a class="permalink" href="#bus_space_set_region_stream_1"><code class="Fn">bus_space_set_region_stream_1</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_region_stream_2"><a class="permalink" href="#bus_space_set_region_stream_2"><code class="Fn">bus_space_set_region_stream_2</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_region_stream_4"><a class="permalink" href="#bus_space_set_region_stream_4"><code class="Fn">bus_space_set_region_stream_4</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="bus_space_set_region_stream_8"><a class="permalink" href="#bus_space_set_region_stream_8"><code class="Fn">bus_space_set_region_stream_8</code></a>()</dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-<p class="Pp">These functions are defined just as their non-stream counterparts,
- except that they provide no byte-order translation.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="COMPATIBILITY"><a class="permalink" href="#COMPATIBILITY">COMPATIBILITY</a></h1>
-<p class="Pp">The current <span class="Ux">NetBSD</span> version of the
- <code class="Nm">bus_space</code> interface specification differs slightly
- from the original specification that came into wide use and
- <span class="Ux">FreeBSD</span> adopted. A few of the function names and
- arguments have changed for consistency and increased functionality.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">bus_dma(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">bus_space</code> functions were introduced in
- a different form (memory and I/O spaces were accessed via different sets of
- functions) in <span class="Ux">NetBSD 1.2</span>. The functions were merged
- to work on generic &#x201C;spaces&#x201D; early in the
- <span class="Ux">NetBSD 1.3</span> development cycle, and many drivers were
- converted to use them. This document was written later during the
- <span class="Ux">NetBSD 1.3</span> development cycle, and the specification
- was updated to fix some consistency problems and to add some missing
- functionality.</p>
-<p class="Pp">The manual page was then adapted to the version of the interface
- that <span class="Ux">FreeBSD</span> imported for the CAM SCSI drivers, plus
- subsequent evolution. The <span class="Ux">FreeBSD</span>
- <code class="Nm">bus_space</code> version was imported in
- <span class="Ux">FreeBSD 3.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">bus_space</code> interfaces were designed and
- implemented by the <span class="Ux">NetBSD</span> developer community.
- Primary contributors and implementors were <span class="An">Chris
- Demetriou</span>, <span class="An">Jason Thorpe</span>, and
- <span class="An">Charles Hannum</span>, but the rest of the
- <span class="Ux">NetBSD</span> developers and the user community played a
- significant role in development.</p>
-<p class="Pp"><span class="An">Justin Gibbs</span> ported these interfaces to
- <span class="Ux">FreeBSD</span>.</p>
-<p class="Pp"><span class="An">Chris Demetriou</span> wrote this manual
- page.</p>
-<p class="Pp"><span class="An">Warner Losh</span> modified it for the
- <span class="Ux">FreeBSD</span> implementation.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">This manual may not completely and accurately document the
- interface, and many parts of the interface are unspecified.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 1, 2021</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>