Home | History | Annotate | Line # | Download | only in include
bus.h revision 1.23.6.1
      1  1.23.6.1    simonb /*	$NetBSD: bus.h,v 1.23.6.1 2006/04/22 11:37:40 simonb Exp $	*/
      2       1.7   thorpej 
      3       1.7   thorpej /*-
      4       1.9    scottr  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
      5       1.7   thorpej  * All rights reserved.
      6       1.7   thorpej  *
      7       1.7   thorpej  * This code is derived from software contributed to The NetBSD Foundation
      8       1.7   thorpej  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
      9       1.7   thorpej  * NASA Ames Research Center.
     10       1.7   thorpej  *
     11       1.7   thorpej  * Redistribution and use in source and binary forms, with or without
     12       1.7   thorpej  * modification, are permitted provided that the following conditions
     13       1.7   thorpej  * are met:
     14       1.7   thorpej  * 1. Redistributions of source code must retain the above copyright
     15       1.7   thorpej  *    notice, this list of conditions and the following disclaimer.
     16       1.7   thorpej  * 2. Redistributions in binary form must reproduce the above copyright
     17       1.7   thorpej  *    notice, this list of conditions and the following disclaimer in the
     18       1.7   thorpej  *    documentation and/or other materials provided with the distribution.
     19       1.7   thorpej  * 3. All advertising materials mentioning features or use of this software
     20       1.7   thorpej  *    must display the following acknowledgement:
     21       1.7   thorpej  *	This product includes software developed by the NetBSD
     22       1.7   thorpej  *	Foundation, Inc. and its contributors.
     23       1.7   thorpej  * 4. Neither the name of The NetBSD Foundation nor the names of its
     24       1.7   thorpej  *    contributors may be used to endorse or promote products derived
     25       1.7   thorpej  *    from this software without specific prior written permission.
     26       1.7   thorpej  *
     27       1.7   thorpej  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     28       1.7   thorpej  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     29       1.7   thorpej  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     30       1.7   thorpej  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     31       1.7   thorpej  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     32       1.7   thorpej  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     33       1.7   thorpej  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     34       1.7   thorpej  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     35       1.7   thorpej  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     36       1.7   thorpej  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     37       1.7   thorpej  * POSSIBILITY OF SUCH DAMAGE.
     38       1.7   thorpej  */
     39       1.1    scottr 
     40       1.1    scottr /*
     41       1.5    scottr  * Copyright (C) 1997 Scott Reynolds.  All rights reserved.
     42       1.1    scottr  *
     43       1.1    scottr  * Redistribution and use in source and binary forms, with or without
     44       1.1    scottr  * modification, are permitted provided that the following conditions
     45       1.1    scottr  * are met:
     46       1.1    scottr  * 1. Redistributions of source code must retain the above copyright
     47       1.1    scottr  *    notice, this list of conditions and the following disclaimer.
     48       1.1    scottr  * 2. Redistributions in binary form must reproduce the above copyright
     49       1.1    scottr  *    notice, this list of conditions and the following disclaimer in the
     50       1.1    scottr  *    documentation and/or other materials provided with the distribution.
     51       1.8    scottr  * 3. The name of the author may not be used to endorse or promote products
     52       1.1    scottr  *    derived from this software without specific prior written permission
     53       1.1    scottr  *
     54       1.1    scottr  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     55       1.1    scottr  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     56       1.1    scottr  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     57       1.1    scottr  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     58       1.1    scottr  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     59       1.1    scottr  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     60       1.1    scottr  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     61       1.1    scottr  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     62       1.1    scottr  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     63       1.1    scottr  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     64       1.1    scottr  */
     65       1.1    scottr 
     66       1.1    scottr #ifndef _MAC68K_BUS_H_
     67       1.1    scottr #define _MAC68K_BUS_H_
     68       1.1    scottr 
     69       1.1    scottr /*
     70       1.1    scottr  * Value for the mac68k bus space tag, not to be used directly by MI code.
     71       1.1    scottr  */
     72       1.1    scottr #define MAC68K_BUS_SPACE_MEM	0	/* space is mem space */
     73      1.18    briggs 
     74      1.18    briggs #define __BUS_SPACE_HAS_STREAM_METHODS 1
     75       1.1    scottr 
     76       1.1    scottr /*
     77       1.1    scottr  * Bus address and size types
     78       1.1    scottr  */
     79       1.1    scottr typedef u_long bus_addr_t;
     80       1.1    scottr typedef u_long bus_size_t;
     81       1.1    scottr 
     82       1.1    scottr /*
     83       1.1    scottr  * Access methods for bus resources and address space.
     84       1.1    scottr  */
     85      1.17    briggs #define BSH_T	struct bus_space_handle_s
     86       1.2    scottr typedef int	bus_space_tag_t;
     87      1.14    briggs typedef struct bus_space_handle_s {
     88      1.14    briggs 	u_long	base;
     89      1.14    briggs 	int	swapped;
     90      1.14    briggs 	int	stride;
     91      1.14    briggs 
     92      1.21       chs 	u_int8_t	(*bsr1)(bus_space_tag_t, BSH_T *, bus_size_t);
     93      1.21       chs 	u_int16_t	(*bsr2)(bus_space_tag_t, BSH_T *, bus_size_t);
     94      1.21       chs 	u_int32_t	(*bsr4)(bus_space_tag_t, BSH_T *, bus_size_t);
     95      1.21       chs 	u_int8_t	(*bsrs1)(bus_space_tag_t, BSH_T *, bus_size_t);
     96      1.21       chs 	u_int16_t	(*bsrs2)(bus_space_tag_t, BSH_T *, bus_size_t);
     97      1.21       chs 	u_int32_t	(*bsrs4)(bus_space_tag_t, BSH_T *, bus_size_t);
     98      1.21       chs 	void		(*bsrm1)(bus_space_tag_t, BSH_T *, bus_size_t,
     99      1.21       chs 				 u_int8_t *, size_t);
    100      1.21       chs 	void		(*bsrm2)(bus_space_tag_t, BSH_T *, bus_size_t,
    101      1.21       chs 				 u_int16_t *, size_t);
    102      1.21       chs 	void		(*bsrm4)(bus_space_tag_t, BSH_T *, bus_size_t,
    103      1.21       chs 				 u_int32_t *, size_t);
    104      1.21       chs 	void		(*bsrms1)(bus_space_tag_t, BSH_T *, bus_size_t,
    105      1.21       chs 				  u_int8_t *, size_t);
    106      1.21       chs 	void		(*bsrms2)(bus_space_tag_t, BSH_T *, bus_size_t,
    107      1.21       chs 				  u_int16_t *, size_t);
    108      1.21       chs 	void		(*bsrms4)(bus_space_tag_t, BSH_T *, bus_size_t,
    109      1.21       chs 				  u_int32_t *, size_t);
    110      1.21       chs 	void		(*bsrr1)(bus_space_tag_t, BSH_T *, bus_size_t,
    111      1.21       chs 				 u_int8_t *, size_t);
    112      1.21       chs 	void		(*bsrr2)(bus_space_tag_t, BSH_T *, bus_size_t,
    113      1.21       chs 				 u_int16_t *, size_t);
    114      1.21       chs 	void		(*bsrr4)(bus_space_tag_t, BSH_T *, bus_size_t,
    115      1.21       chs 				 u_int32_t *, size_t);
    116      1.21       chs 	void		(*bsrrs1)(bus_space_tag_t, BSH_T *, bus_size_t,
    117      1.21       chs 				  u_int8_t *, size_t);
    118      1.21       chs 	void		(*bsrrs2)(bus_space_tag_t, BSH_T *, bus_size_t,
    119      1.21       chs 				  u_int16_t *, size_t);
    120      1.21       chs 	void		(*bsrrs4)(bus_space_tag_t, BSH_T *, bus_size_t,
    121      1.21       chs 				  u_int32_t *, size_t);
    122      1.21       chs 	void		(*bsw1)(bus_space_tag_t, BSH_T *, bus_size_t, u_int8_t);
    123      1.21       chs 	void		(*bsw2)(bus_space_tag_t, BSH_T *, bus_size_t,
    124      1.21       chs 				u_int16_t);
    125      1.21       chs 	void		(*bsw4)(bus_space_tag_t, BSH_T *, bus_size_t,
    126      1.21       chs 				u_int32_t);
    127      1.21       chs 	void		(*bsws1)(bus_space_tag_t, BSH_T *, bus_size_t,
    128      1.21       chs 				 u_int8_t);
    129      1.21       chs 	void		(*bsws2)(bus_space_tag_t, BSH_T *, bus_size_t,
    130      1.21       chs 				 u_int16_t);
    131      1.21       chs 	void		(*bsws4)(bus_space_tag_t, BSH_T *, bus_size_t,
    132      1.21       chs 				 u_int32_t);
    133      1.21       chs 	void		(*bswm1)(bus_space_tag_t, BSH_T *, bus_size_t,
    134      1.21       chs 				 const u_int8_t *, size_t);
    135      1.21       chs 	void		(*bswm2)(bus_space_tag_t, BSH_T *, bus_size_t,
    136      1.21       chs 				 const u_int16_t *, size_t);
    137      1.21       chs 	void		(*bswm4)(bus_space_tag_t, BSH_T *, bus_size_t,
    138      1.21       chs 				 const u_int32_t *, size_t);
    139      1.21       chs 	void		(*bswms1)(bus_space_tag_t, BSH_T *, bus_size_t,
    140      1.21       chs 				  const u_int8_t *, size_t);
    141      1.21       chs 	void		(*bswms2)(bus_space_tag_t, BSH_T *, bus_size_t,
    142      1.21       chs 				  const u_int16_t *, size_t);
    143      1.21       chs 	void		(*bswms4)(bus_space_tag_t, BSH_T *, bus_size_t,
    144      1.21       chs 				  const u_int32_t *, size_t);
    145      1.21       chs 	void		(*bswr1)(bus_space_tag_t, BSH_T *, bus_size_t,
    146      1.21       chs 				 const u_int8_t *, size_t);
    147      1.21       chs 	void		(*bswr2)(bus_space_tag_t, BSH_T *, bus_size_t,
    148      1.21       chs 				 const u_int16_t *, size_t);
    149      1.21       chs 	void		(*bswr4)(bus_space_tag_t, BSH_T *, bus_size_t,
    150      1.21       chs 				 const u_int32_t *, size_t);
    151      1.21       chs 	void		(*bswrs1)(bus_space_tag_t, BSH_T *, bus_size_t,
    152      1.21       chs 				  const u_int8_t *, size_t);
    153      1.21       chs 	void		(*bswrs2)(bus_space_tag_t, BSH_T *, bus_size_t,
    154      1.21       chs 				  const u_int16_t *, size_t);
    155      1.21       chs 	void		(*bswrs4)(bus_space_tag_t, BSH_T *, bus_size_t,
    156      1.21       chs 				  const u_int32_t *, size_t);
    157      1.21       chs 	void		(*bssm1)(bus_space_tag_t, BSH_T *, bus_size_t,
    158      1.21       chs 				 u_int8_t v, size_t);
    159      1.21       chs 	void		(*bssm2)(bus_space_tag_t, BSH_T *, bus_size_t,
    160      1.21       chs 				 u_int16_t v, size_t);
    161      1.21       chs 	void		(*bssm4)(bus_space_tag_t, BSH_T *, bus_size_t,
    162      1.21       chs 				 u_int32_t v, size_t);
    163      1.21       chs 	void		(*bssr1)(bus_space_tag_t, BSH_T *, bus_size_t,
    164      1.21       chs 				 u_int8_t v, size_t);
    165      1.21       chs 	void		(*bssr2)(bus_space_tag_t, BSH_T *, bus_size_t,
    166      1.21       chs 				 u_int16_t v, size_t);
    167      1.21       chs 	void		(*bssr4)(bus_space_tag_t, BSH_T *, bus_size_t,
    168      1.21       chs 				 u_int32_t v, size_t);
    169      1.14    briggs } bus_space_handle_t;
    170      1.17    briggs #undef BSH_T
    171      1.14    briggs 
    172      1.21       chs void	mac68k_bus_space_handle_swapped(bus_space_tag_t,
    173      1.21       chs 		bus_space_handle_t *);
    174      1.21       chs void	mac68k_bus_space_handle_set_stride(bus_space_tag_t,
    175      1.21       chs 		bus_space_handle_t *, int);
    176       1.1    scottr 
    177       1.9    scottr /*
    178      1.21       chs  *	int bus_space_map(bus_space_tag_t t, bus_addr_t addr,
    179      1.21       chs  *	    bus_size_t size, int flags, bus_space_handle_t *bshp);
    180       1.9    scottr  *
    181       1.9    scottr  * Map a region of bus space.
    182       1.9    scottr  */
    183       1.9    scottr 
    184       1.9    scottr #define	BUS_SPACE_MAP_CACHEABLE		0x01
    185       1.9    scottr #define	BUS_SPACE_MAP_LINEAR		0x02
    186      1.13  drochner #define	BUS_SPACE_MAP_PREFETCHABLE	0x04
    187       1.9    scottr 
    188      1.21       chs int	bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t,
    189      1.21       chs 	    int, bus_space_handle_t *);
    190       1.9    scottr 
    191       1.9    scottr /*
    192      1.21       chs  *	void bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh,
    193      1.21       chs  *	    bus_size_t size);
    194       1.9    scottr  *
    195       1.9    scottr  * Unmap a region of bus space.
    196       1.9    scottr  */
    197       1.9    scottr 
    198      1.21       chs void	bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t);
    199       1.9    scottr 
    200       1.9    scottr /*
    201      1.21       chs  *	int bus_space_subregion(bus_space_tag_t t, bus_space_handle_t bsh,
    202      1.21       chs  *	    bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp);
    203       1.9    scottr  *
    204       1.9    scottr  * Get a new handle for a subregion of an already-mapped area of bus space.
    205       1.9    scottr  */
    206       1.9    scottr 
    207      1.21       chs int	bus_space_subregion(bus_space_tag_t, bus_space_handle_t,
    208      1.21       chs 	    bus_size_t, bus_size_t size, bus_space_handle_t *);
    209       1.3    scottr 
    210       1.9    scottr /*
    211      1.21       chs  *	int bus_space_alloc(bus_space_tag_t t, bus_addr_t, rstart,
    212       1.9    scottr  *	    bus_addr_t rend, bus_size_t size, bus_size_t align,
    213       1.9    scottr  *	    bus_size_t boundary, int flags, bus_addr_t *addrp,
    214      1.21       chs  *	    bus_space_handle_t *bshp);
    215       1.9    scottr  *
    216       1.9    scottr  * Allocate a region of bus space.
    217       1.9    scottr  */
    218       1.9    scottr 
    219      1.21       chs int	bus_space_alloc(bus_space_tag_t, bus_addr_t rstart,
    220       1.3    scottr 	    bus_addr_t rend, bus_size_t size, bus_size_t align,
    221       1.3    scottr 	    bus_size_t boundary, int cacheable, bus_addr_t *addrp,
    222      1.21       chs 	    bus_space_handle_t *bshp);
    223       1.9    scottr 
    224       1.9    scottr /*
    225      1.21       chs  *	int bus_space_free(bus_space_tag_t t, bus_space_handle_t bsh,
    226      1.21       chs  *	    bus_size_t size);
    227       1.9    scottr  *
    228       1.9    scottr  * Free a region of bus space.
    229       1.9    scottr  */
    230       1.9    scottr 
    231      1.21       chs void	bus_space_free(bus_space_tag_t, bus_space_handle_t bsh,
    232      1.21       chs 	    bus_size_t size);
    233       1.1    scottr 
    234       1.1    scottr /*
    235      1.21       chs  *	int mac68k_bus_space_probe(bus_space_tag_t t, bus_space_handle_t bsh,
    236      1.21       chs  *	    bus_size_t offset, int sz);
    237       1.9    scottr  *
    238       1.9    scottr  * Probe the bus at t/bsh/offset, using sz as the size of the load.
    239       1.9    scottr  *
    240       1.9    scottr  * This is a machine-dependent extension, and is not to be used by
    241       1.9    scottr  * machine-independent code.
    242       1.9    scottr  */
    243       1.9    scottr 
    244      1.21       chs int	mac68k_bus_space_probe(bus_space_tag_t,
    245      1.21       chs 	    bus_space_handle_t bsh, bus_size_t, int sz);
    246       1.9    scottr 
    247       1.9    scottr /*
    248      1.21       chs  *	u_intN_t bus_space_read_N(bus_space_tag_t tag,
    249      1.21       chs  *	    bus_space_handle_t bsh, bus_size_t offset);
    250       1.1    scottr  *
    251       1.1    scottr  * Read a 1, 2, 4, or 8 byte quantity from bus space
    252       1.1    scottr  * described by tag/handle/offset.
    253       1.1    scottr  */
    254       1.1    scottr 
    255      1.21       chs u_int8_t mac68k_bsr1(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    256      1.21       chs u_int8_t mac68k_bsr1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    257      1.21       chs u_int16_t mac68k_bsr2(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    258      1.21       chs u_int16_t mac68k_bsr2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    259      1.21       chs u_int16_t mac68k_bsr2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    260      1.21       chs u_int16_t mac68k_bsrs2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    261      1.21       chs u_int32_t mac68k_bsr4(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    262      1.21       chs u_int32_t mac68k_bsr4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    263      1.21       chs u_int32_t mac68k_bsr4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    264      1.21       chs u_int32_t mac68k_bsrs4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t);
    265      1.14    briggs 
    266      1.14    briggs #define	bus_space_read_1(t,h,o)	(h).bsr1((t), &(h), (o))
    267      1.14    briggs #define	bus_space_read_2(t,h,o)	(h).bsr2((t), &(h), (o))
    268      1.14    briggs #define	bus_space_read_4(t,h,o)	(h).bsr4((t), &(h), (o))
    269      1.17    briggs #define	bus_space_read_stream_1(t,h,o)	(h).bsrs1((t), &(h), (o))
    270      1.17    briggs #define	bus_space_read_stream_2(t,h,o)	(h).bsrs2((t), &(h), (o))
    271      1.17    briggs #define	bus_space_read_stream_4(t,h,o)	(h).bsrs4((t), &(h), (o))
    272       1.1    scottr 
    273       1.1    scottr #if 0	/* Cause a link error for bus_space_read_8 */
    274       1.1    scottr #define	bus_space_read_8(t, h, o)	!!! bus_space_read_8 unimplemented !!!
    275      1.17    briggs #define	bus_space_read_stream_8(t, h, o) \
    276      1.17    briggs 				!!! bus_space_read_stream_8 unimplemented !!!
    277       1.1    scottr #endif
    278       1.1    scottr 
    279       1.1    scottr /*
    280      1.21       chs  *	void bus_space_read_multi_N(bus_space_tag_t tag,
    281      1.21       chs  *	    bus_space_handle_t bsh, bus_size_t offset, u_intN_t *addr,
    282      1.21       chs  *	    size_t count);
    283       1.1    scottr  *
    284       1.1    scottr  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
    285       1.1    scottr  * described by tag/handle/offset and copy into buffer provided.
    286       1.1    scottr  */
    287       1.1    scottr 
    288      1.21       chs void mac68k_bsrm1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    289      1.21       chs 	u_int8_t *, size_t);
    290      1.21       chs void mac68k_bsrm1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    291      1.21       chs 	u_int8_t *, size_t);
    292      1.21       chs void mac68k_bsrm2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    293      1.21       chs 	u_int16_t *, size_t);
    294      1.21       chs void mac68k_bsrm2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    295      1.21       chs 	u_int16_t *, size_t);
    296      1.21       chs void mac68k_bsrm2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    297      1.21       chs 	u_int16_t *, size_t);
    298      1.21       chs void mac68k_bsrms2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    299      1.21       chs 	u_int16_t *, size_t);
    300      1.21       chs void mac68k_bsrm4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    301      1.21       chs 	u_int32_t *, size_t);
    302      1.21       chs void mac68k_bsrms4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    303      1.21       chs 	u_int32_t *, size_t);
    304      1.21       chs void mac68k_bsrm4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    305      1.21       chs 	u_int32_t *, size_t);
    306      1.21       chs void mac68k_bsrm4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    307      1.21       chs 	u_int32_t *, size_t);
    308      1.21       chs void mac68k_bsrms4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    309      1.21       chs 	u_int32_t *, size_t);
    310      1.14    briggs 
    311      1.16    briggs #if defined(DIAGNOSTIC)
    312      1.16    briggs #define	bus_space_read_multi_1(t, h, o, a, c) do {			 \
    313      1.16    briggs 	if (!c) panic("bus_space_read_multi_1 called with zero count."); \
    314      1.16    briggs 	(h).bsrm1(t,&(h),o,a,c); } while (0)
    315      1.16    briggs #define	bus_space_read_multi_2(t, h, o, a, c) do {			 \
    316      1.16    briggs 	if (!c) panic("bus_space_read_multi_2 called with zero count."); \
    317      1.16    briggs 	(h).bsrm2(t,&(h),o,a,c); } while (0)
    318      1.16    briggs #define	bus_space_read_multi_4(t, h, o, a, c) do {			 \
    319      1.16    briggs 	if (!c) panic("bus_space_read_multi_4 called with zero count."); \
    320      1.16    briggs 	(h).bsrm4(t,&(h),o,a,c); } while (0)
    321      1.17    briggs #define	bus_space_read_multi_stream_1(t, h, o, a, c) do {		 \
    322      1.17    briggs 	if (!c) panic("bus_space_read_multi_stream_1 called with count=0."); \
    323      1.17    briggs 	(h).bsrms1(t,&(h),o,a,c); } while (0)
    324      1.17    briggs #define	bus_space_read_multi_stream_2(t, h, o, a, c) do {		 \
    325      1.17    briggs 	if (!c) panic("bus_space_read_multi_stream_2 called with count=0."); \
    326      1.17    briggs 	(h).bsrms2(t,&(h),o,a,c); } while (0)
    327      1.17    briggs #define	bus_space_read_multi_stream_4(t, h, o, a, c) do {		 \
    328      1.17    briggs 	if (!c) panic("bus_space_read_multi_stream_4 called with count=0."); \
    329      1.17    briggs 	(h).bsrms4(t,&(h),o,a,c); } while (0)
    330      1.16    briggs #else
    331      1.15    briggs #define	bus_space_read_multi_1(t, h, o, a, c) \
    332      1.15    briggs 	do { if (c) (h).bsrm1(t, &(h), o, a, c); } while (0)
    333      1.15    briggs #define	bus_space_read_multi_2(t, h, o, a, c) \
    334      1.15    briggs 	do { if (c) (h).bsrm2(t, &(h), o, a, c); } while (0)
    335      1.15    briggs #define	bus_space_read_multi_4(t, h, o, a, c) \
    336      1.15    briggs 	do { if (c) (h).bsrm4(t, &(h), o, a, c); } while (0)
    337      1.17    briggs #define	bus_space_read_multi_stream_1(t, h, o, a, c) \
    338      1.17    briggs 	do { if (c) (h).bsrms1(t, &(h), o, a, c); } while (0)
    339      1.17    briggs #define	bus_space_read_multi_stream_2(t, h, o, a, c) \
    340      1.17    briggs 	do { if (c) (h).bsrms2(t, &(h), o, a, c); } while (0)
    341      1.17    briggs #define	bus_space_read_multi_stream_4(t, h, o, a, c) \
    342      1.17    briggs 	do { if (c) (h).bsrms4(t, &(h), o, a, c); } while (0)
    343      1.16    briggs #endif
    344       1.1    scottr 
    345       1.1    scottr #if 0	/* Cause a link error for bus_space_read_multi_8 */
    346       1.1    scottr #define	bus_space_read_multi_8	!!! bus_space_read_multi_8 unimplemented !!!
    347      1.17    briggs #define	bus_space_read_multi_stream_8	\
    348      1.17    briggs 			!!! bus_space_read_multi_stream_8 unimplemented !!!
    349       1.1    scottr #endif
    350       1.1    scottr 
    351       1.1    scottr /*
    352      1.21       chs  *	void bus_space_read_region_N(bus_space_tag_t tag,
    353       1.1    scottr  *	    bus_space_handle_t bsh, bus_size_t offset,
    354      1.21       chs  *	    u_intN_t *addr, size_t count);
    355       1.1    scottr  *
    356       1.1    scottr  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
    357       1.1    scottr  * described by tag/handle and starting at `offset' and copy into
    358       1.1    scottr  * buffer provided.
    359       1.1    scottr  */
    360       1.1    scottr 
    361      1.21       chs void mac68k_bsrr1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    362      1.21       chs 	u_int8_t *, size_t);
    363      1.21       chs void mac68k_bsrr1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    364      1.21       chs 	u_int8_t *, size_t);
    365      1.21       chs void mac68k_bsrr2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    366      1.21       chs 	u_int16_t *, size_t);
    367      1.21       chs void mac68k_bsrr2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    368      1.21       chs 	u_int16_t *, size_t);
    369      1.21       chs void mac68k_bsrr2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    370      1.21       chs 	u_int16_t *, size_t);
    371      1.21       chs void mac68k_bsrrs2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    372      1.21       chs 	u_int16_t *, size_t);
    373      1.21       chs void mac68k_bsrr4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    374      1.21       chs 	u_int32_t *, size_t);
    375      1.21       chs void mac68k_bsrr4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    376      1.21       chs 	u_int32_t *, size_t);
    377      1.21       chs void mac68k_bsrr4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    378      1.21       chs 	u_int32_t *, size_t);
    379      1.21       chs void mac68k_bsrrs4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    380      1.21       chs 	u_int32_t *, size_t);
    381      1.14    briggs 
    382      1.16    briggs #if defined(DIAGNOSTIC)
    383      1.16    briggs #define	bus_space_read_region_1(t, h, o, a, c) do {			  \
    384      1.16    briggs 	if (!c) panic("bus_space_read_region_1 called with zero count."); \
    385      1.16    briggs 	(h).bsrr1(t,&(h),o,a,c); } while (0)
    386      1.16    briggs #define	bus_space_read_region_2(t, h, o, a, c) do {			  \
    387      1.16    briggs 	if (!c) panic("bus_space_read_region_2 called with zero count."); \
    388      1.16    briggs 	(h).bsrr2(t,&(h),o,a,c); } while (0)
    389      1.16    briggs #define	bus_space_read_region_4(t, h, o, a, c) do {			  \
    390      1.16    briggs 	if (!c) panic("bus_space_read_region_4 called with zero count."); \
    391      1.16    briggs 	(h).bsrr4(t,&(h),o,a,c); } while (0)
    392      1.17    briggs #define	bus_space_read_region_stream_1(t, h, o, a, c) do {		  \
    393      1.17    briggs 	if (!c) panic("bus_space_read_region_stream_1 called with count=0."); \
    394      1.17    briggs 	(h).bsrrs1(t,&(h),o,a,c); } while (0)
    395      1.17    briggs #define	bus_space_read_region_stream_2(t, h, o, a, c) do {		  \
    396      1.17    briggs 	if (!c) panic("bus_space_read_region_stream_2 called with count=0."); \
    397      1.17    briggs 	(h).bsrrs2(t,&(h),o,a,c); } while (0)
    398      1.17    briggs #define	bus_space_read_region_stream_4(t, h, o, a, c) do {		  \
    399      1.17    briggs 	if (!c) panic("bus_space_read_region_stream_4 called with count=0."); \
    400      1.17    briggs 	(h).bsrrs4(t,&(h),o,a,c); } while (0)
    401      1.16    briggs #else
    402      1.15    briggs #define	bus_space_read_region_1(t, h, o, a, c) \
    403      1.15    briggs 	do { if (c) (h).bsrr1(t,&(h),o,a,c); } while (0)
    404      1.15    briggs #define	bus_space_read_region_2(t, h, o, a, c) \
    405      1.15    briggs 	do { if (c) (h).bsrr2(t,&(h),o,a,c); } while (0)
    406      1.15    briggs #define	bus_space_read_region_4(t, h, o, a, c) \
    407      1.15    briggs 	do { if (c) (h).bsrr4(t,&(h),o,a,c); } while (0)
    408      1.17    briggs #define	bus_space_read_region_stream_1(t, h, o, a, c) \
    409      1.17    briggs 	do { if (c) (h).bsrrs1(t,&(h),o,a,c); } while (0)
    410      1.17    briggs #define	bus_space_read_region_stream_2(t, h, o, a, c) \
    411      1.17    briggs 	do { if (c) (h).bsrrs2(t,&(h),o,a,c); } while (0)
    412      1.17    briggs #define	bus_space_read_region_stream_4(t, h, o, a, c) \
    413      1.17    briggs 	do { if (c) (h).bsrrs4(t,&(h),o,a,c); } while (0)
    414      1.16    briggs #endif
    415       1.1    scottr 
    416       1.1    scottr #if 0	/* Cause a link error for bus_space_read_region_8 */
    417       1.1    scottr #define	bus_space_read_region_8	!!! bus_space_read_region_8 unimplemented !!!
    418      1.17    briggs #define	bus_space_read_region_stream_8	\
    419      1.17    briggs 			!!! bus_space_read_region_stream_8 unimplemented !!!
    420       1.1    scottr #endif
    421       1.1    scottr 
    422       1.1    scottr /*
    423      1.21       chs  *	void bus_space_write_N(bus_space_tag_t tag,
    424      1.21       chs  *	    bus_space_handle_t bsh, bus_size_t offset, u_intN_t value);
    425       1.1    scottr  *
    426       1.1    scottr  * Write the 1, 2, 4, or 8 byte value `value' to bus space
    427       1.1    scottr  * described by tag/handle/offset.
    428       1.1    scottr  */
    429       1.1    scottr 
    430      1.21       chs void mac68k_bsw1(bus_space_tag_t, bus_space_handle_t *, bus_size_t, u_int8_t);
    431      1.21       chs void mac68k_bsw1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    432      1.21       chs 	u_int8_t);
    433      1.21       chs void mac68k_bsw2(bus_space_tag_t, bus_space_handle_t *, bus_size_t, u_int16_t);
    434      1.21       chs void mac68k_bsw2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    435      1.21       chs 	u_int16_t);
    436      1.21       chs void mac68k_bsw2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    437      1.21       chs 	u_int16_t);
    438      1.21       chs void mac68k_bsws2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    439      1.21       chs 	u_int16_t);
    440      1.21       chs void mac68k_bsw4(bus_space_tag_t, bus_space_handle_t *, bus_size_t, u_int32_t);
    441      1.21       chs void mac68k_bsw4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    442      1.21       chs 	u_int32_t);
    443      1.21       chs void mac68k_bsw4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    444      1.21       chs 	u_int32_t);
    445      1.21       chs void mac68k_bsws4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    446      1.21       chs 	u_int32_t);
    447      1.14    briggs 
    448      1.14    briggs #define	bus_space_write_1(t, h, o, v) (h).bsw1(t, &(h), o, v)
    449      1.14    briggs #define	bus_space_write_2(t, h, o, v) (h).bsw2(t, &(h), o, v)
    450      1.14    briggs #define	bus_space_write_4(t, h, o, v) (h).bsw4(t, &(h), o, v)
    451      1.17    briggs #define	bus_space_write_stream_1(t, h, o, v) (h).bsws1(t, &(h), o, v)
    452      1.17    briggs #define	bus_space_write_stream_2(t, h, o, v) (h).bsws2(t, &(h), o, v)
    453      1.17    briggs #define	bus_space_write_stream_4(t, h, o, v) (h).bsws4(t, &(h), o, v)
    454       1.1    scottr 
    455       1.1    scottr #if 0	/* Cause a link error for bus_space_write_8 */
    456       1.1    scottr #define	bus_space_write_8	!!! bus_space_write_8 not implemented !!!
    457      1.17    briggs #define	bus_space_write_stream_8 \
    458      1.17    briggs 			!!! bus_space_write_stream_8 not implemented !!!
    459       1.1    scottr #endif
    460       1.1    scottr 
    461       1.1    scottr /*
    462      1.21       chs  *	void bus_space_write_multi_N(bus_space_tag_t tag,
    463      1.21       chs  *	    bus_space_handle_t bsh, bus_size_t offset, const u_intN_t *addr,
    464      1.21       chs  *	    size_t count);
    465       1.1    scottr  *
    466       1.1    scottr  * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
    467       1.1    scottr  * provided to bus space described by tag/handle/offset.
    468       1.1    scottr  */
    469       1.1    scottr 
    470      1.21       chs void mac68k_bswm1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    471      1.21       chs 	const u_int8_t *, size_t);
    472      1.21       chs void mac68k_bswm1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    473      1.21       chs 	const u_int8_t *, size_t);
    474      1.21       chs void mac68k_bswm2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    475      1.21       chs 	const u_int16_t *, size_t);
    476      1.21       chs void mac68k_bswm2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    477      1.21       chs 	const u_int16_t *, size_t);
    478      1.21       chs void mac68k_bswm2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    479      1.21       chs 	const u_int16_t *, size_t);
    480      1.21       chs void mac68k_bswms2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    481      1.21       chs 	const u_int16_t *, size_t);
    482      1.21       chs void mac68k_bswm4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    483      1.21       chs 	const u_int32_t *, size_t);
    484      1.21       chs void mac68k_bswm4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    485      1.21       chs 	const u_int32_t *, size_t);
    486      1.21       chs void mac68k_bswm4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    487      1.21       chs 	const u_int32_t *, size_t);
    488      1.21       chs void mac68k_bswms4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    489      1.21       chs 	const u_int32_t *, size_t);
    490      1.14    briggs 
    491      1.16    briggs #if defined(DIAGNOSTIC)
    492      1.16    briggs #define	bus_space_write_multi_1(t, h, o, a, c) do {			  \
    493      1.16    briggs 	if (!c) panic("bus_space_write_multi_1 called with zero count."); \
    494      1.16    briggs 	(h).bswm1(t,&(h),o,a,c); } while (0)
    495      1.16    briggs #define	bus_space_write_multi_2(t, h, o, a, c) do {			  \
    496      1.16    briggs 	if (!c) panic("bus_space_write_multi_2 called with zero count."); \
    497      1.16    briggs 	(h).bswm2(t,&(h),o,a,c); } while (0)
    498      1.16    briggs #define	bus_space_write_multi_4(t, h, o, a, c) do {			  \
    499      1.16    briggs 	if (!c) panic("bus_space_write_multi_4 called with zero count."); \
    500      1.16    briggs 	(h).bswm4(t,&(h),o,a,c); } while (0)
    501      1.17    briggs #define	bus_space_write_multi_stream_1(t, h, o, a, c) do {		  \
    502      1.17    briggs 	if (!c) panic("bus_space_write_multi_stream_1 called with count=0."); \
    503      1.17    briggs 	(h).bswms1(t,&(h),o,a,c); } while (0)
    504      1.17    briggs #define	bus_space_write_multi_stream_2(t, h, o, a, c) do {		  \
    505      1.17    briggs 	if (!c) panic("bus_space_write_multi_stream_2 called with count=0."); \
    506      1.17    briggs 	(h).bswms2(t,&(h),o,a,c); } while (0)
    507      1.17    briggs #define	bus_space_write_multi_stream_4(t, h, o, a, c) do {		  \
    508      1.17    briggs 	if (!c) panic("bus_space_write_multi_stream_4 called with count=0."); \
    509      1.17    briggs 	(h).bswms4(t,&(h),o,a,c); } while (0)
    510      1.16    briggs #else
    511      1.15    briggs #define	bus_space_write_multi_1(t, h, o, a, c) \
    512      1.15    briggs 	do { if (c) (h).bswm1(t, &(h), o, a, c); } while (0)
    513      1.15    briggs #define	bus_space_write_multi_2(t, h, o, a, c) \
    514      1.15    briggs 	do { if (c) (h).bswm2(t, &(h), o, a, c); } while (0)
    515      1.15    briggs #define	bus_space_write_multi_4(t, h, o, a, c) \
    516      1.15    briggs 	do { if (c) (h).bswm4(t, &(h), o, a, c); } while (0)
    517      1.17    briggs #define	bus_space_write_multi_stream_1(t, h, o, a, c) \
    518      1.17    briggs 	do { if (c) (h).bswms1(t, &(h), o, a, c); } while (0)
    519      1.17    briggs #define	bus_space_write_multi_stream_2(t, h, o, a, c) \
    520      1.17    briggs 	do { if (c) (h).bswms2(t, &(h), o, a, c); } while (0)
    521      1.17    briggs #define	bus_space_write_multi_stream_4(t, h, o, a, c) \
    522      1.17    briggs 	do { if (c) (h).bswms4(t, &(h), o, a, c); } while (0)
    523      1.16    briggs #endif
    524       1.1    scottr 
    525       1.1    scottr #if 0	/* Cause a link error for bus_space_write_8 */
    526       1.1    scottr #define	bus_space_write_multi_8(t, h, o, a, c)				\
    527       1.1    scottr 			!!! bus_space_write_multi_8 unimplimented !!!
    528      1.17    briggs #define	bus_space_write_multi_stream_8(t, h, o, a, c)			\
    529      1.17    briggs 			!!! bus_space_write_multi_stream_8 unimplimented !!!
    530       1.1    scottr #endif
    531       1.1    scottr 
    532       1.1    scottr /*
    533      1.21       chs  *	void bus_space_write_region_N(bus_space_tag_t tag,
    534      1.21       chs  *	    bus_space_handle_t bsh, bus_size_t offset, const u_intN_t *addr,
    535      1.21       chs  *	    size_t count);
    536       1.1    scottr  *
    537       1.1    scottr  * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided
    538       1.1    scottr  * to bus space described by tag/handle starting at `offset'.
    539       1.1    scottr  */
    540       1.1    scottr 
    541      1.21       chs void mac68k_bswr1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    542      1.21       chs 	const u_int8_t *, size_t);
    543      1.21       chs void mac68k_bswr1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    544      1.21       chs 	const u_int8_t *, size_t);
    545      1.21       chs void mac68k_bswr2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    546      1.21       chs 	const u_int16_t *, size_t);
    547      1.21       chs void mac68k_bswr2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    548      1.21       chs 	const u_int16_t *, size_t);
    549      1.21       chs void mac68k_bswr2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    550      1.21       chs 	const u_int16_t *, size_t);
    551      1.21       chs void mac68k_bswrs2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    552      1.21       chs 	const u_int16_t *, size_t);
    553      1.21       chs void mac68k_bswr4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    554      1.21       chs 	const u_int32_t *, size_t);
    555      1.21       chs void mac68k_bswr4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    556      1.21       chs 	const u_int32_t *, size_t);
    557      1.21       chs void mac68k_bswr4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    558      1.21       chs 	const u_int32_t *, size_t);
    559      1.21       chs void mac68k_bswrs4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    560      1.21       chs 	const u_int32_t *, size_t);
    561      1.14    briggs 
    562      1.16    briggs #if defined(DIAGNOSTIC)
    563      1.16    briggs #define	bus_space_write_region_1(t, h, o, a, c) do {			   \
    564      1.16    briggs 	if (!c) panic("bus_space_write_region_1 called with zero count."); \
    565      1.16    briggs 	(h).bswr1(t,&(h),o,a,c); } while (0)
    566      1.16    briggs #define	bus_space_write_region_2(t, h, o, a, c) do {			   \
    567      1.16    briggs 	if (!c) panic("bus_space_write_region_2 called with zero count."); \
    568      1.16    briggs 	(h).bswr2(t,&(h),o,a,c); } while (0)
    569      1.16    briggs #define	bus_space_write_region_4(t, h, o, a, c) do {			   \
    570      1.16    briggs 	if (!c) panic("bus_space_write_region_4 called with zero count."); \
    571      1.16    briggs 	(h).bswr4(t,&(h),o,a,c); } while (0)
    572      1.17    briggs #define	bus_space_write_region_stream_1(t, h, o, a, c) do {		   \
    573      1.17    briggs 	if (!c) panic("bus_space_write_region_stream_1 called with count=0."); \
    574      1.17    briggs 	(h).bswrs1(t,&(h),o,a,c); } while (0)
    575      1.17    briggs #define	bus_space_write_region_stream_2(t, h, o, a, c) do {		   \
    576      1.17    briggs 	if (!c) panic("bus_space_write_region_stream_2 called with count=0."); \
    577      1.17    briggs 	(h).bswrs2(t,&(h),o,a,c); } while (0)
    578      1.17    briggs #define	bus_space_write_region_stream_4(t, h, o, a, c) do {		   \
    579      1.17    briggs 	if (!c) panic("bus_space_write_region_stream_4 called with count=0."); \
    580      1.17    briggs 	(h).bswrs4(t,&(h),o,a,c); } while (0)
    581      1.16    briggs #else
    582      1.15    briggs #define	bus_space_write_region_1(t, h, o, a, c) \
    583      1.15    briggs 	do { if (c) (h).bswr1(t,&(h),o,a,c); } while (0)
    584      1.15    briggs #define	bus_space_write_region_2(t, h, o, a, c) \
    585      1.15    briggs 	do { if (c) (h).bswr2(t,&(h),o,a,c); } while (0)
    586      1.15    briggs #define	bus_space_write_region_4(t, h, o, a, c) \
    587      1.15    briggs 	do { if (c) (h).bswr4(t,&(h),o,a,c); } while (0)
    588      1.17    briggs #define	bus_space_write_region_stream_1(t, h, o, a, c) \
    589      1.17    briggs 	do { if (c) (h).bswrs1(t,&(h),o,a,c); } while (0)
    590      1.17    briggs #define	bus_space_write_region_stream_2(t, h, o, a, c) \
    591      1.17    briggs 	do { if (c) (h).bswrs2(t,&(h),o,a,c); } while (0)
    592      1.17    briggs #define	bus_space_write_region_stream_4(t, h, o, a, c) \
    593      1.17    briggs 	do { if (c) (h).bswrs4(t,&(h),o,a,c); } while (0)
    594      1.16    briggs #endif
    595       1.1    scottr 
    596       1.1    scottr #if 0	/* Cause a link error for bus_space_write_region_8 */
    597       1.1    scottr #define	bus_space_write_region_8					\
    598       1.1    scottr 			!!! bus_space_write_region_8 unimplemented !!!
    599      1.17    briggs #define	bus_space_write_region_stream_8				\
    600      1.17    briggs 			!!! bus_space_write_region_stream_8 unimplemented !!!
    601       1.1    scottr #endif
    602       1.1    scottr 
    603       1.1    scottr /*
    604      1.21       chs  *	void bus_space_set_multi_N(bus_space_tag_t tag,
    605       1.1    scottr  *	    bus_space_handle_t bsh, bus_size_t offset, u_intN_t val,
    606      1.21       chs  *	    size_t count);
    607       1.1    scottr  *
    608       1.1    scottr  * Write the 1, 2, 4, or 8 byte value `val' to bus space described
    609       1.1    scottr  * by tag/handle/offset `count' times.
    610       1.1    scottr  */
    611       1.1    scottr 
    612      1.21       chs void mac68k_bssm1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    613      1.21       chs 	u_int8_t, size_t);
    614      1.21       chs void mac68k_bssm1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    615      1.21       chs 	u_int8_t, size_t);
    616      1.21       chs void mac68k_bssm2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    617      1.21       chs 	u_int16_t, size_t);
    618      1.21       chs void mac68k_bssm2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    619      1.21       chs 	u_int16_t, size_t);
    620      1.21       chs void mac68k_bssm2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    621      1.21       chs 	u_int16_t, size_t);
    622      1.21       chs void mac68k_bssm4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    623      1.21       chs 	u_int32_t, size_t);
    624      1.21       chs void mac68k_bssm4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    625      1.21       chs 	u_int32_t, size_t);
    626      1.21       chs void mac68k_bssm4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    627      1.21       chs 	u_int32_t, size_t);
    628      1.14    briggs 
    629      1.16    briggs #if defined(DIAGNOSTIC)
    630      1.16    briggs #define	bus_space_set_multi_1(t, h, o, val, c) do {			\
    631      1.16    briggs 	if (!c) panic("bus_space_set_multi_1 called with zero count."); \
    632      1.16    briggs 	(h).bssm1(t,&(h),o,val,c); } while (0)
    633      1.16    briggs #define	bus_space_set_multi_2(t, h, o, val, c) do {			\
    634      1.16    briggs 	if (!c) panic("bus_space_set_multi_2 called with zero count."); \
    635      1.16    briggs 	(h).bssm2(t,&(h),o,val,c); } while (0)
    636      1.16    briggs #define	bus_space_set_multi_4(t, h, o, val, c) do {			\
    637      1.16    briggs 	if (!c) panic("bus_space_set_multi_4 called with zero count."); \
    638      1.16    briggs 	(h).bssm4(t,&(h),o,val,c); } while (0)
    639      1.16    briggs #else
    640      1.15    briggs #define	bus_space_set_multi_1(t, h, o, val, c) \
    641      1.15    briggs 	do { if (c) (h).bssm1(t,&(h),o,val,c); } while (0)
    642      1.15    briggs #define	bus_space_set_multi_2(t, h, o, val, c) \
    643      1.15    briggs 	do { if (c) (h).bssm2(t,&(h),o,val,c); } while (0)
    644      1.15    briggs #define	bus_space_set_multi_4(t, h, o, val, c) \
    645      1.15    briggs 	do { if (c) (h).bssm4(t,&(h),o,val,c); } while (0)
    646      1.16    briggs #endif
    647       1.4    scottr 
    648       1.4    scottr #if 0	/* Cause a link error for bus_space_set_multi_8 */
    649       1.4    scottr #define	bus_space_set_multi_8						\
    650       1.4    scottr 			!!! bus_space_set_multi_8 unimplemented !!!
    651       1.4    scottr #endif
    652       1.1    scottr 
    653       1.1    scottr /*
    654      1.21       chs  *	void bus_space_set_region_N(bus_space_tag_t tag,
    655      1.21       chs  *	    bus_space_handle_t bsh, bus_size_t, u_intN_t val,
    656      1.21       chs  *	    size_t count);
    657       1.1    scottr  *
    658       1.1    scottr  * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described
    659       1.1    scottr  * by tag/handle starting at `offset'.
    660       1.1    scottr  */
    661       1.1    scottr 
    662      1.21       chs void mac68k_bssr1(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    663      1.21       chs 	u_int8_t, size_t);
    664      1.21       chs void mac68k_bssr1_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    665      1.21       chs 	u_int8_t, size_t);
    666      1.21       chs void mac68k_bssr2(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    667      1.21       chs 	u_int16_t, size_t);
    668      1.21       chs void mac68k_bssr2_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    669      1.21       chs 	u_int16_t, size_t);
    670      1.21       chs void mac68k_bssr2_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    671      1.21       chs 	u_int16_t, size_t);
    672      1.21       chs void mac68k_bssr4(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    673      1.21       chs 	u_int32_t, size_t);
    674      1.21       chs void mac68k_bssr4_swap(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    675      1.21       chs 	u_int32_t, size_t);
    676      1.21       chs void mac68k_bssr4_gen(bus_space_tag_t, bus_space_handle_t *, bus_size_t,
    677      1.21       chs 	u_int32_t, size_t);
    678      1.14    briggs 
    679      1.16    briggs #if defined(DIAGNOSTIC)
    680      1.16    briggs #define	bus_space_set_region_1(t, h, o, val, c) do {			 \
    681      1.16    briggs 	if (!c) panic("bus_space_set_region_1 called with zero count."); \
    682      1.16    briggs 	(h).bssr1(t,&(h),o,val,c); } while (0)
    683      1.16    briggs #define	bus_space_set_region_2(t, h, o, val, c) do {			 \
    684      1.16    briggs 	if (!c) panic("bus_space_set_region_2 called with zero count."); \
    685      1.16    briggs 	(h).bssr2(t,&(h),o,val,c); } while (0)
    686      1.16    briggs #define	bus_space_set_region_4(t, h, o, val, c) do {			 \
    687      1.16    briggs 	if (!c) panic("bus_space_set_region_4 called with zero count."); \
    688      1.16    briggs 	(h).bssr4(t,&(h),o,val,c); } while (0)
    689      1.16    briggs #else
    690      1.15    briggs #define	bus_space_set_region_1(t, h, o, val, c) \
    691      1.15    briggs 	do { if (c) (h).bssr1(t,&(h),o,val,c); } while (0)
    692      1.15    briggs #define	bus_space_set_region_2(t, h, o, val, c) \
    693      1.15    briggs 	do { if (c) (h).bssr2(t,&(h),o,val,c); } while (0)
    694      1.15    briggs #define	bus_space_set_region_4(t, h, o, val, c) \
    695      1.15    briggs 	do { if (c) (h).bssr4(t,&(h),o,val,c); } while (0)
    696      1.16    briggs #endif
    697       1.4    scottr 
    698       1.4    scottr #if 0	/* Cause a link error for bus_space_set_region_8 */
    699       1.4    scottr #define	bus_space_set_region_8						\
    700       1.4    scottr 			!!! bus_space_set_region_8 unimplemented !!!
    701       1.4    scottr #endif
    702       1.1    scottr 
    703       1.1    scottr /*
    704      1.21       chs  *	void bus_space_copy_N(bus_space_tag_t tag,
    705       1.1    scottr  *	    bus_space_handle_t bsh1, bus_size_t off1,
    706      1.21       chs  *	    bus_space_handle_t bsh2, bus_size_t off2, size_t count);
    707       1.1    scottr  *
    708       1.1    scottr  * Copy `count' 1, 2, 4, or 8 byte values from bus space starting
    709       1.1    scottr  * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2.
    710       1.1    scottr  */
    711       1.1    scottr 
    712       1.9    scottr #define	__MAC68K_copy_region_N(BYTES)					\
    713  1.23.6.1    simonb static __inline void __CONCAT(bus_space_copy_region_,BYTES)		\
    714      1.21       chs 	(bus_space_tag_t,						\
    715      1.21       chs 	    bus_space_handle_t, bus_size_t,				\
    716      1.21       chs 	    bus_space_handle_t, bus_size_t,				\
    717      1.21       chs 	    bus_size_t);						\
    718       1.9    scottr 									\
    719  1.23.6.1    simonb static __inline void							\
    720      1.21       chs __CONCAT(bus_space_copy_region_,BYTES)(					\
    721      1.21       chs 	bus_space_tag_t t,						\
    722      1.21       chs 	bus_space_handle_t h1,						\
    723      1.21       chs 	bus_size_t o1,							\
    724      1.21       chs 	bus_space_handle_t h2,						\
    725      1.21       chs 	bus_size_t o2,							\
    726      1.21       chs 	bus_size_t c)							\
    727       1.9    scottr {									\
    728       1.9    scottr 	bus_size_t o;							\
    729       1.9    scottr 									\
    730      1.14    briggs 	if ((h1.base + o1) >= (h2.base + o2)) {				\
    731       1.9    scottr 		/* src after dest: copy forward */			\
    732       1.9    scottr 		for (o = 0; c != 0; c--, o += BYTES)			\
    733       1.9    scottr 			__CONCAT(bus_space_write_,BYTES)(t, h2, o2 + o,	\
    734       1.9    scottr 			    __CONCAT(bus_space_read_,BYTES)(t, h1, o1 + o)); \
    735       1.9    scottr 	} else {							\
    736       1.9    scottr 		/* dest after src: copy backwards */			\
    737       1.9    scottr 		for (o = (c - 1) * BYTES; c != 0; c--, o -= BYTES)	\
    738       1.9    scottr 			__CONCAT(bus_space_write_,BYTES)(t, h2, o2 + o,	\
    739       1.9    scottr 			    __CONCAT(bus_space_read_,BYTES)(t, h1, o1 + o)); \
    740       1.9    scottr 	}								\
    741       1.9    scottr }
    742       1.9    scottr __MAC68K_copy_region_N(1)
    743       1.9    scottr __MAC68K_copy_region_N(2)
    744       1.9    scottr __MAC68K_copy_region_N(4)
    745       1.4    scottr #if 0	/* Cause a link error for bus_space_copy_8 */
    746       1.4    scottr #define	bus_space_copy_8						\
    747       1.4    scottr 			!!! bus_space_copy_8 unimplemented !!!
    748       1.4    scottr #endif
    749       1.1    scottr 
    750       1.9    scottr #undef __MAC68K_copy_region_N
    751       1.9    scottr 
    752       1.1    scottr /*
    753       1.1    scottr  * Bus read/write barrier methods.
    754       1.1    scottr  *
    755      1.21       chs  *	void bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
    756      1.21       chs  *	    bus_size_t offset, bus_size_t len, int flags);
    757       1.1    scottr  *
    758       1.1    scottr  * Note: the 680x0 does not currently require barriers, but we must
    759       1.1    scottr  * provide the flags to MI code.
    760       1.1    scottr  */
    761       1.1    scottr #define	bus_space_barrier(t, h, o, l, f)	\
    762       1.1    scottr 	((void)((void)(t), (void)(h), (void)(o), (void)(l), (void)(f)))
    763       1.9    scottr #define	BUS_SPACE_BARRIER_READ	0x01		/* force read barrier */
    764       1.9    scottr #define	BUS_SPACE_BARRIER_WRITE	0x02		/* force write barrier */
    765      1.12  drochner 
    766      1.12  drochner #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
    767      1.20    briggs 
    768      1.20    briggs #include <m68k/bus_dma.h>
    769       1.1    scottr 
    770       1.1    scottr #endif /* _MAC68K_BUS_H_ */
    771