xref: /dflybsd-src/share/man/man9/bus_space.9 (revision 453c886853d8415d56fb181e12008eb93de2e9f2)
19359a955SSascha Wildner.\" $NetBSD: bus_space.9,v 1.9 1999/03/06 22:09:29 mycroft Exp $
29359a955SSascha Wildner.\"
39359a955SSascha Wildner.\" Copyright (c) 2005 M. Warner Losh.  All Rights Reserved.
49359a955SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
59359a955SSascha Wildner.\" modification, are permitted provided that the following conditions
69359a955SSascha Wildner.\" are met:
79359a955SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
89359a955SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
99359a955SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
109359a955SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in the
119359a955SSascha Wildner.\"    documentation and/or other materials provided with the distribution.
129359a955SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
139359a955SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
149359a955SSascha Wildner.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
159359a955SSascha Wildner.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
169359a955SSascha Wildner.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
179359a955SSascha Wildner.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
189359a955SSascha Wildner.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
199359a955SSascha Wildner.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
209359a955SSascha Wildner.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
219359a955SSascha Wildner.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
229359a955SSascha Wildner.\" POSSIBILITY OF SUCH DAMAGE.
239359a955SSascha Wildner.\"
249359a955SSascha Wildner.\"
259359a955SSascha Wildner.\" Copyright (c) 1997 The NetBSD Foundation, Inc.
269359a955SSascha Wildner.\" All rights reserved.
279359a955SSascha Wildner.\"
289359a955SSascha Wildner.\" This code is derived from software contributed to The NetBSD Foundation
299359a955SSascha Wildner.\" by Christopher G. Demetriou.
309359a955SSascha Wildner.\"
319359a955SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
329359a955SSascha Wildner.\" modification, are permitted provided that the following conditions
339359a955SSascha Wildner.\" are met:
349359a955SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
359359a955SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
369359a955SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
379359a955SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in the
389359a955SSascha Wildner.\"    documentation and/or other materials provided with the distribution.
399359a955SSascha Wildner.\" 3. All advertising materials mentioning features or use of this software
409359a955SSascha Wildner.\"    must display the following acknowledgment:
419359a955SSascha Wildner.\" 	This product includes software developed by the NetBSD
429359a955SSascha Wildner.\" 	Foundation, Inc. and its contributors.
439359a955SSascha Wildner.\" 4. Neither the name of The NetBSD Foundation nor the names of its
449359a955SSascha Wildner.\"    contributors may be used to endorse or promote products derived
459359a955SSascha Wildner.\"    from this software without specific prior written permission.
469359a955SSascha Wildner.\"
479359a955SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
489359a955SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
499359a955SSascha Wildner.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
509359a955SSascha Wildner.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
519359a955SSascha Wildner.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
529359a955SSascha Wildner.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
539359a955SSascha Wildner.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
549359a955SSascha Wildner.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
559359a955SSascha Wildner.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
569359a955SSascha Wildner.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
579359a955SSascha Wildner.\" POSSIBILITY OF SUCH DAMAGE.
589359a955SSascha Wildner.\"
599359a955SSascha Wildner.\" $FreeBSD: src/share/man/man9/bus_space.9,v 1.5 2008/03/07 17:02:34 rwatson Exp $
609359a955SSascha Wildner.\"
61*453c8868SSascha Wildner.Dd December 23, 2018
629359a955SSascha Wildner.Dt BUS_SPACE 9
639359a955SSascha Wildner.Os
649359a955SSascha Wildner.Sh NAME
659359a955SSascha Wildner.Nm bus_space ,
669359a955SSascha Wildner.Nm bus_space_barrier ,
679359a955SSascha Wildner.Nm bus_space_copy_region_1 ,
689359a955SSascha Wildner.Nm bus_space_copy_region_2 ,
699359a955SSascha Wildner.Nm bus_space_copy_region_4 ,
709359a955SSascha Wildner.Nm bus_space_copy_region_stream_1 ,
719359a955SSascha Wildner.Nm bus_space_copy_region_stream_2 ,
729359a955SSascha Wildner.Nm bus_space_copy_region_stream_4 ,
739359a955SSascha Wildner.Nm bus_space_free ,
749359a955SSascha Wildner.Nm bus_space_map ,
759359a955SSascha Wildner.Nm bus_space_read_1 ,
769359a955SSascha Wildner.Nm bus_space_read_2 ,
779359a955SSascha Wildner.Nm bus_space_read_4 ,
789359a955SSascha Wildner.Nm bus_space_read_multi_1 ,
799359a955SSascha Wildner.Nm bus_space_read_multi_2 ,
809359a955SSascha Wildner.Nm bus_space_read_multi_4 ,
819359a955SSascha Wildner.Nm bus_space_read_multi_stream_1 ,
829359a955SSascha Wildner.Nm bus_space_read_multi_stream_2 ,
839359a955SSascha Wildner.Nm bus_space_read_multi_stream_4 ,
849359a955SSascha Wildner.Nm bus_space_read_region_1 ,
859359a955SSascha Wildner.Nm bus_space_read_region_2 ,
869359a955SSascha Wildner.Nm bus_space_read_region_4 ,
879359a955SSascha Wildner.Nm bus_space_read_region_stream_1 ,
889359a955SSascha Wildner.Nm bus_space_read_region_stream_2 ,
899359a955SSascha Wildner.Nm bus_space_read_region_stream_4 ,
909359a955SSascha Wildner.Nm bus_space_read_stream_1 ,
919359a955SSascha Wildner.Nm bus_space_read_stream_2 ,
929359a955SSascha Wildner.Nm bus_space_read_stream_4 ,
939359a955SSascha Wildner.Nm bus_space_set_multi_1 ,
949359a955SSascha Wildner.Nm bus_space_set_multi_2 ,
959359a955SSascha Wildner.Nm bus_space_set_multi_4 ,
969359a955SSascha Wildner.Nm bus_space_set_multi_stream_1 ,
979359a955SSascha Wildner.Nm bus_space_set_multi_stream_2 ,
989359a955SSascha Wildner.Nm bus_space_set_multi_stream_4 ,
999359a955SSascha Wildner.Nm bus_space_set_region_1 ,
1009359a955SSascha Wildner.Nm bus_space_set_region_2 ,
1019359a955SSascha Wildner.Nm bus_space_set_region_4 ,
1029359a955SSascha Wildner.Nm bus_space_set_region_stream_1 ,
1039359a955SSascha Wildner.Nm bus_space_set_region_stream_2 ,
1049359a955SSascha Wildner.Nm bus_space_set_region_stream_4 ,
1059359a955SSascha Wildner.Nm bus_space_subregion ,
1069359a955SSascha Wildner.Nm bus_space_unmap ,
1079359a955SSascha Wildner.Nm bus_space_write_1 ,
1089359a955SSascha Wildner.Nm bus_space_write_2 ,
1099359a955SSascha Wildner.Nm bus_space_write_4 ,
1109359a955SSascha Wildner.Nm bus_space_write_multi_1 ,
1119359a955SSascha Wildner.Nm bus_space_write_multi_2 ,
1129359a955SSascha Wildner.Nm bus_space_write_multi_4 ,
1139359a955SSascha Wildner.Nm bus_space_write_multi_stream_1 ,
1149359a955SSascha Wildner.Nm bus_space_write_multi_stream_2 ,
1159359a955SSascha Wildner.Nm bus_space_write_multi_stream_4 ,
1169359a955SSascha Wildner.Nm bus_space_write_region_1 ,
1179359a955SSascha Wildner.Nm bus_space_write_region_2 ,
1189359a955SSascha Wildner.Nm bus_space_write_region_4 ,
1199359a955SSascha Wildner.Nm bus_space_write_region_stream_1 ,
1209359a955SSascha Wildner.Nm bus_space_write_region_stream_2 ,
1219359a955SSascha Wildner.Nm bus_space_write_region_stream_4 ,
1229359a955SSascha Wildner.Nm bus_space_write_stream_1 ,
1239359a955SSascha Wildner.Nm bus_space_write_stream_2 ,
1249359a955SSascha Wildner.Nm bus_space_write_stream_4
1259359a955SSascha Wildner.Nd "bus space manipulation functions"
1269359a955SSascha Wildner.Sh SYNOPSIS
1279359a955SSascha Wildner.In sys/bus.h
1289359a955SSascha Wildner.Ft int
1299359a955SSascha Wildner.Fo bus_space_map
1309359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_addr_t address"
1319359a955SSascha Wildner.Fa "bus_size_t size" "int flags" "bus_space_handle_t *handlep"
1329359a955SSascha Wildner.Fc
1339359a955SSascha Wildner.Ft void
1349359a955SSascha Wildner.Fo bus_space_unmap
1359359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle" "bus_size_t size"
1369359a955SSascha Wildner.Fc
1379359a955SSascha Wildner.Ft int
1389359a955SSascha Wildner.Fo bus_space_subregion
1399359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle"
1409359a955SSascha Wildner.Fa "bus_size_t offset" "bus_size_t size" "bus_space_handle_t *nhandlep"
1419359a955SSascha Wildner.Fc
1429359a955SSascha Wildner.Ft int
1439359a955SSascha Wildner.Fo bus_space_alloc
1449359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_addr_t reg_start" "bus_addr_t reg_end"
1459359a955SSascha Wildner.Fa "bus_size_t size" "bus_size_t alignment" "bus_size_t boundary"
1469359a955SSascha Wildner.Fa "int flags" "bus_addr_t *addrp" "bus_space_handle_t *handlep"
1479359a955SSascha Wildner.Fc
1489359a955SSascha Wildner.Ft void
1499359a955SSascha Wildner.Fo bus_space_free
1509359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle" "bus_size_t size"
1519359a955SSascha Wildner.Fc
1529359a955SSascha Wildner.Ft u_int8_t
1539359a955SSascha Wildner.Fo bus_space_read_1
1549359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle" "bus_size_t offset"
1559359a955SSascha Wildner.Fc
1569359a955SSascha Wildner.Ft u_int16_t
1579359a955SSascha Wildner.Fo bus_space_read_2
1589359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle" "bus_size_t offset"
1599359a955SSascha Wildner.Fc
1609359a955SSascha Wildner.Ft u_int32_t
1619359a955SSascha Wildner.Fo bus_space_read_4
1629359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle" "bus_size_t offset"
1639359a955SSascha Wildner.Fc
1649359a955SSascha Wildner.Ft u_int8_t
1659359a955SSascha Wildner.Fo bus_space_read_stream_1
1669359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle" "bus_size_t offset"
1679359a955SSascha Wildner.Fc
1689359a955SSascha Wildner.Ft u_int16_t
1699359a955SSascha Wildner.Fo bus_space_read_stream_2
1709359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle" "bus_size_t offset"
1719359a955SSascha Wildner.Fc
1729359a955SSascha Wildner.Ft u_int32_t
1739359a955SSascha Wildner.Fo bus_space_read_stream_4
1749359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle" "bus_size_t offset"
1759359a955SSascha Wildner.Fc
1769359a955SSascha Wildner.Ft void
1779359a955SSascha Wildner.Fo bus_space_write_1
1789359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle"
1799359a955SSascha Wildner.Fa "bus_size_t offset" "u_int8_t value"
1809359a955SSascha Wildner.Fc
1819359a955SSascha Wildner.Ft void
1829359a955SSascha Wildner.Fo bus_space_write_2
1839359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle"
1849359a955SSascha Wildner.Fa "bus_size_t offset" "u_int16_t value"
1859359a955SSascha Wildner.Fc
1869359a955SSascha Wildner.Ft void
1879359a955SSascha Wildner.Fo bus_space_write_4
1889359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle"
1899359a955SSascha Wildner.Fa "bus_size_t offset" "u_int32_t value"
1909359a955SSascha Wildner.Fc
1919359a955SSascha Wildner.Ft void
1929359a955SSascha Wildner.Fo bus_space_write_stream_1
1939359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle"
1949359a955SSascha Wildner.Fa "bus_size_t offset" "u_int8_t value"
1959359a955SSascha Wildner.Fc
1969359a955SSascha Wildner.Ft void
1979359a955SSascha Wildner.Fo bus_space_write_stream_2
1989359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle"
1999359a955SSascha Wildner.Fa "bus_size_t offset" "u_int16_t value"
2009359a955SSascha Wildner.Fc
2019359a955SSascha Wildner.Ft void
2029359a955SSascha Wildner.Fo bus_space_write_stream_4
2039359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle"
2049359a955SSascha Wildner.Fa "bus_size_t offset" "u_int32_t value"
2059359a955SSascha Wildner.Fc
2069359a955SSascha Wildner.Ft void
2079359a955SSascha Wildner.Fo bus_space_barrier
2089359a955SSascha Wildner.Fa "bus_space_tag_t space" "bus_space_handle_t handle"
2099359a955SSascha Wildner.Fa "bus_size_t offset" "bus_size_t length" "int flags"
2109359a955SSascha Wildner.Fc
2119359a955SSascha Wildner.Ft void
2129359a955SSascha Wildner.Fo bus_space_read_region_1
2139359a955SSascha Wildner.Fa "bus_space_tag_t space"
2149359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t *datap"
2159359a955SSascha Wildner.Fa "bus_size_t count"
2169359a955SSascha Wildner.Fc
2179359a955SSascha Wildner.Ft void
2189359a955SSascha Wildner.Fo bus_space_read_region_2
2199359a955SSascha Wildner.Fa "bus_space_tag_t space"
2209359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t *datap"
2219359a955SSascha Wildner.Fa "bus_size_t count"
2229359a955SSascha Wildner.Fc
2239359a955SSascha Wildner.Ft void
2249359a955SSascha Wildner.Fo bus_space_read_region_4
2259359a955SSascha Wildner.Fa "bus_space_tag_t space"
2269359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t *datap"
2279359a955SSascha Wildner.Fa "bus_size_t count"
2289359a955SSascha Wildner.Fc
2299359a955SSascha Wildner.Ft void
2309359a955SSascha Wildner.Fo bus_space_read_region_stream_1
2319359a955SSascha Wildner.Fa "bus_space_tag_t space"
2329359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t *datap"
2339359a955SSascha Wildner.Fa "bus_size_t count"
2349359a955SSascha Wildner.Fc
2359359a955SSascha Wildner.Ft void
2369359a955SSascha Wildner.Fo bus_space_read_region_stream_2
2379359a955SSascha Wildner.Fa "bus_space_tag_t space"
2389359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t *datap"
2399359a955SSascha Wildner.Fa "bus_size_t count"
2409359a955SSascha Wildner.Fc
2419359a955SSascha Wildner.Ft void
2429359a955SSascha Wildner.Fo bus_space_read_region_stream_4
2439359a955SSascha Wildner.Fa "bus_space_tag_t space"
2449359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t *datap"
2459359a955SSascha Wildner.Fa "bus_size_t count"
2469359a955SSascha Wildner.Fc
2479359a955SSascha Wildner.Ft void
2489359a955SSascha Wildner.Fo bus_space_write_region_1
2499359a955SSascha Wildner.Fa "bus_space_tag_t space"
250*453c8868SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "const u_int8_t *datap"
2519359a955SSascha Wildner.Fa "bus_size_t count"
2529359a955SSascha Wildner.Fc
2539359a955SSascha Wildner.Ft void
2549359a955SSascha Wildner.Fo bus_space_write_region_2
2559359a955SSascha Wildner.Fa "bus_space_tag_t space"
256*453c8868SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "const u_int16_t *datap"
2579359a955SSascha Wildner.Fa "bus_size_t count"
2589359a955SSascha Wildner.Fc
2599359a955SSascha Wildner.Ft void
2609359a955SSascha Wildner.Fo bus_space_write_region_4
2619359a955SSascha Wildner.Fa "bus_space_tag_t space"
262*453c8868SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "const u_int32_t *datap"
2639359a955SSascha Wildner.Fa "bus_size_t count"
2649359a955SSascha Wildner.Fc
2659359a955SSascha Wildner.Ft void
2669359a955SSascha Wildner.Fo bus_space_write_region_stream_1
2679359a955SSascha Wildner.Fa "bus_space_tag_t space"
2689359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t *datap"
2699359a955SSascha Wildner.Fa "bus_size_t count"
2709359a955SSascha Wildner.Fc
2719359a955SSascha Wildner.Ft void
2729359a955SSascha Wildner.Fo bus_space_write_region_stream_2
2739359a955SSascha Wildner.Fa "bus_space_tag_t space"
2749359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t *datap"
2759359a955SSascha Wildner.Fa "bus_size_t count"
2769359a955SSascha Wildner.Fc
2779359a955SSascha Wildner.Ft void
2789359a955SSascha Wildner.Fo bus_space_write_region_stream_4
2799359a955SSascha Wildner.Fa "bus_space_tag_t space"
2809359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t *datap"
2819359a955SSascha Wildner.Fa "bus_size_t count"
2829359a955SSascha Wildner.Fc
2839359a955SSascha Wildner.Ft void
2849359a955SSascha Wildner.Fo bus_space_copy_region_1
2859359a955SSascha Wildner.Fa "bus_space_tag_t space"
2869359a955SSascha Wildner.Fa "bus_space_handle_t srchandle" "bus_size_t srcoffset"
2879359a955SSascha Wildner.Fa "bus_space_handle_t dsthandle" "bus_size_t dstoffset" "bus_size_t count"
2889359a955SSascha Wildner.Fc
2899359a955SSascha Wildner.Ft void
2909359a955SSascha Wildner.Fo bus_space_copy_region_2
2919359a955SSascha Wildner.Fa "bus_space_tag_t space"
2929359a955SSascha Wildner.Fa "bus_space_handle_t srchandle" "bus_size_t srcoffset"
2939359a955SSascha Wildner.Fa "bus_space_handle_t dsthandle" "bus_size_t dstoffset" "bus_size_t count"
2949359a955SSascha Wildner.Fc
2959359a955SSascha Wildner.Ft void
2969359a955SSascha Wildner.Fo bus_space_copy_region_4
2979359a955SSascha Wildner.Fa "bus_space_tag_t space"
2989359a955SSascha Wildner.Fa "bus_space_handle_t srchandle" "bus_size_t srcoffset"
2999359a955SSascha Wildner.Fa "bus_space_handle_t dsthandle" "bus_size_t dstoffset" "bus_size_t count"
3009359a955SSascha Wildner.Fc
3019359a955SSascha Wildner.Ft void
3029359a955SSascha Wildner.Fo bus_space_copy_region_stream_1
3039359a955SSascha Wildner.Fa "bus_space_tag_t space"
3049359a955SSascha Wildner.Fa "bus_space_handle_t srchandle" "bus_size_t srcoffset"
3059359a955SSascha Wildner.Fa "bus_space_handle_t dsthandle" "bus_size_t dstoffset" "bus_size_t count"
3069359a955SSascha Wildner.Fc
3079359a955SSascha Wildner.Ft void
3089359a955SSascha Wildner.Fo bus_space_copy_region_stream_2
3099359a955SSascha Wildner.Fa "bus_space_tag_t space"
3109359a955SSascha Wildner.Fa "bus_space_handle_t srchandle" "bus_size_t srcoffset"
3119359a955SSascha Wildner.Fa "bus_space_handle_t dsthandle" "bus_size_t dstoffset" "bus_size_t count"
3129359a955SSascha Wildner.Fc
3139359a955SSascha Wildner.Ft void
3149359a955SSascha Wildner.Fo bus_space_copy_region_stream_4
3159359a955SSascha Wildner.Fa "bus_space_tag_t space"
3169359a955SSascha Wildner.Fa "bus_space_handle_t srchandle" "bus_size_t srcoffset"
3179359a955SSascha Wildner.Fa "bus_space_handle_t dsthandle" "bus_size_t dstoffset" "bus_size_t count"
3189359a955SSascha Wildner.Fc
3199359a955SSascha Wildner.Ft void
3209359a955SSascha Wildner.Fo bus_space_set_region_1
3219359a955SSascha Wildner.Fa "bus_space_tag_t space"
3229359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t value"
3239359a955SSascha Wildner.Fa "bus_size_t count"
3249359a955SSascha Wildner.Fc
3259359a955SSascha Wildner.Ft void
3269359a955SSascha Wildner.Fo bus_space_set_region_2
3279359a955SSascha Wildner.Fa "bus_space_tag_t space"
3289359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t value"
3299359a955SSascha Wildner.Fa "bus_size_t count"
3309359a955SSascha Wildner.Fc
3319359a955SSascha Wildner.Ft void
3329359a955SSascha Wildner.Fo bus_space_set_region_4
3339359a955SSascha Wildner.Fa "bus_space_tag_t space"
3349359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t value"
3359359a955SSascha Wildner.Fa "bus_size_t count"
3369359a955SSascha Wildner.Fc
3379359a955SSascha Wildner.Ft void
3389359a955SSascha Wildner.Fo bus_space_set_region_stream_1
3399359a955SSascha Wildner.Fa "bus_space_tag_t space"
3409359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t value"
3419359a955SSascha Wildner.Fa "bus_size_t count"
3429359a955SSascha Wildner.Fc
3439359a955SSascha Wildner.Ft void
3449359a955SSascha Wildner.Fo bus_space_set_region_stream_2
3459359a955SSascha Wildner.Fa "bus_space_tag_t space"
3469359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t value"
3479359a955SSascha Wildner.Fa "bus_size_t count"
3489359a955SSascha Wildner.Fc
3499359a955SSascha Wildner.Ft void
3509359a955SSascha Wildner.Fo bus_space_set_region_stream_4
3519359a955SSascha Wildner.Fa "bus_space_tag_t space"
3529359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t value"
3539359a955SSascha Wildner.Fa "bus_size_t count"
3549359a955SSascha Wildner.Fc
3559359a955SSascha Wildner.Ft void
3569359a955SSascha Wildner.Fo bus_space_read_multi_1
3579359a955SSascha Wildner.Fa "bus_space_tag_t space"
3589359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t *datap"
3599359a955SSascha Wildner.Fa "bus_size_t count"
3609359a955SSascha Wildner.Fc
3619359a955SSascha Wildner.Ft void
3629359a955SSascha Wildner.Fo bus_space_read_multi_2
3639359a955SSascha Wildner.Fa "bus_space_tag_t space"
3649359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t *datap"
3659359a955SSascha Wildner.Fa "bus_size_t count"
3669359a955SSascha Wildner.Fc
3679359a955SSascha Wildner.Ft void
3689359a955SSascha Wildner.Fo bus_space_read_multi_4
3699359a955SSascha Wildner.Fa "bus_space_tag_t space"
3709359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t *datap"
3719359a955SSascha Wildner.Fa "bus_size_t count"
3729359a955SSascha Wildner.Fc
3739359a955SSascha Wildner.Ft void
3749359a955SSascha Wildner.Fo bus_space_read_multi_stream_1
3759359a955SSascha Wildner.Fa "bus_space_tag_t space"
3769359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t *datap"
3779359a955SSascha Wildner.Fa "bus_size_t count"
3789359a955SSascha Wildner.Fc
3799359a955SSascha Wildner.Ft void
3809359a955SSascha Wildner.Fo bus_space_read_multi_stream_2
3819359a955SSascha Wildner.Fa "bus_space_tag_t space"
3829359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t *datap"
3839359a955SSascha Wildner.Fa "bus_size_t count"
3849359a955SSascha Wildner.Fc
3859359a955SSascha Wildner.Ft void
3869359a955SSascha Wildner.Fo bus_space_read_multi_stream_4
3879359a955SSascha Wildner.Fa "bus_space_tag_t space"
3889359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t *datap"
3899359a955SSascha Wildner.Fa "bus_size_t count"
3909359a955SSascha Wildner.Fc
3919359a955SSascha Wildner.Ft void
3929359a955SSascha Wildner.Fo bus_space_write_multi_1
3939359a955SSascha Wildner.Fa "bus_space_tag_t space"
394*453c8868SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "const u_int8_t *datap"
3959359a955SSascha Wildner.Fa "bus_size_t count"
3969359a955SSascha Wildner.Fc
3979359a955SSascha Wildner.Ft void
3989359a955SSascha Wildner.Fo bus_space_write_multi_2
3999359a955SSascha Wildner.Fa "bus_space_tag_t space"
400*453c8868SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "const u_int16_t *datap"
4019359a955SSascha Wildner.Fa "bus_size_t count"
4029359a955SSascha Wildner.Fc
4039359a955SSascha Wildner.Ft void
4049359a955SSascha Wildner.Fo bus_space_write_multi_4
4059359a955SSascha Wildner.Fa "bus_space_tag_t space"
406*453c8868SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "const u_int32_t *datap"
4079359a955SSascha Wildner.Fa "bus_size_t count"
4089359a955SSascha Wildner.Fc
4099359a955SSascha Wildner.Ft void
4109359a955SSascha Wildner.Fo bus_space_write_multi_stream_1
4119359a955SSascha Wildner.Fa "bus_space_tag_t space"
4129359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t *datap"
4139359a955SSascha Wildner.Fa "bus_size_t count"
4149359a955SSascha Wildner.Fc
4159359a955SSascha Wildner.Ft void
4169359a955SSascha Wildner.Fo bus_space_write_multi_stream_2
4179359a955SSascha Wildner.Fa "bus_space_tag_t space"
4189359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t *datap"
4199359a955SSascha Wildner.Fa "bus_size_t count"
4209359a955SSascha Wildner.Fc
4219359a955SSascha Wildner.Ft void
4229359a955SSascha Wildner.Fo bus_space_write_multi_stream_4
4239359a955SSascha Wildner.Fa "bus_space_tag_t space"
4249359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t *datap"
4259359a955SSascha Wildner.Fa "bus_size_t count"
4269359a955SSascha Wildner.Fc
4279359a955SSascha Wildner.Ft void
4289359a955SSascha Wildner.Fo bus_space_set_multi_1
4299359a955SSascha Wildner.Fa "bus_space_tag_t space"
4309359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t value"
4319359a955SSascha Wildner.Fa "bus_size_t count"
4329359a955SSascha Wildner.Fc
4339359a955SSascha Wildner.Ft void
4349359a955SSascha Wildner.Fo bus_space_set_multi_2
4359359a955SSascha Wildner.Fa "bus_space_tag_t space"
4369359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t value"
4379359a955SSascha Wildner.Fa "bus_size_t count"
4389359a955SSascha Wildner.Fc
4399359a955SSascha Wildner.Ft void
4409359a955SSascha Wildner.Fo bus_space_set_multi_4
4419359a955SSascha Wildner.Fa "bus_space_tag_t space"
4429359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t value"
4439359a955SSascha Wildner.Fa "bus_size_t count"
4449359a955SSascha Wildner.Fc
4459359a955SSascha Wildner.Ft void
4469359a955SSascha Wildner.Fo bus_space_set_multi_stream_1
4479359a955SSascha Wildner.Fa "bus_space_tag_t space"
4489359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int8_t value"
4499359a955SSascha Wildner.Fa "bus_size_t count"
4509359a955SSascha Wildner.Fc
4519359a955SSascha Wildner.Ft void
4529359a955SSascha Wildner.Fo bus_space_set_multi_stream_2
4539359a955SSascha Wildner.Fa "bus_space_tag_t space"
4549359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int16_t value"
4559359a955SSascha Wildner.Fa "bus_size_t count"
4569359a955SSascha Wildner.Fc
4579359a955SSascha Wildner.Ft void
4589359a955SSascha Wildner.Fo bus_space_set_multi_stream_4
4599359a955SSascha Wildner.Fa "bus_space_tag_t space"
4609359a955SSascha Wildner.Fa "bus_space_handle_t handle" "bus_size_t offset" "u_int32_t value"
4619359a955SSascha Wildner.Fa "bus_size_t count"
4629359a955SSascha Wildner.Fc
4639359a955SSascha Wildner.Sh DESCRIPTION
4649359a955SSascha WildnerThe
4659359a955SSascha Wildner.Nm
4669359a955SSascha Wildnerfunctions exist to allow device drivers
4679359a955SSascha Wildnermachine-independent access to bus memory and register areas.
4689359a955SSascha WildnerAll of the
4699359a955SSascha Wildnerfunctions and types described in this document can be used by including
4709359a955SSascha Wildnerthe
4719359a955SSascha Wildner.In sys/bus.h
4729359a955SSascha Wildnerheader file.
4739359a955SSascha Wildner.Pp
4749359a955SSascha WildnerMany common devices are used on multiple architectures, but are accessed
4759359a955SSascha Wildnerdifferently on each because of architectural constraints.
4769359a955SSascha WildnerFor instance, a device which is mapped in one system's I/O space may be
4779359a955SSascha Wildnermapped in memory space on a second system.
4789359a955SSascha WildnerOn a third system, architectural
4799359a955SSascha Wildnerlimitations might change the way registers need to be accessed (e.g.\&
4809359a955SSascha Wildnercreating a non-linear register space).
4819359a955SSascha WildnerIn some cases, a single
4829359a955SSascha Wildnerdriver may need to access the same type of device in multiple ways in a
4839359a955SSascha Wildnersingle system or architecture.
4849359a955SSascha WildnerThe goal of the
4859359a955SSascha Wildner.Nm
4869359a955SSascha Wildnerfunctions is to allow a single driver source file to manipulate a set
4879359a955SSascha Wildnerof devices on different system architectures, and to allow a single driver
4889359a955SSascha Wildnerobject file to manipulate a set of devices on multiple bus types on a
4899359a955SSascha Wildnersingle architecture.
4909359a955SSascha Wildner.Pp
4919359a955SSascha WildnerNot all busses have to implement all functions described in this
4929359a955SSascha Wildnerdocument, though that is encouraged if the operations are logically
4939359a955SSascha Wildnersupported by the bus.
4949359a955SSascha WildnerUnimplemented functions should cause
4959359a955SSascha Wildnercompile-time errors if possible.
4969359a955SSascha Wildner.Pp
4979359a955SSascha WildnerAll of the interface definitions described in this document are shown as
4989359a955SSascha Wildnerfunction prototypes and discussed as if they were required to be
4999359a955SSascha Wildnerfunctions.
5009359a955SSascha WildnerImplementations are encouraged to implement prototyped
5019359a955SSascha Wildner(type-checked) versions of these interfaces, but may implement them as
5029359a955SSascha Wildnermacros if appropriate.
5039359a955SSascha WildnerMachine-dependent types, variables, and functions
5049359a955SSascha Wildnershould be marked clearly
5059359a955SSascha Wildnerto avoid confusion with the
5069359a955SSascha Wildnermachine-independent types and functions, and, if possible, should be
5079359a955SSascha Wildnergiven names which make the machine-dependence clear.
5089359a955SSascha Wildner.Sh CONCEPTS AND GUIDELINES
5099359a955SSascha WildnerBus spaces are described by bus space tags, which can be created only by
5109359a955SSascha Wildnermachine-dependent code.
5119359a955SSascha WildnerA given machine may have several different types
5129359a955SSascha Wildnerof bus space (e.g.\& memory space and I/O space), and thus may provide
5139359a955SSascha Wildnermultiple different bus space tags.
5149359a955SSascha WildnerIndividual busses or devices on a machine may use more than one bus space
5159359a955SSascha Wildnertag.
5169359a955SSascha WildnerFor instance, ISA devices are
5179359a955SSascha Wildnergiven an ISA memory space tag and an ISA I/O space tag.
5189359a955SSascha WildnerArchitectures
5199359a955SSascha Wildnermay have several different tags which represent the same type of
5209359a955SSascha Wildnerspace, for instance because of multiple different host bus interface
5219359a955SSascha Wildnerchipsets.
5229359a955SSascha Wildner.Pp
5239359a955SSascha WildnerA range in bus space is described by a bus address and a bus size.
5249359a955SSascha WildnerThe
5259359a955SSascha Wildnerbus address describes the start of the range in bus space.
5269359a955SSascha WildnerThe bus
5279359a955SSascha Wildnersize describes the size of the range in bytes.
5289359a955SSascha WildnerBusses which are not byte
5299359a955SSascha Wildneraddressable may require use of bus space ranges with appropriately
5309359a955SSascha Wildneraligned addresses and properly rounded sizes.
5319359a955SSascha Wildner.Pp
5329359a955SSascha WildnerAccess to regions of bus space is facilitated by use of bus space handles,
5339359a955SSascha Wildnerwhich are usually created by mapping a specific range of a bus space.
5349359a955SSascha WildnerHandles may also be created by allocating
5359359a955SSascha Wildnerand mapping a range of bus space, the actual location of which is picked
5369359a955SSascha Wildnerby the implementation within bounds specified by the caller of the
5379359a955SSascha Wildnerallocation function.
5389359a955SSascha Wildner.Pp
5399359a955SSascha WildnerAll of the bus space access functions require one bus space tag
5409359a955SSascha Wildnerargument, at least one handle argument, and at least one offset argument
5419359a955SSascha Wildner(a bus size).
5429359a955SSascha WildnerThe bus space tag specifies the space, each handle specifies a region in
5439359a955SSascha Wildnerthe space, and each offset specifies the offset into the region of the
5449359a955SSascha Wildneractual location(s) to be accessed.
5459359a955SSascha WildnerOffsets are given in bytes, though busses
5469359a955SSascha Wildnermay impose alignment constraints.
5479359a955SSascha WildnerThe offset used to access data
5489359a955SSascha Wildnerrelative to a given handle must be such that all of the data being
5499359a955SSascha Wildneraccessed is in the mapped region that the handle describes.
5509359a955SSascha WildnerTrying to
5519359a955SSascha Wildneraccess data outside that region is an error.
5529359a955SSascha Wildner.Pp
5539359a955SSascha WildnerBecause some architectures' memory systems use buffering to improve
5549359a955SSascha Wildnermemory and device access performance, there is a mechanism which can be
5559359a955SSascha Wildnerused to create
5569359a955SSascha Wildner.Dq barriers
5579359a955SSascha Wildnerin the bus space read and write stream.
5589359a955SSascha WildnerThere
5599359a955SSascha Wildnerare three types of barriers: read, write, and read/write.
5609359a955SSascha WildnerAll reads
5619359a955SSascha Wildnerstarted to the region before a read barrier must complete before any reads
5629359a955SSascha Wildnerafter the read barrier are started.
5639359a955SSascha Wildner(The analogous requirement is true for
5649359a955SSascha Wildnerwrite barriers.)
5659359a955SSascha WildnerRead/write barriers force all reads and writes started
5669359a955SSascha Wildnerbefore the barrier to complete before any reads or writes after the
5679359a955SSascha Wildnerbarrier are started.
5689359a955SSascha WildnerCorrectly-written drivers will include all
5699359a955SSascha Wildnerappropriate barriers, and assume only the read/write ordering imposed by
5709359a955SSascha Wildnerthe barrier operations.
5719359a955SSascha Wildner.Pp
5729359a955SSascha WildnerPeople trying to write portable drivers with the
5739359a955SSascha Wildner.Nm
5749359a955SSascha Wildnerfunctions should
5759359a955SSascha Wildnertry to make minimal assumptions about what the system allows.
5769359a955SSascha WildnerIn particular,
5779359a955SSascha Wildnerthey should expect that the system requires bus space addresses being
5789359a955SSascha Wildneraccessed to be naturally aligned (i.e., base address of handle added to
5799359a955SSascha Wildneroffset is a multiple of the access size), and that the system does
5809359a955SSascha Wildneralignment checking on pointers (i.e., pointer to objects being read and
5819359a955SSascha Wildnerwritten must point to properly-aligned data).
5829359a955SSascha Wildner.Pp
5839359a955SSascha WildnerThe descriptions of the
5849359a955SSascha Wildner.Nm
5859359a955SSascha Wildnerfunctions given below all assume that
5869359a955SSascha Wildnerthey are called with proper arguments.
5879359a955SSascha WildnerIf called with invalid arguments
5889359a955SSascha Wildneror arguments that are out of range (e.g.\& trying to access data outside of
5899359a955SSascha Wildnerthe region mapped when a given handle was created), undefined behaviour
5909359a955SSascha Wildnerresults.
5919359a955SSascha WildnerIn that case, they may cause the
5929359a955SSascha Wildnersystem to halt, either intentionally (via panic) or unintentionally (by
5939359a955SSascha Wildnercausing a fatal trap of by some other means) or may cause improper
5949359a955SSascha Wildneroperation which is not immediately fatal.
5959359a955SSascha WildnerFunctions which return
5969359a955SSascha Wildner.Ft void
5979359a955SSascha Wildneror which return data read from bus space (i.e., functions which
5989359a955SSascha Wildnerdo not obviously return an error code) do not fail.
5999359a955SSascha WildnerThey could only fail
6009359a955SSascha Wildnerif given invalid arguments, and in that case their behaviour is undefined.
6019359a955SSascha Wildner.Sh TYPES
6029359a955SSascha WildnerSeveral types are defined
6039359a955SSascha Wildnerto facilitate use of the
6049359a955SSascha Wildner.Nm
6059359a955SSascha Wildnerfunctions by drivers.
6069359a955SSascha Wildner.Ss Vt bus_addr_t
6079359a955SSascha WildnerThe
6089359a955SSascha Wildner.Vt bus_addr_t
6099359a955SSascha Wildnertype is used to describe bus addresses.
6109359a955SSascha WildnerIt must be an
6119359a955SSascha Wildnerunsigned integral type
6129359a955SSascha Wildnercapable of holding the largest bus address usable by the architecture.
6139359a955SSascha WildnerThis
6149359a955SSascha Wildnertype is primarily used when mapping and unmapping bus space.
6159359a955SSascha Wildner.Ss Vt bus_size_t
6169359a955SSascha WildnerThe
6179359a955SSascha Wildner.Vt bus_size_t
6189359a955SSascha Wildnertype is used to describe sizes of ranges in bus space.
6199359a955SSascha WildnerIt must be an
6209359a955SSascha Wildnerunsigned integral type capable of holding the size of the largest bus
6219359a955SSascha Wildneraddress range usable on the architecture.
6229359a955SSascha WildnerThis type is used by virtually all
6239359a955SSascha Wildnerof the
6249359a955SSascha Wildner.Nm
6259359a955SSascha Wildnerfunctions, describing sizes when mapping regions and
6269359a955SSascha Wildneroffsets into regions when performing space access operations.
6279359a955SSascha Wildner.Ss Vt bus_space_tag_t
6289359a955SSascha WildnerThe
6299359a955SSascha Wildner.Vt bus_space_tag_t
6309359a955SSascha Wildnertype is used to describe a particular bus space on a machine.
6319359a955SSascha WildnerIts
6329359a955SSascha Wildnercontents are machine-dependent and should be considered opaque by
6339359a955SSascha Wildnermachine-independent code.
6349359a955SSascha WildnerThis type is used by all
6359359a955SSascha Wildner.Nm
6369359a955SSascha Wildnerfunctions to name the space on which they are operating.
6379359a955SSascha Wildner.Ss Vt bus_space_handle_t
6389359a955SSascha WildnerThe
6399359a955SSascha Wildner.Vt bus_space_handle_t
6409359a955SSascha Wildnertype is used to describe a mapping of a range of bus space.
6419359a955SSascha WildnerIts
6429359a955SSascha Wildnercontents are machine-dependent and should be considered opaque by
6439359a955SSascha Wildnermachine-independent code.
6449359a955SSascha WildnerThis type is used when performing bus space
6459359a955SSascha Wildneraccess operations.
6469359a955SSascha Wildner.Sh MAPPING AND UNMAPPING BUS SPACE
6479359a955SSascha WildnerThis section is specific to the
6489359a955SSascha Wildner.Nx
6499359a955SSascha Wildnerversion of these functions and may or may not apply to the
6509359a955SSascha Wildner.Dx
6519359a955SSascha Wildnerversion.
6529359a955SSascha Wildner.Pp
6539359a955SSascha WildnerBus space must be mapped before it can be used, and should be
6549359a955SSascha Wildnerunmapped when it is no longer needed.
6559359a955SSascha WildnerThe
6569359a955SSascha Wildner.Fn bus_space_map
6579359a955SSascha Wildnerand
6589359a955SSascha Wildner.Fn bus_space_unmap
6599359a955SSascha Wildnerfunctions provide these capabilities.
6609359a955SSascha Wildner.Pp
6619359a955SSascha WildnerSome drivers need to be able to pass a subregion of already-mapped bus
6629359a955SSascha Wildnerspace to another driver or module within a driver.
6639359a955SSascha WildnerThe
6649359a955SSascha Wildner.Fn bus_space_subregion
6659359a955SSascha Wildnerfunction allows such subregions to be created.
6669359a955SSascha Wildner.Ss Fn bus_space_map space address size flags handlep
6679359a955SSascha WildnerThe
6689359a955SSascha Wildner.Fn bus_space_map
6699359a955SSascha Wildnerfunction maps the region of bus space named by the
6709359a955SSascha Wildner.Fa space , address ,
6719359a955SSascha Wildnerand
6729359a955SSascha Wildner.Fa size
6739359a955SSascha Wildnerarguments.
6749359a955SSascha WildnerIf successful, it returns zero
6759359a955SSascha Wildnerand fills in the bus space handle pointed to by
6769359a955SSascha Wildner.Fa handlep
6779359a955SSascha Wildnerwith the handle
6789359a955SSascha Wildnerthat can be used to access the mapped region.
6799359a955SSascha WildnerIf unsuccessful,
6809359a955SSascha Wildnerit will return non-zero and leave the bus space handle pointed
6819359a955SSascha Wildnerto by
6829359a955SSascha Wildner.Fa handlep
6839359a955SSascha Wildnerin an undefined state.
6849359a955SSascha Wildner.Pp
6859359a955SSascha WildnerThe
6869359a955SSascha Wildner.Fa flags
6879359a955SSascha Wildnerargument controls how the space is to be mapped.
6889359a955SSascha WildnerSupported flags include:
6899359a955SSascha Wildner.Bl -tag -width ".Dv BUS_SPACE_MAP_CACHEABLE"
6909359a955SSascha Wildner.It Dv BUS_SPACE_MAP_CACHEABLE
6919359a955SSascha WildnerTry to map the space so that accesses can be cached and/or
6929359a955SSascha Wildnerprefetched by the system.
6939359a955SSascha WildnerIf this flag is not specified, the
6949359a955SSascha Wildnerimplementation should map the space so that it will not be cached or
6959359a955SSascha Wildnerprefetched.
6969359a955SSascha Wildner.Pp
6979359a955SSascha WildnerThis flag must have a value of 1 on all implementations for backward
6989359a955SSascha Wildnercompatibility.
6999359a955SSascha Wildner.It Dv BUS_SPACE_MAP_LINEAR
7009359a955SSascha WildnerTry to map the space so that its contents can be accessed linearly via
7019359a955SSascha Wildnernormal memory access methods (e.g.\& pointer dereferencing and structure
7029359a955SSascha Wildneraccesses).
7039359a955SSascha WildnerThis is useful when software wants to do direct access to a memory
7049359a955SSascha Wildnerdevice, e.g.\& a frame buffer.
7059359a955SSascha WildnerIf this flag is specified and linear
7069359a955SSascha Wildnermapping is not possible, the
7079359a955SSascha Wildner.Fn bus_space_map
7089359a955SSascha Wildnercall should fail.
7099359a955SSascha WildnerIf this
7109359a955SSascha Wildnerflag is not specified, the system may map the space in whatever way is
7119359a955SSascha Wildnermost convenient.
7129359a955SSascha Wildner.El
7139359a955SSascha Wildner.Pp
7149359a955SSascha WildnerNot all combinations of flags make sense or are supported with all
7159359a955SSascha Wildnerspaces.
7169359a955SSascha WildnerFor instance,
7179359a955SSascha Wildner.Dv BUS_SPACE_MAP_CACHEABLE
7189359a955SSascha Wildnermay be meaningless when
7199359a955SSascha Wildnerused on many systems' I/O port spaces, and on some systems
7209359a955SSascha Wildner.Dv BUS_SPACE_MAP_LINEAR
7219359a955SSascha Wildnerwithout
7229359a955SSascha Wildner.Dv BUS_SPACE_MAP_CACHEABLE
7239359a955SSascha Wildnermay never work.
7249359a955SSascha WildnerWhen the system hardware or firmware provides hints as to how spaces should be
7259359a955SSascha Wildnermapped (e.g.\& the PCI memory mapping registers'
7269359a955SSascha Wildner.Dq prefetchable
7279359a955SSascha Wildnerbit), those
7289359a955SSascha Wildnerhints should be followed for maximum compatibility.
7299359a955SSascha WildnerOn some systems,
7309359a955SSascha Wildnerrequesting a mapping that cannot be satisfied (e.g.\& requesting a
7319359a955SSascha Wildnernon-cacheable mapping when the system can only provide a cacheable one)
7329359a955SSascha Wildnerwill cause the request to fail.
7339359a955SSascha Wildner.Pp
7349359a955SSascha WildnerSome implementations may keep track of use of bus space for some or all
7359359a955SSascha Wildnerbus spaces and refuse to allow duplicate allocations.
7369359a955SSascha WildnerThis is encouraged
7379359a955SSascha Wildnerfor bus spaces which have no notion of slot-specific space addressing,
7389359a955SSascha Wildnersuch as ISA and VME, and for spaces which coexist with those spaces
7399359a955SSascha Wildner(e.g.\& EISA and PCI memory and I/O spaces co-existing with ISA memory and
7409359a955SSascha WildnerI/O spaces).
7419359a955SSascha Wildner.Pp
7429359a955SSascha WildnerMapped regions may contain areas for which there is no device on the
7439359a955SSascha Wildnerbus.
7449359a955SSascha WildnerIf space in those areas is accessed, the results are
7459359a955SSascha Wildnerbus-dependent.
7469359a955SSascha Wildner.Ss Fn bus_space_unmap space handle size
7479359a955SSascha WildnerThe
7489359a955SSascha Wildner.Fn bus_space_unmap
7499359a955SSascha Wildnerfunction unmaps a region of bus space mapped with
7509359a955SSascha Wildner.Fn bus_space_map .
7519359a955SSascha WildnerWhen unmapping a region, the
7529359a955SSascha Wildner.Fa size
7539359a955SSascha Wildnerspecified should be
7549359a955SSascha Wildnerthe same as the size given to
7559359a955SSascha Wildner.Fn bus_space_map
7569359a955SSascha Wildnerwhen mapping that region.
7579359a955SSascha Wildner.Pp
7589359a955SSascha WildnerAfter
7599359a955SSascha Wildner.Fn bus_space_unmap
7609359a955SSascha Wildneris called on a handle, that handle is no longer
7619359a955SSascha Wildnervalid.
7629359a955SSascha Wildner(If copies were made of the handle they are no longer valid,
7639359a955SSascha Wildnereither.)
7649359a955SSascha Wildner.Pp
7659359a955SSascha WildnerThis function will never fail.
7669359a955SSascha WildnerIf it would fail (e.g.\& because of an
7679359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
7689359a955SSascha Wildnerpanic.
7699359a955SSascha WildnerIn that case,
7709359a955SSascha Wildner.Fn bus_space_unmap
7719359a955SSascha Wildnerwill never return.
7729359a955SSascha Wildner.Ss Fn bus_space_subregion space handle offset size nhandlep
7739359a955SSascha WildnerThe
7749359a955SSascha Wildner.Fn bus_space_subregion
7759359a955SSascha Wildnerfunction is a convenience function which makes a
7769359a955SSascha Wildnernew handle to some subregion of an already-mapped region of bus space.
7779359a955SSascha WildnerThe subregion described by the new handle starts at byte offset
7789359a955SSascha Wildner.Fa offset
7799359a955SSascha Wildnerinto the region described by
7809359a955SSascha Wildner.Fa handle ,
7819359a955SSascha Wildnerwith the size give by
7829359a955SSascha Wildner.Fa size ,
7839359a955SSascha Wildnerand must be wholly contained within the original region.
7849359a955SSascha Wildner.Pp
7859359a955SSascha WildnerIf successful,
7869359a955SSascha Wildner.Fn bus_space_subregion
7879359a955SSascha Wildnerreturns zero and fills in the bus
7889359a955SSascha Wildnerspace handle pointed to by
7899359a955SSascha Wildner.Fa nhandlep .
7909359a955SSascha WildnerIf unsuccessful, it returns non-zero and leaves the bus space handle
7919359a955SSascha Wildnerpointed to by
7929359a955SSascha Wildner.Fa nhandlep
7939359a955SSascha Wildnerin an
7949359a955SSascha Wildnerundefined state.
7959359a955SSascha WildnerIn either case, the handle described by
7969359a955SSascha Wildner.Fa handle
7979359a955SSascha Wildnerremains valid and is unmodified.
7989359a955SSascha Wildner.Pp
7999359a955SSascha WildnerWhen done with a handle created by
8009359a955SSascha Wildner.Fn bus_space_subregion ,
8019359a955SSascha Wildnerthe handle should
8029359a955SSascha Wildnerbe thrown away.
8039359a955SSascha WildnerUnder no circumstances should
8049359a955SSascha Wildner.Fn bus_space_unmap
8059359a955SSascha Wildnerbe used on the handle.
8069359a955SSascha WildnerDoing so may confuse any resource management
8079359a955SSascha Wildnerbeing done on the space, and will result in undefined behaviour.
8089359a955SSascha WildnerWhen
8099359a955SSascha Wildner.Fn bus_space_unmap
8109359a955SSascha Wildneror
8119359a955SSascha Wildner.Fn bus_space_free
8129359a955SSascha Wildneris called on a handle, all subregions of that handle become invalid.
8139359a955SSascha Wildner.Sh ALLOCATING AND FREEING BUS SPACE
8149359a955SSascha WildnerThis section is specific to the
8159359a955SSascha Wildner.Nx
8169359a955SSascha Wildnerversion of these functions and may or may not apply to the
8179359a955SSascha Wildner.Dx
8189359a955SSascha Wildnerversion.
8199359a955SSascha Wildner.Pp
8209359a955SSascha WildnerSome devices require or allow bus space to be allocated by the operating
8219359a955SSascha Wildnersystem for device use.
8229359a955SSascha WildnerWhen the devices no longer need the space, the
8239359a955SSascha Wildneroperating system should free it for use by other devices.
8249359a955SSascha WildnerThe
8259359a955SSascha Wildner.Fn bus_space_alloc
8269359a955SSascha Wildnerand
8279359a955SSascha Wildner.Fn bus_space_free
8289359a955SSascha Wildnerfunctions provide these capabilities.
8299359a955SSascha Wildner.Ss Fn bus_space_alloc space reg_start reg_end size alignment boundary \
8309359a955SSascha Wildnerflags addrp handlep
8319359a955SSascha WildnerThe
8329359a955SSascha Wildner.Fn bus_space_alloc
8339359a955SSascha Wildnerfunction allocates and maps a region of bus space with the size given by
8349359a955SSascha Wildner.Fa size ,
8359359a955SSascha Wildnercorresponding to the given constraints.
8369359a955SSascha WildnerIf successful, it returns
8379359a955SSascha Wildnerzero, fills in the bus address pointed to by
8389359a955SSascha Wildner.Fa addrp
8399359a955SSascha Wildnerwith the bus space address of the allocated region, and fills in
8409359a955SSascha Wildnerthe bus space handle pointed to by
8419359a955SSascha Wildner.Fa handlep
8429359a955SSascha Wildnerwith the handle that can be used to access that region.
8439359a955SSascha WildnerIf unsuccessful, it returns non-zero and leaves the bus address pointed to by
8449359a955SSascha Wildner.Fa addrp
8459359a955SSascha Wildnerand the bus space handle pointed to by
8469359a955SSascha Wildner.Fa handlep
8479359a955SSascha Wildnerin an undefined state.
8489359a955SSascha Wildner.Pp
8499359a955SSascha WildnerConstraints on the allocation are given by the
8509359a955SSascha Wildner.Fa reg_start , reg_end , alignment ,
8519359a955SSascha Wildnerand
8529359a955SSascha Wildner.Fa boundary
8539359a955SSascha Wildnerparameters.
8549359a955SSascha WildnerThe allocated region will start at or after
8559359a955SSascha Wildner.Fa reg_start
8569359a955SSascha Wildnerand end before or at
8579359a955SSascha Wildner.Fa reg_end .
8589359a955SSascha WildnerThe
8599359a955SSascha Wildner.Fa alignment
8609359a955SSascha Wildnerconstraint must be a power of two, and the allocated region will start at
8619359a955SSascha Wildneran address that is an even multiple of that power of two.
8629359a955SSascha WildnerThe
8639359a955SSascha Wildner.Fa boundary
8649359a955SSascha Wildnerconstraint, if non-zero, ensures that the region is allocated so that
8659359a955SSascha Wildner.Fa "first address in region"
8669359a955SSascha Wildner/
8679359a955SSascha Wildner.Fa boundary
8689359a955SSascha Wildnerhas the same value as
8699359a955SSascha Wildner.Fa "last address in region"
8709359a955SSascha Wildner/
8719359a955SSascha Wildner.Fa boundary .
8729359a955SSascha WildnerIf the constraints cannot be met,
8739359a955SSascha Wildner.Fn bus_space_alloc
8749359a955SSascha Wildnerwill fail.
8759359a955SSascha WildnerIt is an error to specify a set of
8769359a955SSascha Wildnerconstraints that can never be met
8779359a955SSascha Wildner(for example,
8789359a955SSascha Wildner.Fa size
8799359a955SSascha Wildnergreater than
8809359a955SSascha Wildner.Fa boundary ) .
8819359a955SSascha Wildner.Pp
8829359a955SSascha WildnerThe
8839359a955SSascha Wildner.Fa flags
8849359a955SSascha Wildnerparameter is the same as the like-named parameter to
8859359a955SSascha Wildner.Fn bus_space_map ,
8869359a955SSascha Wildnerthe same flag values should be used, and they have the
8879359a955SSascha Wildnersame meanings.
8889359a955SSascha Wildner.Pp
8899359a955SSascha WildnerHandles created by
8909359a955SSascha Wildner.Fn bus_space_alloc
8919359a955SSascha Wildnershould only be freed with
8929359a955SSascha Wildner.Fn bus_space_free .
8939359a955SSascha WildnerTrying to use
8949359a955SSascha Wildner.Fn bus_space_unmap
8959359a955SSascha Wildneron them causes undefined behaviour.
8969359a955SSascha WildnerThe
8979359a955SSascha Wildner.Fn bus_space_subregion
8989359a955SSascha Wildnerfunction can be used on
8999359a955SSascha Wildnerhandles created by
9009359a955SSascha Wildner.Fn bus_space_alloc .
9019359a955SSascha Wildner.Ss Fn bus_space_free space handle size
9029359a955SSascha WildnerThe
9039359a955SSascha Wildner.Fn bus_space_free
9049359a955SSascha Wildnerfunction unmaps and frees a region of bus space mapped
9059359a955SSascha Wildnerand allocated with
9069359a955SSascha Wildner.Fn bus_space_alloc .
9079359a955SSascha WildnerWhen unmapping a region, the
9089359a955SSascha Wildner.Fa size
9099359a955SSascha Wildnerspecified should be the same as the size given to
9109359a955SSascha Wildner.Fn bus_space_alloc
9119359a955SSascha Wildnerwhen allocating the region.
9129359a955SSascha Wildner.Pp
9139359a955SSascha WildnerAfter
9149359a955SSascha Wildner.Fn bus_space_free
9159359a955SSascha Wildneris called on a handle, that handle is no longer valid.
9169359a955SSascha Wildner(If copies were
9179359a955SSascha Wildnermade of the handle, they are no longer valid, either.)
9189359a955SSascha Wildner.Pp
9199359a955SSascha WildnerThis function will never fail.
9209359a955SSascha WildnerIf it would fail (e.g.\& because of an
9219359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
9229359a955SSascha Wildnerpanic.
9239359a955SSascha WildnerIn that case,
9249359a955SSascha Wildner.Fn bus_space_free
9259359a955SSascha Wildnerwill never return.
9269359a955SSascha Wildner.Sh READING AND WRITING SINGLE DATA ITEMS
9279359a955SSascha WildnerThe simplest way to access bus space is to read or write a single data
9289359a955SSascha Wildneritem.
9299359a955SSascha WildnerThe
9309359a955SSascha Wildner.Fn bus_space_read_N
9319359a955SSascha Wildnerand
9329359a955SSascha Wildner.Fn bus_space_write_N
9339359a955SSascha Wildnerfamilies of functions provide
9349359a955SSascha Wildnerthe ability to read and write 1, 2, and 4 byte data items on busses
9359359a955SSascha Wildnerwhich support those access sizes.
9369359a955SSascha Wildner.Ss Fn bus_space_read_1 space handle offset
9379359a955SSascha Wildner.Ss Fn bus_space_read_2 space handle offset
9389359a955SSascha Wildner.Ss Fn bus_space_read_4 space handle offset
9399359a955SSascha WildnerThe
9409359a955SSascha Wildner.Fn bus_space_read_N
9419359a955SSascha Wildnerfamily of functions reads a 1, 2, or 4 byte data item from
9429359a955SSascha Wildnerthe offset specified by
9439359a955SSascha Wildner.Fa offset
9449359a955SSascha Wildnerinto the region specified by
9459359a955SSascha Wildner.Fa handle
9469359a955SSascha Wildnerof the bus space specified by
9479359a955SSascha Wildner.Fa space .
9489359a955SSascha WildnerThe location being read must lie within the bus space region specified by
9499359a955SSascha Wildner.Fa handle .
9509359a955SSascha Wildner.Pp
9519359a955SSascha WildnerFor portability, the starting address of the region specified by
9529359a955SSascha Wildner.Fa handle
9539359a955SSascha Wildnerplus the offset should be a multiple of the size of data item being read.
9549359a955SSascha WildnerOn some systems, not obeying this requirement may cause incorrect data to
9559359a955SSascha Wildnerbe read, on others it may cause a system crash.
9569359a955SSascha Wildner.Pp
9579359a955SSascha WildnerRead operations done by the
9589359a955SSascha Wildner.Fn bus_space_read_N
9599359a955SSascha Wildnerfunctions may be executed out
9609359a955SSascha Wildnerof order with respect to other pending read and write operations unless
9619359a955SSascha Wildnerorder is enforced by use of the
9629359a955SSascha Wildner.Fn bus_space_barrier
9639359a955SSascha Wildnerfunction.
9649359a955SSascha Wildner.Pp
9659359a955SSascha WildnerThese functions will never fail.
9669359a955SSascha WildnerIf they would fail (e.g.\& because of an
9679359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
9689359a955SSascha Wildnerpanic.
9699359a955SSascha WildnerIn that case, they will never return.
9709359a955SSascha Wildner.Ss Fn bus_space_write_1 space handle offset value
9719359a955SSascha Wildner.Ss Fn bus_space_write_2 space handle offset value
9729359a955SSascha Wildner.Ss Fn bus_space_write_4 space handle offset value
9739359a955SSascha WildnerThe
9749359a955SSascha Wildner.Fn bus_space_write_N
9759359a955SSascha Wildnerfamily of functions writes a 1, 2, or 4 byte data item to the offset
9769359a955SSascha Wildnerspecified by
9779359a955SSascha Wildner.Fa offset
9789359a955SSascha Wildnerinto the region specified by
9799359a955SSascha Wildner.Fa handle
9809359a955SSascha Wildnerof the bus space specified by
9819359a955SSascha Wildner.Fa space .
9829359a955SSascha WildnerThe location being written must lie within
9839359a955SSascha Wildnerthe bus space region specified by
9849359a955SSascha Wildner.Fa handle .
9859359a955SSascha Wildner.Pp
9869359a955SSascha WildnerFor portability, the starting address of the region specified by
9879359a955SSascha Wildner.Fa handle
9889359a955SSascha Wildnerplus the offset should be a multiple of the size of data item being
9899359a955SSascha Wildnerwritten.
9909359a955SSascha WildnerOn some systems, not obeying this requirement may cause
9919359a955SSascha Wildnerincorrect data to be written, on others it may cause a system crash.
9929359a955SSascha Wildner.Pp
9939359a955SSascha WildnerWrite operations done by the
9949359a955SSascha Wildner.Fn bus_space_write_N
9959359a955SSascha Wildnerfunctions may be executed
9969359a955SSascha Wildnerout of order with respect to other pending read and write operations
9979359a955SSascha Wildnerunless order is enforced by use of the
9989359a955SSascha Wildner.Fn bus_space_barrier
9999359a955SSascha Wildnerfunction.
10009359a955SSascha Wildner.Pp
10019359a955SSascha WildnerThese functions will never fail.
10029359a955SSascha WildnerIf they would fail (e.g.\& because of an
10039359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
10049359a955SSascha Wildnerpanic.
10059359a955SSascha WildnerIn that case, they will never return.
10069359a955SSascha Wildner.Sh BARRIERS
10079359a955SSascha WildnerIn order to allow high-performance buffering implementations to avoid bus
10089359a955SSascha Wildneractivity on every operation, read and write ordering should be specified
10099359a955SSascha Wildnerexplicitly by drivers when necessary.
10109359a955SSascha WildnerThe
10119359a955SSascha Wildner.Fn bus_space_barrier
10129359a955SSascha Wildnerfunction provides that ability.
10139359a955SSascha Wildner.Ss Fn bus_space_barrier space handle offset length flags
10149359a955SSascha WildnerThe
10159359a955SSascha Wildner.Fn bus_space_barrier
10169359a955SSascha Wildnerfunction enforces ordering of bus space read and write operations
10179359a955SSascha Wildnerfor the specified subregion (described by the
10189359a955SSascha Wildner.Fa offset
10199359a955SSascha Wildnerand
10209359a955SSascha Wildner.Fa length
10219359a955SSascha Wildnerparameters) of the region named by
10229359a955SSascha Wildner.Fa handle
10239359a955SSascha Wildnerin the space named by
10249359a955SSascha Wildner.Fa space .
10259359a955SSascha Wildner.Pp
10269359a955SSascha WildnerThe
10279359a955SSascha Wildner.Fa flags
10289359a955SSascha Wildnerargument controls what types of operations are to be ordered.
10299359a955SSascha WildnerSupported flags are:
10309359a955SSascha Wildner.Bl -tag -width ".Dv BUS_SPACE_BARRIER_WRITE"
10319359a955SSascha Wildner.It Dv BUS_SPACE_BARRIER_READ
10329359a955SSascha WildnerSynchronize read operations.
10339359a955SSascha Wildner.It Dv BUS_SPACE_BARRIER_WRITE
10349359a955SSascha WildnerSynchronize write operations.
10359359a955SSascha Wildner.El
10369359a955SSascha Wildner.Pp
10379359a955SSascha WildnerThose flags can be combined (or-ed together) to enforce ordering on both
10389359a955SSascha Wildnerread and write operations.
10399359a955SSascha Wildner.Pp
10409359a955SSascha WildnerAll of the specified type(s) of operation which are done to the region
10419359a955SSascha Wildnerbefore the barrier operation are guaranteed to complete before any of the
10429359a955SSascha Wildnerspecified type(s) of operation done after the barrier.
10439359a955SSascha Wildner.Pp
10449359a955SSascha WildnerExample: Consider a hypothetical device with two single-byte ports, one
10459359a955SSascha Wildnerwrite-only input port (at offset 0) and a read-only output port (at
10469359a955SSascha Wildneroffset 1).
10479359a955SSascha WildnerOperation of the device is as follows: data bytes are written
10489359a955SSascha Wildnerto the input port, and are placed by the device on a stack, the top of
10499359a955SSascha Wildnerwhich is read by reading from the output port.
10509359a955SSascha WildnerThe sequence to correctly
10519359a955SSascha Wildnerwrite two data bytes to the device then read those two data bytes back
10529359a955SSascha Wildnerwould be:
10539359a955SSascha Wildner.Bd -literal
10549359a955SSascha Wildner/*
10559359a955SSascha Wildner * t and h are the tag and handle for the mapped device's
10569359a955SSascha Wildner * space.
10579359a955SSascha Wildner */
10589359a955SSascha Wildnerbus_space_write_1(t, h, 0, data0);
10599359a955SSascha Wildnerbus_space_barrier(t, h, 0, 1, BUS_SPACE_BARRIER_WRITE);  /* 1 */
10609359a955SSascha Wildnerbus_space_write_1(t, h, 0, data1);
10619359a955SSascha Wildnerbus_space_barrier(t, h, 0, 2,
10629359a955SSascha Wildner    BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE);     /* 2 */
10639359a955SSascha Wildnerndata1 = bus_space_read_1(t, h, 1);
10649359a955SSascha Wildnerbus_space_barrier(t, h, 1, 1, BUS_SPACE_BARRIER_READ);   /* 3 */
10659359a955SSascha Wildnerndata0 = bus_space_read_1(t, h, 1);
10669359a955SSascha Wildner/* data0 == ndata0, data1 == ndata1 */
10679359a955SSascha Wildner.Ed
10689359a955SSascha Wildner.Pp
10699359a955SSascha WildnerThe first barrier makes sure that the first write finishes before the
10709359a955SSascha Wildnersecond write is issued, so that two writes to the input port are done
10719359a955SSascha Wildnerin order and are not collapsed into a single write.
10729359a955SSascha WildnerThis ensures that
10739359a955SSascha Wildnerthe data bytes are written to the device correctly and in order.
10749359a955SSascha Wildner.Pp
10759359a955SSascha WildnerThe second barrier makes sure that the writes to the output port finish
10769359a955SSascha Wildnerbefore any of the reads to the input port are issued, thereby making sure
10779359a955SSascha Wildnerthat all of the writes are finished before data is read.
10789359a955SSascha WildnerThis ensures
10799359a955SSascha Wildnerthat the first byte read from the device really is the last one that was
10809359a955SSascha Wildnerwritten.
10819359a955SSascha Wildner.Pp
10829359a955SSascha WildnerThe third barrier makes sure that the first read finishes before the
10839359a955SSascha Wildnersecond read is issued, ensuring that data is read correctly and in order.
10849359a955SSascha Wildner.Pp
10859359a955SSascha WildnerThe barriers in the example above are specified to cover the absolute
10869359a955SSascha Wildnerminimum number of bus space locations.
10879359a955SSascha WildnerIt is correct (and often
10889359a955SSascha Wildnereasier) to make barrier operations cover the device's whole range of bus
10899359a955SSascha Wildnerspace, that is, to specify an offset of zero and the size of the
10909359a955SSascha Wildnerwhole region.
10919359a955SSascha Wildner.Sh REGION OPERATIONS
10929359a955SSascha WildnerSome devices use buffers which are mapped as regions in bus space.
10939359a955SSascha WildnerOften, drivers want to copy the contents of those buffers to or from
10949359a955SSascha Wildnermemory, e.g.\& into mbufs which can be passed to higher levels of the
10959359a955SSascha Wildnersystem or from mbufs to be output to a network.
10969359a955SSascha WildnerIn order to allow
10979359a955SSascha Wildnerdrivers to do this as efficiently as possible, the
10989359a955SSascha Wildner.Fn bus_space_read_region_N
10999359a955SSascha Wildnerand
11009359a955SSascha Wildner.Fn bus_space_write_region_N
11019359a955SSascha Wildnerfamilies of functions are provided.
11029359a955SSascha Wildner.Pp
11039359a955SSascha WildnerDrivers occasionally need to copy one region of a bus space to another,
11049359a955SSascha Wildneror to set all locations in a region of bus space to contain a single
11059359a955SSascha Wildnervalue.
11069359a955SSascha WildnerThe
11079359a955SSascha Wildner.Fn bus_space_copy_region_N
11089359a955SSascha Wildnerfamily of functions and the
11099359a955SSascha Wildner.Fn bus_space_set_region_N
11109359a955SSascha Wildnerfamily of functions allow drivers to perform these operations.
11119359a955SSascha Wildner.Ss Fn bus_space_read_region_1 space handle offset datap count
11129359a955SSascha Wildner.Ss Fn bus_space_read_region_2 space handle offset datap count
11139359a955SSascha Wildner.Ss Fn bus_space_read_region_4 space handle offset datap count
11149359a955SSascha WildnerThe
11159359a955SSascha Wildner.Fn bus_space_read_region_N
11169359a955SSascha Wildnerfamily of functions reads
11179359a955SSascha Wildner.Fa count
11189359a955SSascha Wildner1, 2, or 4 byte data items from bus space
11199359a955SSascha Wildnerstarting at byte offset
11209359a955SSascha Wildner.Fa offset
11219359a955SSascha Wildnerin the region specified by
11229359a955SSascha Wildner.Fa handle
11239359a955SSascha Wildnerof the bus space specified by
11249359a955SSascha Wildner.Fa space
11259359a955SSascha Wildnerand writes them into the array specified by
11269359a955SSascha Wildner.Fa datap .
11279359a955SSascha WildnerEach successive data item is read from an offset
11289359a955SSascha Wildner1, 2, or 4 bytes after the previous data item (depending on which
11299359a955SSascha Wildnerfunction is used).
11309359a955SSascha WildnerAll locations being read must lie within the bus
11319359a955SSascha Wildnerspace region specified by
11329359a955SSascha Wildner.Fa handle .
11339359a955SSascha Wildner.Pp
11349359a955SSascha WildnerFor portability, the starting address of the region specified by
11359359a955SSascha Wildner.Fa handle
11369359a955SSascha Wildnerplus the offset should be a multiple of the size of data items being
11379359a955SSascha Wildnerread and the data array pointer should be properly aligned.
11389359a955SSascha WildnerOn some
11399359a955SSascha Wildnersystems, not obeying these requirements may cause incorrect data to be
11409359a955SSascha Wildnerread, on others it may cause a system crash.
11419359a955SSascha Wildner.Pp
11429359a955SSascha WildnerRead operations done by the
11439359a955SSascha Wildner.Fn bus_space_read_region_N
11449359a955SSascha Wildnerfunctions may be executed in any order.
11459359a955SSascha WildnerThey may also be executed out
11469359a955SSascha Wildnerof order with respect to other pending read and write operations unless
11479359a955SSascha Wildnerorder is enforced by use of the
11489359a955SSascha Wildner.Fn bus_space_barrier
11499359a955SSascha Wildnerfunction.
11509359a955SSascha WildnerThere is no way to insert barriers between reads of
11519359a955SSascha Wildnerindividual bus space locations executed by the
11529359a955SSascha Wildner.Fn bus_space_read_region_N
11539359a955SSascha Wildnerfunctions.
11549359a955SSascha Wildner.Pp
11559359a955SSascha WildnerThese functions will never fail.
11569359a955SSascha WildnerIf they would fail (e.g.\& because of an
11579359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
11589359a955SSascha Wildnerpanic.
11599359a955SSascha WildnerIn that case, they will never return.
11609359a955SSascha Wildner.Ss Fn bus_space_write_region_1 space handle offset datap count
11619359a955SSascha Wildner.Ss Fn bus_space_write_region_2 space handle offset datap count
11629359a955SSascha Wildner.Ss Fn bus_space_write_region_4 space handle offset datap count
11639359a955SSascha WildnerThe
11649359a955SSascha Wildner.Fn bus_space_write_region_N
11659359a955SSascha Wildnerfamily of functions reads
11669359a955SSascha Wildner.Fa count
11679359a955SSascha Wildner1, 2, or 4 byte data items from the array
11689359a955SSascha Wildnerspecified by
11699359a955SSascha Wildner.Fa datap
11709359a955SSascha Wildnerand writes them to bus space starting at byte offset
11719359a955SSascha Wildner.Fa offset
11729359a955SSascha Wildnerin the region specified by
11739359a955SSascha Wildner.Fa handle
11749359a955SSascha Wildnerof the bus space specified
11759359a955SSascha Wildnerby
11769359a955SSascha Wildner.Fa space .
11779359a955SSascha WildnerEach successive data item is written to an offset 1, 2, or 4
11789359a955SSascha Wildnerbytes after the previous data item (depending on which function is
11799359a955SSascha Wildnerused).
11809359a955SSascha WildnerAll locations being written must lie within the bus space region
11819359a955SSascha Wildnerspecified by
11829359a955SSascha Wildner.Fa handle .
11839359a955SSascha Wildner.Pp
11849359a955SSascha WildnerFor portability, the starting address of the region specified by
11859359a955SSascha Wildner.Fa handle
11869359a955SSascha Wildnerplus the offset should be a multiple of the size of data items being
11879359a955SSascha Wildnerwritten and the data array pointer should be properly aligned.
11889359a955SSascha WildnerOn some
11899359a955SSascha Wildnersystems, not obeying these requirements may cause incorrect data to be
11909359a955SSascha Wildnerwritten, on others it may cause a system crash.
11919359a955SSascha Wildner.Pp
11929359a955SSascha WildnerWrite operations done by the
11939359a955SSascha Wildner.Fn bus_space_write_region_N
11949359a955SSascha Wildnerfunctions may be
11959359a955SSascha Wildnerexecuted in any order.
11969359a955SSascha WildnerThey may also be executed out of order with
11979359a955SSascha Wildnerrespect to other pending read and write operations unless order is
11989359a955SSascha Wildnerenforced by use of the
11999359a955SSascha Wildner.Fn bus_space_barrier
12009359a955SSascha Wildnerfunction.
12019359a955SSascha WildnerThere is no way to insert barriers between writes of
12029359a955SSascha Wildnerindividual bus space locations executed by the
12039359a955SSascha Wildner.Fn bus_space_write_region_N
12049359a955SSascha Wildnerfunctions.
12059359a955SSascha Wildner.Pp
12069359a955SSascha WildnerThese functions will never fail.
12079359a955SSascha WildnerIf they would fail (e.g.\& because of an
12089359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
12099359a955SSascha Wildnerpanic.
12109359a955SSascha WildnerIn that case, they will never return.
12119359a955SSascha Wildner.Ss Fn bus_space_copy_region_1 space srchandle srcoffset dsthandle \
12129359a955SSascha Wildnerdstoffset count
12139359a955SSascha Wildner.Ss Fn bus_space_copy_region_2 space srchandle srcoffset dsthandle \
12149359a955SSascha Wildnerdstoffset count
12159359a955SSascha Wildner.Ss Fn bus_space_copy_region_4 space srchandle srcoffset dsthandle \
12169359a955SSascha Wildnerdstoffset count
12179359a955SSascha WildnerThe
12189359a955SSascha Wildner.Fn bus_space_copy_region_N
12199359a955SSascha Wildnerfamily of functions copies
12209359a955SSascha Wildner.Fa count
12219359a955SSascha Wildner1, 2, or 4 byte data items in bus space
12229359a955SSascha Wildnerfrom the area starting at byte offset
12239359a955SSascha Wildner.Fa srcoffset
12249359a955SSascha Wildnerin the region specified by
12259359a955SSascha Wildner.Fa srchandle
12269359a955SSascha Wildnerof the bus space specified by
12279359a955SSascha Wildner.Fa space
12289359a955SSascha Wildnerto the area starting at byte offset
12299359a955SSascha Wildner.Fa dstoffset
12309359a955SSascha Wildnerin the region specified by
12319359a955SSascha Wildner.Fa dsthandle
12329359a955SSascha Wildnerin the same bus space.
12339359a955SSascha WildnerEach successive data item read or written has
12349359a955SSascha Wildneran offset 1, 2, or 4 bytes after the previous data item (depending
12359359a955SSascha Wildneron which function is used).
12369359a955SSascha WildnerAll locations being read and written must
12379359a955SSascha Wildnerlie within the bus space region specified by their respective handles.
12389359a955SSascha Wildner.Pp
12399359a955SSascha WildnerFor portability, the starting addresses of the regions specified by the
12409359a955SSascha Wildnereach handle plus its respective offset should be a multiple of the size
12419359a955SSascha Wildnerof data items being copied.
12429359a955SSascha WildnerOn some systems, not obeying this
12439359a955SSascha Wildnerrequirement may cause incorrect data to be copied, on others it may cause
12449359a955SSascha Wildnera system crash.
12459359a955SSascha Wildner.Pp
12469359a955SSascha WildnerRead and write operations done by the
12479359a955SSascha Wildner.Fn bus_space_copy_region_N
12489359a955SSascha Wildnerfunctions may be executed in any order.
12499359a955SSascha WildnerThey may also be executed out
12509359a955SSascha Wildnerof order with respect to other pending read and write operations unless
12519359a955SSascha Wildnerorder is enforced by use of the
1252ecb68db8SSascha Wildner.Fn bus_space_barrier
1253ecb68db8SSascha Wildnerfunction .
12549359a955SSascha WildnerThere is no way to insert barriers between reads or writes of
12559359a955SSascha Wildnerindividual bus space locations executed by the
12569359a955SSascha Wildner.Fn bus_space_copy_region_N
12579359a955SSascha Wildnerfunctions.
12589359a955SSascha Wildner.Pp
12599359a955SSascha WildnerOverlapping copies between different subregions of a single region
12609359a955SSascha Wildnerof bus space are handled correctly by the
12619359a955SSascha Wildner.Fn bus_space_copy_region_N
12629359a955SSascha Wildnerfunctions.
12639359a955SSascha Wildner.Pp
12649359a955SSascha WildnerThese functions will never fail.
12659359a955SSascha WildnerIf they would fail (e.g.\& because of an
12669359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
12679359a955SSascha Wildnerpanic.
12689359a955SSascha WildnerIn that case, they will never return.
12699359a955SSascha Wildner.Ss Fn bus_space_set_region_1 space handle offset value count
12709359a955SSascha Wildner.Ss Fn bus_space_set_region_2 space handle offset value count
12719359a955SSascha Wildner.Ss Fn bus_space_set_region_4 space handle offset value count
12729359a955SSascha WildnerThe
12739359a955SSascha Wildner.Fn bus_space_set_region_N
12749359a955SSascha Wildnerfamily of functions writes the given
12759359a955SSascha Wildner.Fa value
12769359a955SSascha Wildnerto
12779359a955SSascha Wildner.Fa count
12789359a955SSascha Wildner1, 2, or 4 byte
12799359a955SSascha Wildnerdata items in bus space starting at byte offset
12809359a955SSascha Wildner.Fa offset
12819359a955SSascha Wildnerin the region specified by
12829359a955SSascha Wildner.Fa handle
12839359a955SSascha Wildnerof the bus space specified by
12849359a955SSascha Wildner.Fa space .
12859359a955SSascha WildnerEach successive data item has an offset 1, 2, or 4 bytes after the
12869359a955SSascha Wildnerprevious data item (depending on which function is used).
12879359a955SSascha WildnerAll
12889359a955SSascha Wildnerlocations being written must lie within the bus space region specified
12899359a955SSascha Wildnerby
12909359a955SSascha Wildner.Fa handle .
12919359a955SSascha Wildner.Pp
12929359a955SSascha WildnerFor portability, the starting address of the region specified by
12939359a955SSascha Wildner.Fa handle
12949359a955SSascha Wildnerplus the offset should be a multiple of the size of data items being
12959359a955SSascha Wildnerwritten.
12969359a955SSascha WildnerOn some systems, not obeying this requirement may cause
12979359a955SSascha Wildnerincorrect data to be written, on others it may cause a system crash.
12989359a955SSascha Wildner.Pp
12999359a955SSascha WildnerWrite operations done by the
13009359a955SSascha Wildner.Fn bus_space_set_region_N
13019359a955SSascha Wildnerfunctions may be
13029359a955SSascha Wildnerexecuted in any order.
13039359a955SSascha WildnerThey may also be executed out of order with
13049359a955SSascha Wildnerrespect to other pending read and write operations unless order is
13059359a955SSascha Wildnerenforced by use of the
13069359a955SSascha Wildner.Fn bus_space_barrier
13079359a955SSascha Wildnerfunction.
13089359a955SSascha WildnerThere is no way to insert barriers between writes of
13099359a955SSascha Wildnerindividual bus space locations executed by the
13109359a955SSascha Wildner.Fn bus_space_set_region_N
13119359a955SSascha Wildnerfunctions.
13129359a955SSascha Wildner.Pp
13139359a955SSascha WildnerThese functions will never fail.
13149359a955SSascha WildnerIf they would fail (e.g.\& because of an
13159359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
13169359a955SSascha Wildnerpanic.
13179359a955SSascha WildnerIn that case, they will never return.
13189359a955SSascha Wildner.Sh READING AND WRITING A SINGLE LOCATION MULTIPLE TIMES
13199359a955SSascha WildnerSome devices implement single locations in bus space which are to be read
13209359a955SSascha Wildneror written multiple times to communicate data, e.g.\& some ethernet
13219359a955SSascha Wildnerdevices' packet buffer FIFOs.
13229359a955SSascha WildnerIn order to allow drivers to manipulate
13239359a955SSascha Wildnerthese types of devices as efficiently as possible, the
13249359a955SSascha Wildner.Fn bus_space_read_multi_N ,
13259359a955SSascha Wildner.Fn bus_space_set_multi_N ,
13269359a955SSascha Wildnerand
13279359a955SSascha Wildner.Fn bus_space_write_multi_N
13289359a955SSascha Wildnerfamilies of functions are provided.
13299359a955SSascha Wildner.Ss Fn bus_space_read_multi_1 space handle offset datap count
13309359a955SSascha Wildner.Ss Fn bus_space_read_multi_2 space handle offset datap count
13319359a955SSascha Wildner.Ss Fn bus_space_read_multi_4 space handle offset datap count
13329359a955SSascha WildnerThe
13339359a955SSascha Wildner.Fn bus_space_read_multi_N
13349359a955SSascha Wildnerfamily of functions reads
13359359a955SSascha Wildner.Fa count
13369359a955SSascha Wildner1, 2, or 4 byte data items from bus space
13379359a955SSascha Wildnerat byte offset
13389359a955SSascha Wildner.Fa offset
13399359a955SSascha Wildnerin the region specified by
13409359a955SSascha Wildner.Fa handle
13419359a955SSascha Wildnerof the bus space specified by
13429359a955SSascha Wildner.Fa space
13439359a955SSascha Wildnerand writes them into the array specified by
13449359a955SSascha Wildner.Fa datap .
13459359a955SSascha WildnerEach successive data item is read from the same location in bus
13469359a955SSascha Wildnerspace.
13479359a955SSascha WildnerThe location being read must lie within the bus space region
13489359a955SSascha Wildnerspecified by
13499359a955SSascha Wildner.Fa handle .
13509359a955SSascha Wildner.Pp
13519359a955SSascha WildnerFor portability, the starting address of the region specified by
13529359a955SSascha Wildner.Fa handle
13539359a955SSascha Wildnerplus the offset should be a multiple of the size of data items being
13549359a955SSascha Wildnerread and the data array pointer should be properly aligned.
13559359a955SSascha WildnerOn some
13569359a955SSascha Wildnersystems, not obeying these requirements may cause incorrect data to be
13579359a955SSascha Wildnerread, on others it may cause a system crash.
13589359a955SSascha Wildner.Pp
13599359a955SSascha WildnerRead operations done by the
13609359a955SSascha Wildner.Fn bus_space_read_multi_N
13619359a955SSascha Wildnerfunctions may be
13629359a955SSascha Wildnerexecuted out of order with respect to other pending read and write
13639359a955SSascha Wildneroperations unless order is enforced by use of the
13649359a955SSascha Wildner.Fn bus_space_barrier
13659359a955SSascha Wildnerfunction.
13669359a955SSascha WildnerBecause the
13679359a955SSascha Wildner.Fn bus_space_read_multi_N
13689359a955SSascha Wildnerfunctions read the same bus space location multiple times, they
13699359a955SSascha Wildnerplace an implicit read barrier between each successive read of that bus
13709359a955SSascha Wildnerspace location.
13719359a955SSascha Wildner.Pp
13729359a955SSascha WildnerThese functions will never fail.
13739359a955SSascha WildnerIf they would fail (e.g.\& because of an
13749359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
13759359a955SSascha Wildnerpanic.
13769359a955SSascha WildnerIn that case, they will never return.
13779359a955SSascha Wildner.Ss Fn bus_space_write_multi_1 space handle offset datap count
13789359a955SSascha Wildner.Ss Fn bus_space_write_multi_2 space handle offset datap count
13799359a955SSascha Wildner.Ss Fn bus_space_write_multi_4 space handle offset datap count
13809359a955SSascha WildnerThe
13819359a955SSascha Wildner.Fn bus_space_write_multi_N
13829359a955SSascha Wildnerfamily of functions reads
13839359a955SSascha Wildner.Fa count
13849359a955SSascha Wildner1, 2, or 4 byte data items from the array
13859359a955SSascha Wildnerspecified by
13869359a955SSascha Wildner.Fa datap
13879359a955SSascha Wildnerand writes them into bus space at byte offset
13889359a955SSascha Wildner.Fa offset
13899359a955SSascha Wildnerin the region specified by
13909359a955SSascha Wildner.Fa handle
13919359a955SSascha Wildnerof the bus space specified by
13929359a955SSascha Wildner.Fa space .
13939359a955SSascha WildnerEach successive data item is written to the same location in
13949359a955SSascha Wildnerbus space.
13959359a955SSascha WildnerThe location being written must lie within the bus space
13969359a955SSascha Wildnerregion specified by
13979359a955SSascha Wildner.Fa handle .
13989359a955SSascha Wildner.Pp
13999359a955SSascha WildnerFor portability, the starting address of the region specified by
14009359a955SSascha Wildner.Fa handle
14019359a955SSascha Wildnerplus the offset should be a multiple of the size of data items being
14029359a955SSascha Wildnerwritten and the data array pointer should be properly aligned.
14039359a955SSascha WildnerOn some
14049359a955SSascha Wildnersystems, not obeying these requirements may cause incorrect data to be
14059359a955SSascha Wildnerwritten, on others it may cause a system crash.
14069359a955SSascha Wildner.Pp
14079359a955SSascha WildnerWrite operations done by the
14089359a955SSascha Wildner.Fn bus_space_write_multi_N
14099359a955SSascha Wildnerfunctions may be executed out of order with respect to other pending
14109359a955SSascha Wildnerread and write operations unless order is enforced by use of the
14119359a955SSascha Wildner.Fn bus_space_barrier
14129359a955SSascha Wildnerfunction.
14139359a955SSascha WildnerBecause the
14149359a955SSascha Wildner.Fn bus_space_write_multi_N
14159359a955SSascha Wildnerfunctions write the same bus space location multiple times, they
14169359a955SSascha Wildnerplace an implicit write barrier between each successive write of that
14179359a955SSascha Wildnerbus space location.
14189359a955SSascha Wildner.Pp
14199359a955SSascha WildnerThese functions will never fail.
14209359a955SSascha WildnerIf they would fail (e.g.\& because of an
14219359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
14229359a955SSascha Wildnerpanic.
14239359a955SSascha WildnerIn that case, they will never return.
14249359a955SSascha Wildner.Ss Fn bus_space_set_multi_1 space handle offset value count
14259359a955SSascha Wildner.Ss Fn bus_space_set_multi_2 space handle offset value count
14269359a955SSascha Wildner.Ss Fn bus_space_set_multi_4 space handle offset value count
14279359a955SSascha WildnerThe
14289359a955SSascha Wildner.Fn bus_space_set_multi_N
14299359a955SSascha Wildnerwrites
14309359a955SSascha Wildner.Fa value
14319359a955SSascha Wildnerinto bus space at byte offset
14329359a955SSascha Wildner.Fa offset
14339359a955SSascha Wildnerin the region specified by
14349359a955SSascha Wildner.Fa handle
14359359a955SSascha Wildnerof the bus space specified by
14369359a955SSascha Wildner.Fa space ,
14379359a955SSascha Wildner.Fa count
14389359a955SSascha Wildnertimes.
14399359a955SSascha WildnerThe location being written must lie within the bus space
14409359a955SSascha Wildnerregion specified by
14419359a955SSascha Wildner.Fa handle .
14429359a955SSascha Wildner.Pp
14439359a955SSascha WildnerFor portability, the starting address of the region specified by
14449359a955SSascha Wildner.Fa handle
14459359a955SSascha Wildnerplus the offset should be a multiple of the size of data items being
14469359a955SSascha Wildnerwritten and the data array pointer should be properly aligned.
14479359a955SSascha WildnerOn some
14489359a955SSascha Wildnersystems, not obeying these requirements may cause incorrect data to be
14499359a955SSascha Wildnerwritten, on others it may cause a system crash.
14509359a955SSascha Wildner.Pp
14519359a955SSascha WildnerWrite operations done by the
14529359a955SSascha Wildner.Fn bus_space_set_multi_N
14539359a955SSascha Wildnerfunctions may be executed out of order with respect to other pending
14549359a955SSascha Wildnerread and write operations unless order is enforced by use of the
14559359a955SSascha Wildner.Fn bus_space_barrier
14569359a955SSascha Wildnerfunction.
14579359a955SSascha WildnerBecause the
14589359a955SSascha Wildner.Fn bus_space_set_multi_N
14599359a955SSascha Wildnerfunctions write the same bus space location multiple times, they
14609359a955SSascha Wildnerplace an implicit write barrier between each successive write of that
14619359a955SSascha Wildnerbus space location.
14629359a955SSascha Wildner.Pp
14639359a955SSascha WildnerThese functions will never fail.
14649359a955SSascha WildnerIf they would fail (e.g.\& because of an
14659359a955SSascha Wildnerargument error), that indicates a software bug which should cause a
14669359a955SSascha Wildnerpanic.
14679359a955SSascha WildnerIn that case, they will never return.
14689359a955SSascha Wildner.Sh STREAM FUNCTIONS
14699359a955SSascha WildnerMost of the
14709359a955SSascha Wildner.Nm
14719359a955SSascha Wildnerfunctions imply a host byte-order and a bus byte-order and take care of
14729359a955SSascha Wildnerany translation for the caller.
14739359a955SSascha WildnerIn some cases, however, hardware may map a FIFO or some other memory region
14749359a955SSascha Wildnerfor which the caller may want to use multi-word, yet untranslated access.
14759359a955SSascha WildnerAccess to these types of memory regions should be with the
14769359a955SSascha Wildner.Fn bus_space_*_stream_N
14779359a955SSascha Wildnerfunctions.
14789359a955SSascha Wildner.Pp
1479783d47c4SSascha Wildner.Bl -tag -compact -width ".Fn bus_space_write_region_stream_1"
14809359a955SSascha Wildner.It Fn bus_space_read_stream_1
14819359a955SSascha Wildner.It Fn bus_space_read_stream_2
14829359a955SSascha Wildner.It Fn bus_space_read_stream_4
14839359a955SSascha Wildner.It Fn bus_space_read_multi_stream_1
14849359a955SSascha Wildner.It Fn bus_space_read_multi_stream_2
14859359a955SSascha Wildner.It Fn bus_space_read_multi_stream_4
14869359a955SSascha Wildner.It Fn bus_space_read_region_stream_1
14879359a955SSascha Wildner.It Fn bus_space_read_region_stream_2
14889359a955SSascha Wildner.It Fn bus_space_read_region_stream_4
14899359a955SSascha Wildner.It Fn bus_space_write_stream_1
14909359a955SSascha Wildner.It Fn bus_space_write_stream_2
14919359a955SSascha Wildner.It Fn bus_space_write_stream_4
14929359a955SSascha Wildner.It Fn bus_space_write_multi_stream_1
14939359a955SSascha Wildner.It Fn bus_space_write_multi_stream_2
14949359a955SSascha Wildner.It Fn bus_space_write_multi_stream_4
14959359a955SSascha Wildner.It Fn bus_space_write_region_stream_1
14969359a955SSascha Wildner.It Fn bus_space_write_region_stream_2
14979359a955SSascha Wildner.It Fn bus_space_write_region_stream_4
14989359a955SSascha Wildner.It Fn bus_space_copy_region_stream_1
14999359a955SSascha Wildner.It Fn bus_space_copy_region_stream_2
15009359a955SSascha Wildner.It Fn bus_space_copy_region_stream_4
15019359a955SSascha Wildner.It Fn bus_space_set_multi_stream_1
15029359a955SSascha Wildner.It Fn bus_space_set_multi_stream_2
15039359a955SSascha Wildner.It Fn bus_space_set_multi_stream_4
15049359a955SSascha Wildner.It Fn bus_space_set_region_stream_1
15059359a955SSascha Wildner.It Fn bus_space_set_region_stream_2
15069359a955SSascha Wildner.It Fn bus_space_set_region_stream_4
15079359a955SSascha Wildner.El
15089359a955SSascha Wildner.Pp
15099359a955SSascha WildnerThese functions are defined just as their non-stream counterparts,
15109359a955SSascha Wildnerexcept that they provide no byte-order translation.
15119359a955SSascha Wildner.Sh COMPATIBILITY
15129359a955SSascha WildnerThe current
15139359a955SSascha Wildner.Nx
15149359a955SSascha Wildnerversion of the
15159359a955SSascha Wildner.Nm
15169359a955SSascha Wildnerinterface specification differs slightly from the original
15179359a955SSascha Wildnerspecification that came into wide use and
15189359a955SSascha Wildner.Fx
15199359a955SSascha Wildneradopted.
15209359a955SSascha WildnerA few of the function names and arguments have changed
15219359a955SSascha Wildnerfor consistency and increased functionality.
15229359a955SSascha Wildner.Sh SEE ALSO
15239359a955SSascha Wildner.Xr bus_dma 9
15249359a955SSascha Wildner.Sh HISTORY
15259359a955SSascha WildnerThe
15269359a955SSascha Wildner.Nm
15279359a955SSascha Wildnerfunctions were introduced in a different form (memory and I/O spaces
15289359a955SSascha Wildnerwere accessed via different sets of functions) in
15299359a955SSascha Wildner.Nx 1.2 .
15309359a955SSascha WildnerThe functions were merged to work on generic
15319359a955SSascha Wildner.Dq spaces
15329359a955SSascha Wildnerearly in the
15339359a955SSascha Wildner.Nx 1.3
15349359a955SSascha Wildnerdevelopment cycle, and many drivers were converted to use them.
15359359a955SSascha WildnerThis document was written later during the
15369359a955SSascha Wildner.Nx 1.3
15379359a955SSascha Wildnerdevelopment cycle, and the specification was updated to fix some
15389359a955SSascha Wildnerconsistency problems and to add some missing functionality.
15399359a955SSascha Wildner.Pp
15409359a955SSascha WildnerThe manual page was then adapted to the version of the interface that
15419359a955SSascha Wildner.Fx
15429359a955SSascha Wildnerimported for the CAM SCSI drivers, plus subsequent evolution.
15439359a955SSascha WildnerThe
15449359a955SSascha Wildner.Fx
15459359a955SSascha Wildner.Nm
15469359a955SSascha Wildnerversion was imported in
15479359a955SSascha Wildner.Fx 3.0 .
15489359a955SSascha Wildner.Sh AUTHORS
15499359a955SSascha Wildner.An -nosplit
15509359a955SSascha WildnerThe
15519359a955SSascha Wildner.Nm
15529359a955SSascha Wildnerinterfaces were designed and implemented by the
15539359a955SSascha Wildner.Nx
15549359a955SSascha Wildnerdeveloper
15559359a955SSascha Wildnercommunity.
15569359a955SSascha WildnerPrimary contributors and implementors were
15579359a955SSascha Wildner.An Chris Demetriou ,
15589359a955SSascha Wildner.An Jason Thorpe ,
15599359a955SSascha Wildnerand
15609359a955SSascha Wildner.An Charles Hannum ,
15619359a955SSascha Wildnerbut the rest of the
15629359a955SSascha Wildner.Nx
15639359a955SSascha Wildnerdevelopers and the user community played a significant role in development.
15649359a955SSascha Wildner.Pp
15659359a955SSascha Wildner.An Justin Gibbs
15669359a955SSascha Wildnerported these interfaces to
15679359a955SSascha Wildner.Fx .
15689359a955SSascha Wildner.Pp
15699359a955SSascha Wildner.An Chris Demetriou
15709359a955SSascha Wildnerwrote this manual page.
15719359a955SSascha Wildner.Pp
15729359a955SSascha Wildner.An Warner Losh
15739359a955SSascha Wildnermodified it for the
15749359a955SSascha Wildner.Fx
15759359a955SSascha Wildnerimplementation.
15769359a955SSascha Wildner.Sh BUGS
15779359a955SSascha WildnerThis manual may not completely and accurately document the interface,
15789359a955SSascha Wildnerand many parts of the interface are unspecified.
1579