be_bus.c revision 1.6
11.6Swiz/* $NetBSD: be_bus.c,v 1.6 2004/02/13 11:36:11 wiz Exp $ */ 21.1Sleo 31.1Sleo/*- 41.2Sleo * Copyright (c) 1998 The NetBSD Foundation, Inc. 51.1Sleo * All rights reserved. 61.1Sleo * 71.1Sleo * This code is derived from software contributed to The NetBSD Foundation 81.1Sleo * by Leo Weppelman. 91.1Sleo * 101.1Sleo * Redistribution and use in source and binary forms, with or without 111.1Sleo * modification, are permitted provided that the following conditions 121.1Sleo * are met: 131.1Sleo * 1. Redistributions of source code must retain the above copyright 141.1Sleo * notice, this list of conditions and the following disclaimer. 151.1Sleo * 2. Redistributions in binary form must reproduce the above copyright 161.1Sleo * notice, this list of conditions and the following disclaimer in the 171.1Sleo * documentation and/or other materials provided with the distribution. 181.1Sleo * 3. All advertising materials mentioning features or use of this software 191.1Sleo * must display the following acknowledgement: 201.1Sleo * This product includes software developed by the NetBSD 211.1Sleo * Foundation, Inc. and its contributors. 221.1Sleo * 4. Neither the name of The NetBSD Foundation nor the names of its 231.1Sleo * contributors may be used to endorse or promote products derived 241.1Sleo * from this software without specific prior written permission. 251.1Sleo * 261.1Sleo * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 271.1Sleo * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 281.1Sleo * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 291.1Sleo * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 301.1Sleo * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 311.1Sleo * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 321.1Sleo * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 331.1Sleo * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 341.1Sleo * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 351.1Sleo * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 361.1Sleo * POSSIBILITY OF SUCH DAMAGE. 371.1Sleo */ 381.5Slukem 391.5Slukem#include <sys/cdefs.h> 401.6Swiz__KERNEL_RCSID(0, "$NetBSD: be_bus.c,v 1.6 2004/02/13 11:36:11 wiz Exp $"); 411.5Slukem 421.1Sleo#include <sys/types.h> 431.1Sleo#include <sys/param.h> 441.1Sleo#include <sys/systm.h> 451.1Sleo#include <sys/malloc.h> 461.1Sleo#include <machine/cpu.h> 471.1Sleo#include <machine/bus.h> 481.1Sleo 491.1Sleo/* 501.1Sleo * This file contains the common functions for using a big endian (linear) 511.1Sleo * bus on a big endian atari. 521.1Sleo */ 531.1Sleo 541.1Sleo /* Autoconf detection stuff */ 551.1Sleostatic int beb_bus_space_peek_1 __P((bus_space_tag_t, 561.1Sleo bus_space_handle_t, bus_size_t)); 571.1Sleostatic int beb_bus_space_peek_2 __P((bus_space_tag_t, 581.1Sleo bus_space_handle_t, bus_size_t)); 591.1Sleostatic int beb_bus_space_peek_4 __P((bus_space_tag_t, 601.1Sleo bus_space_handle_t, bus_size_t)); 611.1Sleostatic int beb_bus_space_peek_8 __P((bus_space_tag_t, 621.1Sleo bus_space_handle_t, bus_size_t)); 631.1Sleo 641.1Sleo /* read (single) */ 651.1Sleostatic u_int8_t beb_bus_space_read_1 __P((bus_space_tag_t, 661.1Sleo bus_space_handle_t, bus_size_t)); 671.1Sleostatic u_int16_t beb_bus_space_read_2 __P((bus_space_tag_t, 681.1Sleo bus_space_handle_t, bus_size_t)); 691.1Sleostatic u_int32_t beb_bus_space_read_4 __P((bus_space_tag_t, 701.1Sleo bus_space_handle_t, bus_size_t)); 711.1Sleostatic u_int64_t beb_bus_space_read_8 __P((bus_space_tag_t, 721.1Sleo bus_space_handle_t, bus_size_t)); 731.1Sleo 741.1Sleo /* write (single) */ 751.1Sleostatic void beb_bus_space_write_1 __P((bus_space_tag_t, 761.1Sleo bus_space_handle_t, bus_size_t, u_int8_t)); 771.1Sleostatic void beb_bus_space_write_2 __P((bus_space_tag_t, 781.1Sleo bus_space_handle_t, bus_size_t, u_int16_t)); 791.1Sleostatic void beb_bus_space_write_4 __P((bus_space_tag_t, 801.1Sleo bus_space_handle_t, bus_size_t, u_int32_t)); 811.1Sleostatic void beb_bus_space_write_8 __P((bus_space_tag_t, 821.1Sleo bus_space_handle_t, bus_size_t, u_int64_t)); 831.1Sleo 841.1Sleo /* read multiple */ 851.1Sleostatic void beb_bus_space_read_multi_1 __P((bus_space_tag_t, 861.1Sleo bus_space_handle_t, bus_size_t, u_int8_t *, 871.1Sleo bus_size_t)); 881.1Sleostatic void beb_bus_space_read_multi_2 __P((bus_space_tag_t, 891.1Sleo bus_space_handle_t, bus_size_t, u_int16_t *, 901.1Sleo bus_size_t)); 911.1Sleostatic void beb_bus_space_read_multi_4 __P((bus_space_tag_t, 921.1Sleo bus_space_handle_t, bus_size_t, u_int32_t *, 931.1Sleo bus_size_t)); 941.1Sleostatic void beb_bus_space_read_multi_8 __P((bus_space_tag_t, 951.1Sleo bus_space_handle_t, bus_size_t, u_int64_t *, 961.1Sleo bus_size_t)); 971.1Sleo 981.1Sleo /* write multiple */ 991.1Sleostatic void beb_bus_space_write_multi_1 __P((bus_space_tag_t, 1001.1Sleo bus_space_handle_t, bus_size_t, 1011.1Sleo const u_int8_t *, bus_size_t)); 1021.1Sleostatic void beb_bus_space_write_multi_2 __P((bus_space_tag_t, 1031.1Sleo bus_space_handle_t, bus_size_t, 1041.1Sleo const u_int16_t *, bus_size_t)); 1051.1Sleostatic void beb_bus_space_write_multi_4 __P((bus_space_tag_t, 1061.1Sleo bus_space_handle_t, bus_size_t, 1071.1Sleo const u_int32_t *, bus_size_t)); 1081.1Sleostatic void beb_bus_space_write_multi_8 __P((bus_space_tag_t, 1091.1Sleo bus_space_handle_t, bus_size_t, 1101.1Sleo const u_int64_t *, bus_size_t)); 1111.1Sleo 1121.1Sleo /* read region */ 1131.1Sleostatic void beb_bus_space_read_region_1 __P((bus_space_tag_t, 1141.1Sleo bus_space_handle_t, bus_size_t, u_int8_t *, 1151.1Sleo bus_size_t)); 1161.1Sleostatic void beb_bus_space_read_region_2 __P((bus_space_tag_t, 1171.1Sleo bus_space_handle_t, bus_size_t, u_int16_t *, 1181.1Sleo bus_size_t)); 1191.1Sleostatic void beb_bus_space_read_region_4 __P((bus_space_tag_t, 1201.1Sleo bus_space_handle_t, bus_size_t, u_int32_t *, 1211.1Sleo bus_size_t)); 1221.1Sleostatic void beb_bus_space_read_region_8 __P((bus_space_tag_t, 1231.1Sleo bus_space_handle_t, bus_size_t, u_int64_t *, 1241.1Sleo bus_size_t)); 1251.1Sleo 1261.1Sleo /* read region */ 1271.1Sleostatic void beb_bus_space_write_region_1 __P((bus_space_tag_t, 1281.1Sleo bus_space_handle_t, bus_size_t, 1291.1Sleo const u_int8_t *, bus_size_t)); 1301.1Sleostatic void beb_bus_space_write_region_2 __P((bus_space_tag_t, 1311.1Sleo bus_space_handle_t, bus_size_t, 1321.1Sleo const u_int16_t *, bus_size_t)); 1331.1Sleostatic void beb_bus_space_write_region_4 __P((bus_space_tag_t, 1341.1Sleo bus_space_handle_t, bus_size_t, 1351.1Sleo const u_int32_t *, bus_size_t)); 1361.1Sleostatic void beb_bus_space_write_region_8 __P((bus_space_tag_t, 1371.1Sleo bus_space_handle_t, bus_size_t, 1381.1Sleo const u_int64_t *, bus_size_t)); 1391.1Sleo 1401.1Sleo /* set multi */ 1411.1Sleostatic void beb_bus_space_set_multi_1 __P((bus_space_tag_t, 1421.1Sleo bus_space_handle_t, bus_size_t, u_int8_t, 1431.1Sleo bus_size_t)); 1441.1Sleostatic void beb_bus_space_set_multi_2 __P((bus_space_tag_t, 1451.1Sleo bus_space_handle_t, bus_size_t, u_int16_t, 1461.1Sleo bus_size_t)); 1471.1Sleostatic void beb_bus_space_set_multi_4 __P((bus_space_tag_t, 1481.1Sleo bus_space_handle_t, bus_size_t, u_int32_t, 1491.1Sleo bus_size_t)); 1501.1Sleostatic void beb_bus_space_set_multi_8 __P((bus_space_tag_t, 1511.1Sleo bus_space_handle_t, bus_size_t, u_int64_t, 1521.1Sleo bus_size_t)); 1531.1Sleo 1541.1Sleo /* set region */ 1551.1Sleostatic void beb_bus_space_set_region_1 __P((bus_space_tag_t, 1561.1Sleo bus_space_handle_t, bus_size_t, u_int8_t, 1571.1Sleo bus_size_t)); 1581.1Sleostatic void beb_bus_space_set_region_2 __P((bus_space_tag_t, 1591.1Sleo bus_space_handle_t, bus_size_t, u_int16_t, 1601.1Sleo bus_size_t)); 1611.1Sleostatic void beb_bus_space_set_region_4 __P((bus_space_tag_t, 1621.1Sleo bus_space_handle_t, bus_size_t, u_int32_t, 1631.1Sleo bus_size_t)); 1641.1Sleostatic void beb_bus_space_set_region_8 __P((bus_space_tag_t, 1651.1Sleo bus_space_handle_t, bus_size_t, u_int64_t, 1661.1Sleo bus_size_t)); 1671.1Sleo 1681.1Sleo/* 1691.1Sleo * Don't force a function call overhead on these primitives... 1701.1Sleo */ 1711.1Sleo#define __read_1(h, o) *((u_int8_t *)((h) + (o))) 1721.1Sleo#define __read_2(h, o) *((u_int16_t *)((h) + (o))) 1731.1Sleo#define __read_4(h, o) *((u_int32_t *)((h) + (o))) 1741.1Sleo#define __read_8(h, o) *((u_int64_t *)((h) + (o))) 1751.1Sleo 1761.1Sleo#define __write_1(h, o, v) *((u_int8_t *)((h) + (o))) = (v) 1771.1Sleo#define __write_2(h, o, v) *((u_int16_t *)((h) + (o))) = (v) 1781.1Sleo#define __write_4(h, o, v) *((u_int32_t *)((h) + (o))) = (v) 1791.1Sleo#define __write_8(h, o, v) *((u_int64_t *)((h) + (o))) = (v) 1801.1Sleo 1811.1Sleobus_space_tag_t 1821.4Sleobeb_alloc_bus_space_tag(storage) 1831.4Sleobus_space_tag_t storage; 1841.1Sleo{ 1851.1Sleo bus_space_tag_t beb_t; 1861.1Sleo 1871.4Sleo /* 1881.4Sleo * Allow the caller to specify storage space for the tag. This 1891.4Sleo * is used during console config (when malloc() can't be used). 1901.4Sleo */ 1911.4Sleo if (storage != NULL) 1921.4Sleo beb_t = storage; 1931.4Sleo else { 1941.4Sleo if ((beb_t = malloc(sizeof(*beb_t), M_TEMP, M_NOWAIT)) == NULL) 1951.1Sleo return(NULL); 1961.4Sleo } 1971.1Sleo bzero(beb_t, sizeof(*beb_t)); 1981.1Sleo 1991.1Sleo beb_t->abs_p_1 = beb_bus_space_peek_1; 2001.1Sleo beb_t->abs_p_2 = beb_bus_space_peek_2; 2011.1Sleo beb_t->abs_p_4 = beb_bus_space_peek_4; 2021.1Sleo beb_t->abs_p_8 = beb_bus_space_peek_8; 2031.1Sleo beb_t->abs_r_1 = beb_bus_space_read_1; 2041.1Sleo beb_t->abs_r_2 = beb_bus_space_read_2; 2051.1Sleo beb_t->abs_r_4 = beb_bus_space_read_4; 2061.1Sleo beb_t->abs_r_8 = beb_bus_space_read_8; 2071.1Sleo beb_t->abs_rs_1 = beb_bus_space_read_1; 2081.1Sleo beb_t->abs_rs_2 = beb_bus_space_read_2; 2091.1Sleo beb_t->abs_rs_4 = beb_bus_space_read_4; 2101.1Sleo beb_t->abs_rs_8 = beb_bus_space_read_8; 2111.1Sleo beb_t->abs_rm_1 = beb_bus_space_read_multi_1; 2121.1Sleo beb_t->abs_rm_2 = beb_bus_space_read_multi_2; 2131.1Sleo beb_t->abs_rm_4 = beb_bus_space_read_multi_4; 2141.1Sleo beb_t->abs_rm_8 = beb_bus_space_read_multi_8; 2151.1Sleo beb_t->abs_rms_1 = beb_bus_space_read_multi_1; 2161.1Sleo beb_t->abs_rms_2 = beb_bus_space_read_multi_2; 2171.1Sleo beb_t->abs_rms_4 = beb_bus_space_read_multi_4; 2181.1Sleo beb_t->abs_rms_8 = beb_bus_space_read_multi_8; 2191.1Sleo beb_t->abs_rr_1 = beb_bus_space_read_region_1; 2201.1Sleo beb_t->abs_rr_2 = beb_bus_space_read_region_2; 2211.1Sleo beb_t->abs_rr_4 = beb_bus_space_read_region_4; 2221.1Sleo beb_t->abs_rr_8 = beb_bus_space_read_region_8; 2231.3Sleo beb_t->abs_rrs_1 = beb_bus_space_read_region_1; 2241.3Sleo beb_t->abs_rrs_2 = beb_bus_space_read_region_2; 2251.3Sleo beb_t->abs_rrs_4 = beb_bus_space_read_region_4; 2261.3Sleo beb_t->abs_rrs_8 = beb_bus_space_read_region_8; 2271.1Sleo beb_t->abs_w_1 = beb_bus_space_write_1; 2281.1Sleo beb_t->abs_w_2 = beb_bus_space_write_2; 2291.1Sleo beb_t->abs_w_4 = beb_bus_space_write_4; 2301.1Sleo beb_t->abs_w_8 = beb_bus_space_write_8; 2311.1Sleo beb_t->abs_ws_1 = beb_bus_space_write_1; 2321.1Sleo beb_t->abs_ws_2 = beb_bus_space_write_2; 2331.1Sleo beb_t->abs_ws_4 = beb_bus_space_write_4; 2341.1Sleo beb_t->abs_ws_8 = beb_bus_space_write_8; 2351.1Sleo beb_t->abs_wm_1 = beb_bus_space_write_multi_1; 2361.1Sleo beb_t->abs_wm_2 = beb_bus_space_write_multi_2; 2371.1Sleo beb_t->abs_wm_4 = beb_bus_space_write_multi_4; 2381.1Sleo beb_t->abs_wm_8 = beb_bus_space_write_multi_8; 2391.1Sleo beb_t->abs_wms_1 = beb_bus_space_write_multi_1; 2401.1Sleo beb_t->abs_wms_2 = beb_bus_space_write_multi_2; 2411.1Sleo beb_t->abs_wms_4 = beb_bus_space_write_multi_4; 2421.1Sleo beb_t->abs_wms_8 = beb_bus_space_write_multi_8; 2431.1Sleo beb_t->abs_wr_1 = beb_bus_space_write_region_1; 2441.1Sleo beb_t->abs_wr_2 = beb_bus_space_write_region_2; 2451.1Sleo beb_t->abs_wr_4 = beb_bus_space_write_region_4; 2461.1Sleo beb_t->abs_wr_8 = beb_bus_space_write_region_8; 2471.3Sleo beb_t->abs_wrs_1 = beb_bus_space_write_region_1; 2481.3Sleo beb_t->abs_wrs_2 = beb_bus_space_write_region_2; 2491.3Sleo beb_t->abs_wrs_4 = beb_bus_space_write_region_4; 2501.3Sleo beb_t->abs_wrs_8 = beb_bus_space_write_region_8; 2511.1Sleo beb_t->abs_sm_1 = beb_bus_space_set_multi_1; 2521.1Sleo beb_t->abs_sm_2 = beb_bus_space_set_multi_2; 2531.1Sleo beb_t->abs_sm_4 = beb_bus_space_set_multi_4; 2541.1Sleo beb_t->abs_sm_8 = beb_bus_space_set_multi_8; 2551.1Sleo beb_t->abs_sr_1 = beb_bus_space_set_region_1; 2561.1Sleo beb_t->abs_sr_2 = beb_bus_space_set_region_2; 2571.1Sleo beb_t->abs_sr_4 = beb_bus_space_set_region_4; 2581.1Sleo beb_t->abs_sr_8 = beb_bus_space_set_region_8; 2591.1Sleo 2601.1Sleo return(beb_t); 2611.1Sleo} 2621.1Sleo 2631.1Sleo 2641.1Sleo/* 2651.1Sleo * The various access functions 2661.1Sleo */ 2671.1Sleo 2681.1Sleo/* 2691.1Sleo * int bus_space_peek_N __P((bus_space_tag_t tag, 2701.1Sleo * bus_space_handle_t sh, bus_size_t offset)); 2711.1Sleo * 2721.1Sleo * Check if the address is suitable for reading N-byte quantities. 2731.1Sleo */ 2741.1Sleostatic int 2751.1Sleobeb_bus_space_peek_1(t, h, o) 2761.1Sleo bus_space_tag_t t; 2771.1Sleo bus_space_handle_t h; 2781.1Sleo bus_size_t o; 2791.1Sleo{ 2801.1Sleo return(!badbaddr((caddr_t)(h + o), 1)); 2811.1Sleo} 2821.1Sleo 2831.1Sleostatic int 2841.1Sleobeb_bus_space_peek_2(t, h, o) 2851.1Sleo bus_space_tag_t t; 2861.1Sleo bus_space_handle_t h; 2871.1Sleo bus_size_t o; 2881.1Sleo{ 2891.1Sleo return(!badbaddr((caddr_t)(h + o), 2)); 2901.1Sleo} 2911.1Sleo 2921.1Sleostatic int 2931.1Sleobeb_bus_space_peek_4(t, h, o) 2941.1Sleo bus_space_tag_t t; 2951.1Sleo bus_space_handle_t h; 2961.1Sleo bus_size_t o; 2971.1Sleo{ 2981.1Sleo return(!badbaddr((caddr_t)(h + o), 4)); 2991.1Sleo} 3001.1Sleo 3011.1Sleostatic int 3021.1Sleobeb_bus_space_peek_8(t, h, o) 3031.1Sleo bus_space_tag_t t; 3041.1Sleo bus_space_handle_t h; 3051.1Sleo bus_size_t o; 3061.1Sleo{ 3071.1Sleo return(!badbaddr((caddr_t)(h + o), 8)); 3081.1Sleo} 3091.1Sleo 3101.1Sleo/* 3111.1Sleo * u_intX_t bus_space_read_N __P((bus_space_tag_t tag, 3121.1Sleo * bus_space_handle_t bsh, bus_size_t offset)); 3131.1Sleo * 3141.1Sleo * Return an 1, 2, 4, or 8 byte value read from the bus_space described 3151.1Sleo * by tag/handle at `offset'. The value is converted to host-endian. 3161.1Sleo */ 3171.1Sleostatic u_int8_t 3181.1Sleobeb_bus_space_read_1(t, h, o) 3191.1Sleo bus_space_tag_t t; 3201.1Sleo bus_space_handle_t h; 3211.1Sleo bus_size_t o; 3221.1Sleo{ 3231.1Sleo return(__read_1(h, o)); 3241.1Sleo} 3251.1Sleo 3261.1Sleostatic u_int16_t 3271.1Sleobeb_bus_space_read_2(t, h, o) 3281.1Sleo bus_space_tag_t t; 3291.1Sleo bus_space_handle_t h; 3301.1Sleo bus_size_t o; 3311.1Sleo{ 3321.1Sleo return(__read_2(h, o)); 3331.1Sleo} 3341.1Sleo 3351.1Sleostatic u_int32_t 3361.1Sleobeb_bus_space_read_4(t, h, o) 3371.1Sleo bus_space_tag_t t; 3381.1Sleo bus_space_handle_t h; 3391.1Sleo bus_size_t o; 3401.1Sleo{ 3411.1Sleo return(__read_4(h, o)); 3421.1Sleo} 3431.1Sleo 3441.1Sleostatic u_int64_t 3451.1Sleobeb_bus_space_read_8(t, h, o) 3461.1Sleo bus_space_tag_t t; 3471.1Sleo bus_space_handle_t h; 3481.1Sleo bus_size_t o; 3491.1Sleo{ 3501.1Sleo return(__read_8(h, o)); 3511.1Sleo} 3521.1Sleo 3531.1Sleo/* 3541.1Sleo * u_intX_t bus_space_write_N __P((bus_space_tag_t tag, 3551.1Sleo * bus_space_handle_t bsh, bus_size_t offset, u_intX_t val)); 3561.1Sleo * 3571.1Sleo * Write an 1, 2, 4, or 8 byte value to the bus_space described by tag/handle 3581.1Sleo * at `offset'. The value `val' is converted from host to bus endianness 3591.1Sleo * before being written. 3601.1Sleo */ 3611.1Sleostatic void 3621.1Sleobeb_bus_space_write_1(t, h, o, v) 3631.1Sleo bus_space_tag_t t; 3641.1Sleo bus_space_handle_t h; 3651.1Sleo bus_size_t o; 3661.1Sleo u_int8_t v; 3671.1Sleo{ 3681.1Sleo __write_1(h, o, v); 3691.1Sleo} 3701.1Sleo 3711.1Sleostatic void 3721.1Sleobeb_bus_space_write_2(t, h, o, v) 3731.1Sleo bus_space_tag_t t; 3741.1Sleo bus_space_handle_t h; 3751.1Sleo bus_size_t o; 3761.1Sleo u_int16_t v; 3771.1Sleo{ 3781.1Sleo __write_2(h, o, v); 3791.1Sleo} 3801.1Sleo 3811.1Sleostatic void 3821.1Sleobeb_bus_space_write_4(t, h, o, v) 3831.1Sleo bus_space_tag_t t; 3841.1Sleo bus_space_handle_t h; 3851.1Sleo bus_size_t o; 3861.1Sleo u_int32_t v; 3871.1Sleo{ 3881.1Sleo __write_4(h, o, v); 3891.1Sleo} 3901.1Sleo 3911.1Sleostatic void 3921.1Sleobeb_bus_space_write_8(t, h, o, v) 3931.1Sleo bus_space_tag_t t; 3941.1Sleo bus_space_handle_t h; 3951.1Sleo bus_size_t o; 3961.1Sleo u_int64_t v; 3971.1Sleo{ 3981.1Sleo __write_8(h, o, v); 3991.1Sleo} 4001.1Sleo 4011.1Sleo/* 4021.1Sleo * void bus_space_read_multi_N __P((bus_space_tag_t tag, 4031.1Sleo * bus_space_handle_t bsh, bus_size_t offset, u_intX_t *address, 4041.1Sleo * bus_size_t count)); 4051.1Sleo * 4061.1Sleo * Read 'count' 1, 2, 4, or 8 byte values from the bus_space described by 4071.1Sleo * tag/handle at `offset' and store them in the address range starting at 4081.6Swiz * 'address'. The values are converted to CPU endian order before being 4091.1Sleo * being stored. 4101.1Sleo */ 4111.1Sleostatic void 4121.1Sleobeb_bus_space_read_multi_1(t, h, o, a, c) 4131.1Sleo bus_space_tag_t t; 4141.1Sleo bus_space_handle_t h; 4151.1Sleo bus_size_t o, c; 4161.1Sleo u_int8_t *a; 4171.1Sleo{ 4181.1Sleo for (; c; a++, c--) 4191.1Sleo *a = __read_1(h, o); 4201.1Sleo} 4211.1Sleostatic void 4221.1Sleobeb_bus_space_read_multi_2(t, h, o, a, c) 4231.1Sleo bus_space_tag_t t; 4241.1Sleo bus_space_handle_t h; 4251.1Sleo bus_size_t o, c; 4261.1Sleo u_int16_t *a; 4271.1Sleo{ 4281.1Sleo for (; c; a++, c--) 4291.1Sleo *a = __read_2(h, o); 4301.1Sleo} 4311.1Sleo 4321.1Sleostatic void 4331.1Sleobeb_bus_space_read_multi_4(t, h, o, a, c) 4341.1Sleo bus_space_tag_t t; 4351.1Sleo bus_space_handle_t h; 4361.1Sleo bus_size_t o, c; 4371.1Sleo u_int32_t *a; 4381.1Sleo{ 4391.1Sleo for (; c; a++, c--) 4401.1Sleo *a = __read_4(h, o); 4411.1Sleo} 4421.1Sleo 4431.1Sleostatic void 4441.1Sleobeb_bus_space_read_multi_8(t, h, o, a, c) 4451.1Sleo bus_space_tag_t t; 4461.1Sleo bus_space_handle_t h; 4471.1Sleo bus_size_t o, c; 4481.1Sleo u_int64_t *a; 4491.1Sleo{ 4501.1Sleo for (; c; a++, c--) 4511.1Sleo *a = __read_8(h, o); 4521.1Sleo} 4531.1Sleo 4541.1Sleo/* 4551.1Sleo * void bus_space_write_multi_N __P((bus_space_tag_t tag, 4561.1Sleo * bus_space_handle_t bsh, bus_size_t offset, 4571.1Sleo * const u_intX_t *address, bus_size_t count)); 4581.1Sleo * 4591.1Sleo * Write 'count' 1, 2, 4, or 8 byte values from the address range starting 4601.1Sleo * at 'address' to the bus_space described by tag/handle at `offset'. 4611.1Sleo * The values are converted to bus endian order before being written to 4621.1Sleo * the bus. 4631.1Sleo */ 4641.1Sleostatic void 4651.1Sleobeb_bus_space_write_multi_1(t, h, o, a, c) 4661.1Sleo bus_space_tag_t t; 4671.1Sleo bus_space_handle_t h; 4681.1Sleo bus_size_t o, c; 4691.1Sleo const u_int8_t *a; 4701.1Sleo{ 4711.1Sleo for (; c; a++, c--) 4721.1Sleo __write_1(h, o, *a); 4731.1Sleo} 4741.1Sleo 4751.1Sleostatic void 4761.1Sleobeb_bus_space_write_multi_2(t, h, o, a, c) 4771.1Sleo bus_space_tag_t t; 4781.1Sleo bus_space_handle_t h; 4791.1Sleo bus_size_t o, c; 4801.1Sleo const u_int16_t *a; 4811.1Sleo{ 4821.1Sleo for (; c; a++, c--) 4831.1Sleo __write_2(h, o, *a); 4841.1Sleo} 4851.1Sleo 4861.1Sleostatic void 4871.1Sleobeb_bus_space_write_multi_4(t, h, o, a, c) 4881.1Sleo bus_space_tag_t t; 4891.1Sleo bus_space_handle_t h; 4901.1Sleo bus_size_t o, c; 4911.1Sleo const u_int32_t *a; 4921.1Sleo{ 4931.1Sleo for (; c; a++, c--) 4941.1Sleo __write_4(h, o, *a); 4951.1Sleo} 4961.1Sleo 4971.1Sleostatic void 4981.1Sleobeb_bus_space_write_multi_8(t, h, o, a, c) 4991.1Sleo bus_space_tag_t t; 5001.1Sleo bus_space_handle_t h; 5011.1Sleo bus_size_t o, c; 5021.1Sleo const u_int64_t *a; 5031.1Sleo{ 5041.1Sleo for (; c; a++, c--) 5051.1Sleo __write_8(h, o, *a); 5061.1Sleo} 5071.1Sleo 5081.1Sleo/* 5091.1Sleo * void bus_space_read_region_N __P((bus_space_tag_t tag, 5101.1Sleo * bus_space_handle_t bsh, bus_size_t offset, 5111.1Sleo * u_intN_t *addr, bus_size_t count)); 5121.1Sleo * 5131.1Sleo * Read `count' 1, 2, 4, or 8 byte quantities from bus space 5141.1Sleo * described by tag/handle and starting at `offset' and copy into 5151.1Sleo * buffer provided. 5161.1Sleo */ 5171.1Sleostatic void 5181.1Sleobeb_bus_space_read_region_1(t, h, o, a, c) 5191.1Sleo bus_space_tag_t t; 5201.1Sleo bus_space_handle_t h; 5211.1Sleo bus_size_t o, c; 5221.1Sleo u_int8_t *a; 5231.1Sleo{ 5241.1Sleo for (; c; a++, o++, c--) 5251.1Sleo *a = __read_1(h, o); 5261.1Sleo} 5271.1Sleo 5281.1Sleostatic void 5291.1Sleobeb_bus_space_read_region_2(t, h, o, a, c) 5301.1Sleo bus_space_tag_t t; 5311.1Sleo bus_space_handle_t h; 5321.1Sleo bus_size_t o, c; 5331.1Sleo u_int16_t *a; 5341.1Sleo{ 5351.1Sleo for (; c; a++, o += 2, c--) 5361.1Sleo *a = __read_2(h, o); 5371.1Sleo} 5381.1Sleo 5391.1Sleostatic void 5401.1Sleobeb_bus_space_read_region_4(t, h, o, a, c) 5411.1Sleo bus_space_tag_t t; 5421.1Sleo bus_space_handle_t h; 5431.1Sleo bus_size_t o, c; 5441.1Sleo u_int32_t *a; 5451.1Sleo{ 5461.1Sleo for (; c; a++, o += 4, c--) 5471.1Sleo *a = __read_4(h, o); 5481.1Sleo} 5491.1Sleo 5501.1Sleostatic void 5511.1Sleobeb_bus_space_read_region_8(t, h, o, a, c) 5521.1Sleo bus_space_tag_t t; 5531.1Sleo bus_space_handle_t h; 5541.1Sleo bus_size_t o, c; 5551.1Sleo u_int64_t *a; 5561.1Sleo{ 5571.1Sleo for (; c; a++, o += 8, c--) 5581.1Sleo *a = __read_8(h, o); 5591.1Sleo} 5601.1Sleo 5611.1Sleo/* 5621.1Sleo * void bus_space_write_region_N __P((bus_space_tag_t tag, 5631.1Sleo * bus_space_handle_t bsh, bus_size_t offset, 5641.1Sleo * u_intN_t *addr, bus_size_t count)); 5651.1Sleo * 5661.1Sleo * Copy `count' 1, 2, 4, or 8 byte quantities from the buffer provided 5671.1Sleo * into the bus space described by tag/handle and starting at `offset'. 5681.1Sleo */ 5691.1Sleostatic void 5701.1Sleobeb_bus_space_write_region_1(t, h, o, a, c) 5711.1Sleo bus_space_tag_t t; 5721.1Sleo bus_space_handle_t h; 5731.1Sleo bus_size_t o, c; 5741.1Sleo const u_int8_t *a; 5751.1Sleo{ 5761.1Sleo for (; c; a++, o++, c--) 5771.1Sleo __write_1(h, o, *a); 5781.1Sleo} 5791.1Sleo 5801.1Sleostatic void 5811.1Sleobeb_bus_space_write_region_2(t, h, o, a, c) 5821.1Sleo bus_space_tag_t t; 5831.1Sleo bus_space_handle_t h; 5841.1Sleo bus_size_t o, c; 5851.1Sleo const u_int16_t *a; 5861.1Sleo{ 5871.1Sleo for (; c; a++, o += 2, c--) 5881.1Sleo __write_2(h, o, *a); 5891.1Sleo} 5901.1Sleo 5911.1Sleostatic void 5921.1Sleobeb_bus_space_write_region_4(t, h, o, a, c) 5931.1Sleo bus_space_tag_t t; 5941.1Sleo bus_space_handle_t h; 5951.1Sleo bus_size_t o, c; 5961.1Sleo const u_int32_t *a; 5971.1Sleo{ 5981.1Sleo for (; c; a++, o += 4, c--) 5991.1Sleo __write_4(h, o, *a); 6001.1Sleo} 6011.1Sleo 6021.1Sleostatic void 6031.1Sleobeb_bus_space_write_region_8(t, h, o, a, c) 6041.1Sleo bus_space_tag_t t; 6051.1Sleo bus_space_handle_t h; 6061.1Sleo bus_size_t o, c; 6071.1Sleo const u_int64_t *a; 6081.1Sleo{ 6091.1Sleo for (; c; a++, o += 8, c--) 6101.1Sleo __write_8(h, o, *a); 6111.1Sleo} 6121.1Sleo 6131.1Sleo/* 6141.1Sleo * void bus_space_set_multi_N __P((bus_space_tag_t tag, 6151.1Sleo * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, 6161.1Sleo * bus_size_t count)); 6171.1Sleo * 6181.1Sleo * Write the 1, 2, 4, or 8 byte value `val' to bus space described 6191.1Sleo * by tag/handle/offset `count' times. 6201.1Sleo */ 6211.1Sleo 6221.1Sleostatic void 6231.1Sleobeb_bus_space_set_multi_1(t, h, o, v, c) 6241.1Sleo bus_space_tag_t t; 6251.1Sleo bus_space_handle_t h; 6261.1Sleo bus_size_t o, c; 6271.1Sleo u_int8_t v; 6281.1Sleo{ 6291.1Sleo for (; c; c--) 6301.1Sleo __write_1(h, o, v); 6311.1Sleo} 6321.1Sleo 6331.1Sleostatic void 6341.1Sleobeb_bus_space_set_multi_2(t, h, o, v, c) 6351.1Sleo bus_space_tag_t t; 6361.1Sleo bus_space_handle_t h; 6371.1Sleo bus_size_t o, c; 6381.1Sleo u_int16_t v; 6391.1Sleo{ 6401.1Sleo for (; c; c--) 6411.1Sleo __write_2(h, o, v); 6421.1Sleo} 6431.1Sleo 6441.1Sleostatic void 6451.1Sleobeb_bus_space_set_multi_4(t, h, o, v, c) 6461.1Sleo bus_space_tag_t t; 6471.1Sleo bus_space_handle_t h; 6481.1Sleo bus_size_t o, c; 6491.1Sleo u_int32_t v; 6501.1Sleo{ 6511.1Sleo for (; c; c--) 6521.1Sleo __write_4(h, o, v); 6531.1Sleo} 6541.1Sleo 6551.1Sleostatic void 6561.1Sleobeb_bus_space_set_multi_8(t, h, o, v, c) 6571.1Sleo bus_space_tag_t t; 6581.1Sleo bus_space_handle_t h; 6591.1Sleo bus_size_t o, c; 6601.1Sleo u_int64_t v; 6611.1Sleo{ 6621.1Sleo for (; c; c--) 6631.1Sleo __write_8(h, o, v); 6641.1Sleo} 6651.1Sleo 6661.1Sleo/* 6671.1Sleo * void bus_space_set_region_N __P((bus_space_tag_t tag, 6681.1Sleo * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, 6691.1Sleo * bus_size_t count)); 6701.1Sleo * 6711.1Sleo * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described 6721.1Sleo * by tag/handle starting at `offset'. 6731.1Sleo */ 6741.1Sleostatic void 6751.1Sleobeb_bus_space_set_region_1(t, h, o, v, c) 6761.1Sleo bus_space_tag_t t; 6771.1Sleo bus_space_handle_t h; 6781.1Sleo bus_size_t o, c; 6791.1Sleo u_int8_t v; 6801.1Sleo{ 6811.1Sleo for (; c; o++, c--) 6821.1Sleo __write_1(h, o, v); 6831.1Sleo} 6841.1Sleo 6851.1Sleostatic void 6861.1Sleobeb_bus_space_set_region_2(t, h, o, v, c) 6871.1Sleo bus_space_tag_t t; 6881.1Sleo bus_space_handle_t h; 6891.1Sleo bus_size_t o, c; 6901.1Sleo u_int16_t v; 6911.1Sleo{ 6921.1Sleo for (; c; o += 2, c--) 6931.1Sleo __write_2(h, o, v); 6941.1Sleo} 6951.1Sleo 6961.1Sleostatic void 6971.1Sleobeb_bus_space_set_region_4(t, h, o, v, c) 6981.1Sleo bus_space_tag_t t; 6991.1Sleo bus_space_handle_t h; 7001.1Sleo bus_size_t o, c; 7011.1Sleo u_int32_t v; 7021.1Sleo{ 7031.1Sleo for (; c; o += 4, c--) 7041.1Sleo __write_4(h, o, v); 7051.1Sleo} 7061.1Sleo 7071.1Sleostatic void 7081.1Sleobeb_bus_space_set_region_8(t, h, o, v, c) 7091.1Sleo bus_space_tag_t t; 7101.1Sleo bus_space_handle_t h; 7111.1Sleo bus_size_t o, c; 7121.1Sleo u_int64_t v; 7131.1Sleo{ 7141.1Sleo for (; c; o += 8, c--) 7151.1Sleo __write_8(h, o, v); 7161.1Sleo} 717