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