Home | History | Annotate | Line # | Download | only in include
      1 /*	$NetBSD$	*/
      2 /*	$OpenBSD: bus.h,v 1.1 1997/10/13 10:53:42 pefo Exp $	*/
      3 
      4 /*-
      5  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
      6  * All rights reserved.
      7  *
      8  * This code is derived from software contributed to The NetBSD Foundation
      9  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
     10  * NASA Ames Research Center.
     11  *
     12  * Redistribution and use in source and binary forms, with or without
     13  * modification, are permitted provided that the following conditions
     14  * are met:
     15  * 1. Redistributions of source code must retain the above copyright
     16  *    notice, this list of conditions and the following disclaimer.
     17  * 2. Redistributions in binary form must reproduce the above copyright
     18  *    notice, this list of conditions and the following disclaimer in the
     19  *    documentation and/or other materials provided with the distribution.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     22  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     23  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     24  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     25  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     31  * POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 
     34 /*
     35  * Copyright (c) 1996 Charles M. Hannum.  All rights reserved.
     36  * Copyright (c) 1996 Jason R. Thorpe.  All rights reserved.
     37  * Copyright (c) 1996 Christopher G. Demetriou.  All rights reserved.
     38  *
     39  * Redistribution and use in source and binary forms, with or without
     40  * modification, are permitted provided that the following conditions
     41  * are met:
     42  * 1. Redistributions of source code must retain the above copyright
     43  *    notice, this list of conditions and the following disclaimer.
     44  * 2. Redistributions in binary form must reproduce the above copyright
     45  *    notice, this list of conditions and the following disclaimer in the
     46  *    documentation and/or other materials provided with the distribution.
     47  * 3. All advertising materials mentioning features or use of this software
     48  *    must display the following acknowledgement:
     49  *      This product includes software developed by Christopher G. Demetriou
     50  *	for the NetBSD Project.
     51  * 4. The name of the author may not be used to endorse or promote products
     52  *    derived from this software without specific prior written permission
     53  *
     54  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     55  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     56  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     57  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     58  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     59  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     60  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     61  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     62  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     63  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     64  */
     65 
     66 /*
     67  * Copyright (c) 1997 Per Fogelstrom.  All rights reserved.
     68  * Copyright (c) 1996 Niklas Hallqvist.  All rights reserved.
     69  *
     70  * Redistribution and use in source and binary forms, with or without
     71  * modification, are permitted provided that the following conditions
     72  * are met:
     73  * 1. Redistributions of source code must retain the above copyright
     74  *    notice, this list of conditions and the following disclaimer.
     75  * 2. Redistributions in binary form must reproduce the above copyright
     76  *    notice, this list of conditions and the following disclaimer in the
     77  *    documentation and/or other materials provided with the distribution.
     78  * 3. All advertising materials mentioning features or use of this software
     79  *    must display the following acknowledgement:
     80  *      This product includes software developed by Christopher G. Demetriou
     81  *	for the NetBSD Project.
     82  * 4. The name of the author may not be used to endorse or promote products
     83  *    derived from this software without specific prior written permission
     84  *
     85  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     86  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     87  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     88  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     89  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     90  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     91  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     92  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     93  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     94  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     95  */
     96 
     97 #ifndef _POWERPC_BUS_FUNCS_H_
     98 #define _POWERPC_BUS_FUNCS_H_
     99 
    100 #ifndef __HAVE_LOCAL_BUS_SPACE
    101 
    102 #ifdef __STDC__
    103 #define CAT(a,b)	a##b
    104 #define CAT3(a,b,c)	a##b##c
    105 #else
    106 #define CAT(a,b)	a/**/b
    107 #define CAT3(a,b,c)	a/**/b/**/c
    108 #endif
    109 
    110 int bus_space_init(struct powerpc_bus_space *, const char *, void *, size_t);
    111 void bus_space_mallocok(void);
    112 
    113 /*
    114  * Access methods for bus resources
    115  */
    116 
    117 /*
    118  *	void *bus_space_vaddr (bus_space_tag_t, bus_space_handle_t);
    119  *
    120  * Get the kernel virtual address for the mapped bus space.
    121  * Only allowed for regions mapped with BUS_SPACE_MAP_LINEAR.
    122  *  (XXX not enforced)
    123  */
    124 #define bus_space_vaddr(t, h) ((void *)(h))
    125 
    126 /*
    127  *	paddr_t bus_space_mmap  (bus_space_tag_t t, bus_addr_t addr,
    128  *	    off_t offset, int prot, int flags);
    129  *
    130  * Mmap a region of bus space.
    131  */
    132 
    133 #define bus_space_mmap(t, b, o, p, f)					\
    134     ((*(t)->pbs_mmap)((t), (b), (o), (p), (f)))
    135 
    136 /*
    137  *	int bus_space_map  (bus_space_tag_t t, bus_addr_t addr,
    138  *	    bus_size_t size, int flags, bus_space_handle_t *bshp);
    139  *
    140  * Map a region of bus space.
    141  */
    142 
    143 #define bus_space_map(t, a, s, f, hp)					\
    144     ((*(t)->pbs_map)((t), (a), (s), (f), (hp)))
    145 
    146 /*
    147  *	int bus_space_unmap (bus_space_tag_t t,
    148  *	    bus_space_handle_t bsh, bus_size_t size);
    149  *
    150  * Unmap a region of bus space.
    151  */
    152 
    153 #define bus_space_unmap(t, h, s)					\
    154     ((void)(*(t)->pbs_unmap)((t), (h), (s)))
    155 
    156 /*
    157  *	int bus_space_subregion (bus_space_tag_t t,
    158  *	    bus_space_handle_t bsh, bus_size_t offset, bus_size_t size,
    159  *	    bus_space_handle_t *nbshp);
    160  *
    161  * Get a new handle for a subregion of an already-mapped area of bus space.
    162  */
    163 
    164 #define bus_space_subregion(t, h, o, s, hp)				\
    165     ((*(t)->pbs_subregion)((t), (h), (o), (s), (hp)))
    166 
    167 /*
    168  *	int bus_space_alloc (bus_space_tag_t t, bus_addr_t rstart,
    169  *	    bus_addr_t rend, bus_size_t size, bus_size_t align,
    170  *	    bus_size_t boundary, int flags, bus_addr_t *bpap,
    171  *	    bus_space_handle_t *bshp);
    172  *
    173  * Allocate a region of bus space.
    174  */
    175 
    176 #define bus_space_alloc(t, rs, re, s, a, b, f, ap, hp)			\
    177     ((*(t)->pbs_alloc)((t), (rs), (re), (s), (a), (b), (f), (ap), (hp)))
    178 
    179 /*
    180  *	int bus_space_free (bus_space_tag_t t,
    181  *	    bus_space_handle_t bsh, bus_size_t size);
    182  *
    183  * Free a region of bus space.
    184  */
    185 
    186 #define	bus_space_free(t, h, s)						\
    187     ((void)(*(t)->pbs_free)((t), (h), (s)))
    188 
    189 /*
    190  *	uintN_t bus_space_read_N (bus_space_tag_t tag,
    191  *	    bus_space_handle_t bsh, bus_size_t offset);
    192  *
    193  * Read a 1, 2, 4, or 8 byte quantity from bus space
    194  * described by tag/handle/offset.
    195  */
    196 
    197 #define bus_space_read_1(t, h, o)					\
    198 	((*(t)->pbs_scalar.pbss_read_1)((t), (h), (o)))
    199 #define bus_space_read_2(t, h, o)					\
    200 	((*(t)->pbs_scalar.pbss_read_2)((t), (h), (o)))
    201 #define bus_space_read_4(t, h, o)					\
    202 	((*(t)->pbs_scalar.pbss_read_4)((t), (h), (o)))
    203 #define bus_space_read_8(t, h, o)					\
    204 	((*(t)->pbs_scalar.pbss_read_8)((t), (h), (o)))
    205 
    206 /*
    207  *	uintN_t bus_space_read_stream_N (bus_space_tag_t tag,
    208  *	    bus_space_handle_t bsh, bus_size_t offset);
    209  *
    210  * Read a 2, 4, or 8 byte quantity from bus space
    211  * described by tag/handle/offset ignoring endianness.
    212  */
    213 
    214 #define bus_space_read_stream_2(t, h, o)				\
    215 	((*(t)->pbs_scalar_stream.pbss_read_2)((t), (h), (o)))
    216 #define bus_space_read_stream_4(t, h, o)				\
    217 	((*(t)->pbs_scalar_stream.pbss_read_4)((t), (h), (o)))
    218 #define bus_space_read_stream_8(t, h, o)				\
    219 	((*(t)->pbs_scalar_stream.pbss_read_8)((t), (h), (o)))
    220 
    221 /*
    222  *	void bus_space_read_multi_N _P((bus_space_tag_t tag,
    223  *	    bus_space_handle_t bsh, bus_size_t offset,
    224  *	    uintN_t *addr, size_t count);
    225  *
    226  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
    227  * described by tag/handle/offset and copy into buffer provided.
    228  */
    229 
    230 #define bus_space_read_multi_1(t, h, o, a, c)				\
    231 	((*(t)->pbs_multi->pbsg_read_1)((t), (h), (o), (a), (c)))
    232 #define bus_space_read_multi_2(t, h, o, a, c)				\
    233 	((*(t)->pbs_multi->pbsg_read_2)((t), (h), (o), (a), (c)))
    234 #define bus_space_read_multi_4(t, h, o, a, c)				\
    235 	((*(t)->pbs_multi->pbsg_read_4)((t), (h), (o), (a), (c)))
    236 #define bus_space_read_multi_8(t, h, o, a, c)				\
    237 	((*(t)->pbs_multi->pbsg_read_8)((t), (h), (o), (a), (c)))
    238 
    239 /*
    240  *	void bus_space_read_multi_stream_N (bus_space_tag_t tag,
    241  *	    bus_space_handle_t bsh, bus_size_t offset,
    242  *	    uintN_t *addr, size_t count);
    243  *
    244  * Read `count' 2, 4, or 8 byte stream quantities from bus space
    245  * described by tag/handle/offset and copy into buffer provided.
    246  */
    247 
    248 #define bus_space_read_multi_stream_2(t, h, o, a, c)			\
    249 	((*(t)->pbs_multi_stream->pbsg_read_2)((t), (h), (o), (a), (c)))
    250 #define bus_space_read_multi_stream_4(t, h, o, a, c)			\
    251 	((*(t)->pbs_multi_stream->pbsg_read_4)((t), (h), (o), (a), (c)))
    252 #define bus_space_read_multi_stream_8(t, h, o, a, c)			\
    253 	((*(t)->pbs_multi_stream->pbsg_read_8)((t), (h), (o), (a), (c)))
    254 
    255 /*
    256  *	void bus_space_write_N (bus_space_tag_t tag,
    257  *	    bus_space_handle_t bsh, bus_size_t offset,
    258  *	    uintN_t value);
    259  *
    260  * Write the 1, 2, 4, or 8 byte value `value' to bus space
    261  * described by tag/handle/offset.
    262  */
    263 
    264 #define bus_space_write_1(t, h, o, v)					\
    265 	((*(t)->pbs_scalar.pbss_write_1)((t), (h), (o), (v)))
    266 #define bus_space_write_2(t, h, o, v)					\
    267 	((*(t)->pbs_scalar.pbss_write_2)((t), (h), (o), (v)))
    268 #define bus_space_write_4(t, h, o, v)					\
    269 	((*(t)->pbs_scalar.pbss_write_4)((t), (h), (o), (v)))
    270 #define bus_space_write_8(t, h, o, v)					\
    271 	((*(t)->pbs_scalar.pbss_write_8)((t), (h), (o), (v)))
    272 
    273 /*
    274  *	void bus_space_write_stream_N (bus_space_tag_t tag,
    275  *	    bus_space_handle_t bsh, bus_size_t offset,
    276  *	    uintN_t value);
    277  *
    278  * Write the 2, 4, or 8 byte stream value `value' to bus space
    279  * described by tag/handle/offset.
    280  */
    281 
    282 #define bus_space_write_stream_1(t, h, o, v)				\
    283 	((*(t)->pbs_scalar_stream.pbss_write_1)((t), (h), (o), (v)))
    284 #define bus_space_write_stream_2(t, h, o, v)				\
    285 	((*(t)->pbs_scalar_stream.pbss_write_2)((t), (h), (o), (v)))
    286 #define bus_space_write_stream_4(t, h, o, v)				\
    287 	((*(t)->pbs_scalar_stream.pbss_write_4)((t), (h), (o), (v)))
    288 #define bus_space_write_stream_8(t, h, o, v)				\
    289 	((*(t)->pbs_scalar_stream.pbss_write_8)((t), (h), (o), (v)))
    290 
    291 /*
    292  *	void bus_space_write_multi_N (bus_space_tag_t tag,
    293  *	    bus_space_handle_t bsh, bus_size_t offset,
    294  *	    const uintN_t *addr, size_t count);
    295  *
    296  * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
    297  * provided to bus space described by tag/handle/offset.
    298  */
    299 
    300 #define bus_space_write_multi_1(t, h, o, a, c)				\
    301 	((*(t)->pbs_multi->pbsg_write_1)((t), (h), (o), (a), (c)))
    302 #define bus_space_write_multi_2(t, h, o, a, c)				\
    303 	((*(t)->pbs_multi->pbsg_write_2)((t), (h), (o), (a), (c)))
    304 #define bus_space_write_multi_4(t, h, o, a, c)				\
    305 	((*(t)->pbs_multi->pbsg_write_4)((t), (h), (o), (a), (c)))
    306 #define bus_space_write_multi_8(t, h, o, a, c)				\
    307 	((*(t)->pbs_multi->pbsg_write_8)((t), (h), (o), (a), (c)))
    308 
    309 /*
    310  *	void bus_space_write_multi_stream_N (bus_space_tag_t tag,
    311  *	    bus_space_handle_t bsh, bus_size_t offset,
    312  *	    const uintN_t *addr, size_t count);
    313  *
    314  * Write `count' 2, 4, or 8 byte stream quantities from the buffer
    315  * provided to bus space described by tag/handle/offset.
    316  */
    317 
    318 #define bus_space_write_multi_stream_1(t, h, o, a, c)			\
    319 	((*(t)->pbs_multi_stream->pbsg_write_1)((t), (h), (o), (a), (c)))
    320 #define bus_space_write_multi_stream_2(t, h, o, a, c)			\
    321 	((*(t)->pbs_multi_stream->pbsg_write_2)((t), (h), (o), (a), (c)))
    322 #define bus_space_write_multi_stream_4(t, h, o, a, c)			\
    323 	((*(t)->pbs_multi_stream->pbsg_write_4)((t), (h), (o), (a), (c)))
    324 #define bus_space_write_multi_stream_8(t, h, o, a, c)			\
    325 	((*(t)->pbs_multi_stream->pbsg_write_8)((t), (h), (o), (a), (c)))
    326 
    327 /*
    328  *	void bus_space_read_region_N (bus_space_tag_t tag,
    329  *	    bus_space_handle_t bsh, bus_size_t offset,
    330  *	    uintN_t *addr, size_t count);
    331  *
    332  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
    333  * described by tag/handle and starting at `offset' and copy into
    334  * buffer provided.
    335  */
    336 #define bus_space_read_region_1(t, h, o, a, c)				\
    337 	((*(t)->pbs_region->pbsg_read_1)((t), (h), (o), (a), (c)))
    338 #define bus_space_read_region_2(t, h, o, a, c)				\
    339 	((*(t)->pbs_region->pbsg_read_2)((t), (h), (o), (a), (c)))
    340 #define bus_space_read_region_4(t, h, o, a, c)				\
    341 	((*(t)->pbs_region->pbsg_read_4)((t), (h), (o), (a), (c)))
    342 #define bus_space_read_region_8(t, h, o, a, c)				\
    343 	((*(t)->pbs_region->pbsg_read_8)((t), (h), (o), (a), (c)))
    344 
    345 /*
    346  *	void bus_space_read_region_stream_N (bus_space_tag_t tag,
    347  *	    bus_space_handle_t bsh, bus_size_t offset,
    348  *	    uintN_t *addr, size_t count);
    349  *
    350  * Read `count' 2, 4, or 8 byte stream quantities from bus space
    351  * described by tag/handle and starting at `offset' and copy into
    352  * buffer provided.
    353  */
    354 #define bus_space_read_region_stream_2(t, h, o, a, c)			\
    355 	((*(t)->pbs_region_stream->pbsg_read_2)((t), (h), (o), (a), (c)))
    356 #define bus_space_read_region_stream_4(t, h, o, a, c)			\
    357 	((*(t)->pbs_region_stream->pbsg_read_4)((t), (h), (o), (a), (c)))
    358 #define bus_space_read_region_stream_8(t, h, o, a, c)			\
    359 	((*(t)->pbs_region_stream->pbsg_read_8)((t), (h), (o), (a), (c)))
    360 
    361 /*
    362  *	void bus_space_write_region_N (bus_space_tag_t tag,
    363  *	    bus_space_handle_t bsh, bus_size_t offset,
    364  *	    const uintN_t *addr, size_t count);
    365  *
    366  * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided
    367  * to bus space described by tag/handle starting at `offset'.
    368  */
    369 #define bus_space_write_region_1(t, h, o, a, c)				\
    370 	((*(t)->pbs_region->pbsg_write_1)((t), (h), (o), (a), (c)))
    371 #define bus_space_write_region_2(t, h, o, a, c)				\
    372 	((*(t)->pbs_region->pbsg_write_2)((t), (h), (o), (a), (c)))
    373 #define bus_space_write_region_4(t, h, o, a, c)				\
    374 	((*(t)->pbs_region->pbsg_write_4)((t), (h), (o), (a), (c)))
    375 #define bus_space_write_region_8(t, h, o, a, c)				\
    376 	((*(t)->pbs_region->pbsg_write_8)((t), (h), (o), (a), (c)))
    377 
    378 /*
    379  *	void bus_space_write_region_stream_N (bus_space_tag_t tag,
    380  *	    bus_space_handle_t bsh, bus_size_t offset,
    381  *	    const uintN_t *addr, size_t count);
    382  *
    383  * Write `count' 2, 4, or 8 byte stream quantities from the buffer provided
    384  * to bus space described by tag/handle starting at `offset'.
    385  */
    386 #define bus_space_write_region_stream_2(t, h, o, a, c)			\
    387 	((*(t)->pbs_region_stream->pbsg_write_2)((t), (h), (o), (a), (c)))
    388 #define bus_space_write_region_stream_4(t, h, o, a, c)			\
    389 	((*(t)->pbs_region_stream->pbsg_write_4)((t), (h), (o), (a), (c)))
    390 #define bus_space_write_region_stream_8(t, h, o, a, c)			\
    391 	((*(t)->pbs_region_stream->pbsg_write_8)((t), (h), (o), (a), (c)))
    392 
    393 #if 0
    394 /*
    395  *	void bus_space_set_multi_N (bus_space_tag_t tag,
    396  *	    bus_space_handle_t bsh, bus_size_t offset, uintN_t val,
    397  *	    size_t count);
    398  *
    399  * Write the 1, 2, 4, or 8 byte value `val' to bus space described
    400  * by tag/handle/offset `count' times.
    401  */
    402 #define	bus_space_set_multi_1(t, h, o, v, c)
    403 	((*(t)->pbs_set_multi_1)((t), (h), (o), (v), (c)))
    404 #define	bus_space_set_multi_2(t, h, o, v, c)
    405 	((*(t)->pbs_set_multi_2)((t), (h), (o), (v), (c)))
    406 #define	bus_space_set_multi_4(t, h, o, v, c)
    407 	((*(t)->pbs_set_multi_4)((t), (h), (o), (v), (c)))
    408 #define	bus_space_set_multi_8(t, h, o, v, c)
    409 	((*(t)->pbs_set_multi_8)((t), (h), (o), (v), (c)))
    410 
    411 /*
    412  *	void bus_space_set_multi_stream_N (bus_space_tag_t tag,
    413  *	    bus_space_handle_t bsh, bus_size_t offset, uintN_t val,
    414  *	    size_t count);
    415  *
    416  * Write the 2, 4, or 8 byte stream value `val' to bus space described
    417  * by tag/handle/offset `count' times.
    418  */
    419 #define	bus_space_set_multi_stream_2(t, h, o, v, c)
    420 	((*(t)->pbs_set_multi_stream_2)((t), (h), (o), (v), (c)))
    421 #define	bus_space_set_multi_stream_4(t, h, o, v, c)
    422 	((*(t)->pbs_set_multi_stream_4)((t), (h), (o), (v), (c)))
    423 #define	bus_space_set_multi_stream_8(t, h, o, v, c)
    424 	((*(t)->pbs_set_multi_stream_8)((t), (h), (o), (v), (c)))
    425 
    426 #endif
    427 
    428 /*
    429  *	void bus_space_set_region_N (bus_space_tag_t tag,
    430  *	    bus_space_handle_t bsh, bus_size_t offset, uintN_t val,
    431  *	    size_t count);
    432  *
    433  * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described
    434  * by tag/handle starting at `offset'.
    435  */
    436 #define bus_space_set_region_1(t, h, o, v, c)				\
    437 	((*(t)->pbs_set->pbss_set_1)((t), (h), (o), (v), (c)))
    438 #define bus_space_set_region_2(t, h, o, v, c)				\
    439 	((*(t)->pbs_set->pbss_set_2)((t), (h), (o), (v), (c)))
    440 #define bus_space_set_region_4(t, h, o, v, c)				\
    441 	((*(t)->pbs_set->pbss_set_4)((t), (h), (o), (v), (c)))
    442 #define bus_space_set_region_8(t, h, o, v, c)				\
    443 	((*(t)->pbs_set->pbss_set_8)((t), (h), (o), (v), (c)))
    444 
    445 /*
    446  *	void bus_space_set_region_stream_N (bus_space_tag_t tag,
    447  *	    bus_space_handle_t bsh, bus_size_t offset, uintN_t val,
    448  *	    size_t count);
    449  *
    450  * Write `count' 2, 4, or 8 byte stream value `val' to bus space described
    451  * by tag/handle starting at `offset'.
    452  */
    453 #define bus_space_set_region_stream_2(t, h, o, v, c)			\
    454 	((*(t)->pbs_set_stream->pbss_set_2)((t), (h), (o), (v), (c)))
    455 #define bus_space_set_region_stream_4(t, h, o, v, c)			\
    456 	((*(t)->pbs_set_stream->pbss_set_4)((t), (h), (o), (v), (c)))
    457 #define bus_space_set_region_stream_8(t, h, o, v, c)			\
    458 	((*(t)->pbs_set_stream->pbss_set_8)((t), (h), (o), (v), (c)))
    459 
    460 
    461 /*
    462  *	void bus_space_copy_region_N (bus_space_tag_t tag,
    463  *	    bus_space_handle_t bsh1, bus_size_t off1,
    464  *	    bus_space_handle_t bsh2, bus_size_t off2,
    465  *	    size_t count);
    466  *
    467  * Copy `count' 1, 2, 4, or 8 byte values from bus space starting
    468  * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2.
    469  */
    470 #define bus_space_copy_region_1(t, h1, o1, h2, o2, c)			\
    471 	((*(t)->pbs_copy->pbsc_copy_1)((t), (h1), (o1), (h2), (o2), (c)))
    472 #define bus_space_copy_region_2(t, h1, o1, h2, o2, c)			\
    473 	((*(t)->pbs_copy->pbsc_copy_2)((t), (h1), (o1), (h2), (o2), (c)))
    474 #define bus_space_copy_region_4(t, h1, o1, h2, o2, c)			\
    475 	((*(t)->pbs_copy->pbsc_copy_4)((t), (h1), (o1), (h2), (o2), (c)))
    476 #define bus_space_copy_region_8(t, h1, o1, h2, o2, c)			\
    477 	((*(t)->pbs_copy->pbsc_copy_8)((t), (h1), (o1), (h2), (o2), (c)))
    478 
    479 /*
    480  * Bus read/write barrier methods.
    481  *
    482  *	void bus_space_barrier (bus_space_tag_t tag,
    483  *	    bus_space_handle_t bsh, bus_size_t offset,
    484  *	    bus_size_t len, int flags);
    485  *
    486  */
    487 #define	bus_space_barrier(t, h, o, l, f)	\
    488 	((void)((void)(t), (void)(h), (void)(o), (void)(l), (void)(f)))
    489 
    490 #endif	/* !__HAVE_LOCAL_BUS_SPACE */
    491 
    492 /*
    493  * Bus DMA methods.
    494  */
    495 
    496 /* Forwards needed by prototypes below. */
    497 struct proc;
    498 struct mbuf;
    499 struct uio;
    500 
    501 #define	bus_dmamap_create(t, s, n, m, b, f, p)			\
    502 	(*(t)->_dmamap_create)((t), (s), (n), (m), (b), (f), (p))
    503 #define	bus_dmamap_destroy(t, p)				\
    504 	(*(t)->_dmamap_destroy)((t), (p))
    505 #define	bus_dmamap_load(t, m, b, s, p, f)			\
    506 	(*(t)->_dmamap_load)((t), (m), (b), (s), (p), (f))
    507 #define	bus_dmamap_load_mbuf(t, m, b, f)			\
    508 	(*(t)->_dmamap_load_mbuf)((t), (m), (b), (f))
    509 #define	bus_dmamap_load_uio(t, m, u, f)				\
    510 	(*(t)->_dmamap_load_uio)((t), (m), (u), (f))
    511 #define	bus_dmamap_load_raw(t, m, sg, n, s, f)			\
    512 	(*(t)->_dmamap_load_raw)((t), (m), (sg), (n), (s), (f))
    513 #define	bus_dmamap_unload(t, p)					\
    514 	(*(t)->_dmamap_unload)((t), (p))
    515 #define	bus_dmamap_sync(t, p, o, l, ops)			\
    516 	(void)((t)->_dmamap_sync ?				\
    517 	    (*(t)->_dmamap_sync)((t), (p), (o), (l), (ops)) : (void)0)
    518 
    519 #define	bus_dmamem_alloc(t, s, a, b, sg, n, r, f)		\
    520 	(*(t)->_dmamem_alloc)((t), (s), (a), (b), (sg), (n), (r), (f))
    521 #define	bus_dmamem_free(t, sg, n)				\
    522 	(*(t)->_dmamem_free)((t), (sg), (n))
    523 #define	bus_dmamem_map(t, sg, n, s, k, f)			\
    524 	(*(t)->_dmamem_map)((t), (sg), (n), (s), (k), (f))
    525 #define	bus_dmamem_unmap(t, k, s)				\
    526 	(*(t)->_dmamem_unmap)((t), (k), (s))
    527 #define	bus_dmamem_mmap(t, sg, n, o, p, f)			\
    528 	(*(t)->_dmamem_mmap)((t), (sg), (n), (o), (p), (f))
    529 
    530 #define bus_dmatag_subregion(t, mna, mxa, nt, f) EOPNOTSUPP
    531 #define bus_dmatag_destroy(t)
    532 
    533 #ifdef _POWERPC_BUS_DMA_PRIVATE
    534 int	_bus_dmamap_create (bus_dma_tag_t, bus_size_t, int, bus_size_t,
    535 	    bus_size_t, int, bus_dmamap_t *);
    536 void	_bus_dmamap_destroy (bus_dma_tag_t, bus_dmamap_t);
    537 int	_bus_dmamap_load (bus_dma_tag_t, bus_dmamap_t, void *,
    538 	    bus_size_t, struct proc *, int);
    539 int	_bus_dmamap_load_mbuf (bus_dma_tag_t, bus_dmamap_t,
    540 	    struct mbuf *, int);
    541 int	_bus_dmamap_load_uio (bus_dma_tag_t, bus_dmamap_t,
    542 	    struct uio *, int);
    543 int	_bus_dmamap_load_raw (bus_dma_tag_t, bus_dmamap_t,
    544 	    bus_dma_segment_t *, int, bus_size_t, int);
    545 void	_bus_dmamap_unload (bus_dma_tag_t, bus_dmamap_t);
    546 void	_bus_dmamap_sync (bus_dma_tag_t, bus_dmamap_t, bus_addr_t,
    547 	    bus_size_t, int);
    548 
    549 int	_bus_dmamem_alloc (bus_dma_tag_t tag, bus_size_t size,
    550 	    bus_size_t alignment, bus_size_t boundary,
    551 	    bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags);
    552 void	_bus_dmamem_free (bus_dma_tag_t tag, bus_dma_segment_t *segs,
    553 	    int nsegs);
    554 int	_bus_dmamem_map (bus_dma_tag_t tag, bus_dma_segment_t *segs,
    555 	    int nsegs, size_t size, void **kvap, int flags);
    556 void	_bus_dmamem_unmap (bus_dma_tag_t tag, void *kva,
    557 	    size_t size);
    558 paddr_t	_bus_dmamem_mmap (bus_dma_tag_t tag, bus_dma_segment_t *segs,
    559 	    int nsegs, off_t off, int prot, int flags);
    560 
    561 int	_bus_dmamem_alloc_range (bus_dma_tag_t tag, bus_size_t size,
    562 	    bus_size_t alignment, bus_size_t boundary,
    563 	    bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags,
    564 	    paddr_t low, paddr_t high);
    565 bus_addr_t _bus_dma_phys_to_bus_mem_generic(bus_dma_tag_t, bus_addr_t);
    566 bus_addr_t _bus_dma_bus_mem_to_phys_generic(bus_dma_tag_t, bus_addr_t);
    567 #endif /* _POWERPC_BUS_DMA_PRIVATE */
    568 #endif /* _POWERPC_BUS_FUNCS_H_ */
    569