Home | History | Annotate | Line # | Download | only in include
bus_defs.h revision 1.6
      1  1.6  christos /*	$NetBSD: bus_defs.h,v 1.6 2014/01/22 00:24:53 christos Exp $	*/
      2  1.1    dyoung 
      3  1.1    dyoung /*
      4  1.1    dyoung  * Copyright (c) 1996 Leo Weppelman.  All rights reserved.
      5  1.1    dyoung  *
      6  1.1    dyoung  * Redistribution and use in source and binary forms, with or without
      7  1.1    dyoung  * modification, are permitted provided that the following conditions
      8  1.1    dyoung  * are met:
      9  1.1    dyoung  * 1. Redistributions of source code must retain the above copyright
     10  1.1    dyoung  *    notice, this list of conditions and the following disclaimer.
     11  1.1    dyoung  * 2. Redistributions in binary form must reproduce the above copyright
     12  1.1    dyoung  *    notice, this list of conditions and the following disclaimer in the
     13  1.1    dyoung  *    documentation and/or other materials provided with the distribution.
     14  1.1    dyoung  *
     15  1.1    dyoung  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     16  1.1    dyoung  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     17  1.1    dyoung  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     18  1.1    dyoung  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     19  1.1    dyoung  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     20  1.1    dyoung  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     21  1.1    dyoung  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     22  1.1    dyoung  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     23  1.1    dyoung  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     24  1.1    dyoung  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     25  1.1    dyoung  */
     26  1.1    dyoung 
     27  1.1    dyoung #ifndef _AMIGAPPC_BUS_DEFS_H_
     28  1.1    dyoung #define _AMIGAPPC_BUS_DEFS_H_
     29  1.1    dyoung 
     30  1.1    dyoung /*
     31  1.1    dyoung  * Memory addresses (in bus space)
     32  1.1    dyoung  */
     33  1.1    dyoung 
     34  1.2    dyoung typedef uint32_t bus_addr_t;
     35  1.2    dyoung typedef uint32_t bus_size_t;
     36  1.1    dyoung 
     37  1.1    dyoung /*
     38  1.1    dyoung  * Access methods for bus resources and address space.
     39  1.1    dyoung  */
     40  1.1    dyoung typedef struct bus_space_tag *bus_space_tag_t;
     41  1.1    dyoung typedef u_long	bus_space_handle_t;
     42  1.1    dyoung 
     43  1.3    dyoung struct amigappc_bus_dma_segment;
     44  1.3    dyoung struct amigappc_bus_dma_tag;
     45  1.3    dyoung struct amigappc_bus_dmamap;
     46  1.3    dyoung typedef struct amigappc_bus_dma_segment bus_dma_segment_t;
     47  1.3    dyoung typedef struct amigappc_bus_dma_tag bus_dma_tag_t;
     48  1.3    dyoung typedef struct amigappc_bus_dmamap bus_dmamap_t;
     49  1.3    dyoung 
     50  1.3    dyoung struct amigappc_bus_dma_tag {
     51  1.3    dyoung 	int dummy;
     52  1.3    dyoung };
     53  1.3    dyoung 
     54  1.3    dyoung struct amigappc_bus_dma_segment {
     55  1.3    dyoung 	bus_addr_t	ds_addr;
     56  1.3    dyoung 	bus_size_t	ds_len;
     57  1.3    dyoung };
     58  1.3    dyoung 
     59  1.3    dyoung struct amigappc_bus_dmamap {
     60  1.3    dyoung 	bus_size_t		dm_maxsegsz;
     61  1.3    dyoung 	bus_size_t		dm_mapsize;
     62  1.3    dyoung 	int			dm_nsegs;
     63  1.3    dyoung 	bus_dma_segment_t	*dm_segs;
     64  1.3    dyoung 	/* TBD */
     65  1.3    dyoung };
     66  1.3    dyoung 
     67  1.1    dyoung /* unpublic, but needed by method implementors */
     68  1.1    dyoung 
     69  1.1    dyoung /*
     70  1.1    dyoung  * Lazyness macros for function declarations.
     71  1.1    dyoung  */
     72  1.1    dyoung 
     73  1.1    dyoung #define bsr(what, typ) \
     74  1.1    dyoung 	typ (what)(bus_space_handle_t, bus_addr_t)
     75  1.1    dyoung 
     76  1.1    dyoung #define bsw(what, typ) \
     77  1.1    dyoung 	void (what)(bus_space_handle_t, bus_addr_t, unsigned)
     78  1.1    dyoung 
     79  1.1    dyoung #define bsrm(what, typ) \
     80  1.1    dyoung 	void (what)(bus_space_handle_t, bus_size_t, typ *, bus_size_t)
     81  1.1    dyoung 
     82  1.1    dyoung #define bswm(what, typ) \
     83  1.1    dyoung 	void (what)(bus_space_handle_t, bus_size_t, const typ *, bus_size_t)
     84  1.1    dyoung 
     85  1.1    dyoung #define bssr(what, typ) \
     86  1.1    dyoung 	void (what)(bus_space_handle_t, bus_size_t, unsigned, bus_size_t)
     87  1.1    dyoung 
     88  1.1    dyoung #define bscr(what, typ) \
     89  1.1    dyoung 	void (what)(bus_space_handle_t, bus_size_t, \
     90  1.1    dyoung 		    bus_space_handle_t, bus_size_t, bus_size_t)
     91  1.1    dyoung 
     92  1.1    dyoung /*
     93  1.1    dyoung  * Implementation specific structures.
     94  1.1    dyoung  * XXX Don't use outside of bus_space definitions!
     95  1.1    dyoung  * XXX maybe this should be encapsuled in a non-global .h file?
     96  1.1    dyoung  */
     97  1.1    dyoung 
     98  1.1    dyoung struct bus_space_tag {
     99  1.1    dyoung 	bus_addr_t	base;
    100  1.1    dyoung 	const struct amiga_bus_space_methods *absm;
    101  1.1    dyoung };
    102  1.1    dyoung 
    103  1.1    dyoung struct amiga_bus_space_methods {
    104  1.1    dyoung 
    105  1.1    dyoung 	/* map, unmap, etc */
    106  1.1    dyoung 
    107  1.1    dyoung 	int (*bsm)(bus_space_tag_t,
    108  1.1    dyoung 		bus_addr_t, bus_size_t, int, bus_space_handle_t *);
    109  1.1    dyoung 
    110  1.1    dyoung 	int (*bsms)(bus_space_handle_t,
    111  1.1    dyoung 		bus_size_t, bus_size_t, bus_space_handle_t *);
    112  1.1    dyoung 
    113  1.1    dyoung 	void (*bsu)(bus_space_handle_t, bus_size_t);
    114  1.1    dyoung 
    115  1.1    dyoung 	/* placeholders for currently not implemented alloc and free */
    116  1.1    dyoung 
    117  1.1    dyoung 	void *bsa;
    118  1.1    dyoung 	void *bsf;
    119  1.1    dyoung 
    120  1.1    dyoung 	/* 8 bit methods */
    121  1.1    dyoung 
    122  1.2    dyoung 	bsr(*bsr1, uint8_t);
    123  1.2    dyoung 	bsw(*bsw1, uint8_t);
    124  1.2    dyoung 	bsrm(*bsrm1, uint8_t);
    125  1.2    dyoung 	bswm(*bswm1, uint8_t);
    126  1.2    dyoung 	bsrm(*bsrr1, uint8_t);
    127  1.2    dyoung 	bswm(*bswr1, uint8_t);
    128  1.2    dyoung 	bssr(*bssr1, uint8_t);
    129  1.2    dyoung 	bscr(*bscr1, uint8_t);
    130  1.1    dyoung 
    131  1.1    dyoung 	/* 16bit methods */
    132  1.1    dyoung 
    133  1.2    dyoung 	bsr(*bsr2, uint16_t);
    134  1.2    dyoung 	bsw(*bsw2, uint16_t);
    135  1.2    dyoung 	bsr(*bsrs2, uint16_t);
    136  1.2    dyoung 	bsw(*bsws2, uint16_t);
    137  1.2    dyoung 	bsrm(*bsrm2, uint16_t);
    138  1.2    dyoung 	bswm(*bswm2, uint16_t);
    139  1.2    dyoung 	bsrm(*bsrms2, uint16_t);
    140  1.2    dyoung 	bswm(*bswms2, uint16_t);
    141  1.2    dyoung 	bsrm(*bsrr2, uint16_t);
    142  1.2    dyoung 	bswm(*bswr2, uint16_t);
    143  1.2    dyoung 	bsrm(*bsrrs2, uint16_t);
    144  1.2    dyoung 	bswm(*bswrs2, uint16_t);
    145  1.2    dyoung 	bssr(*bssr2, uint16_t);
    146  1.2    dyoung 	bscr(*bscr2, uint16_t);
    147  1.1    dyoung 
    148  1.5  christos 	/* 32bit methods */
    149  1.5  christos 
    150  1.5  christos 	bsr(*bsr4, uint32_t);
    151  1.5  christos 	bsw(*bsw4, uint32_t);
    152  1.5  christos 	bsr(*bsrs4, uint32_t);
    153  1.5  christos 	bsw(*bsws4, uint32_t);
    154  1.5  christos 	bsrm(*bsrm4, uint32_t);
    155  1.5  christos 	bswm(*bswm4, uint32_t);
    156  1.5  christos 	bsrm(*bsrms4, uint32_t);
    157  1.5  christos 	bswm(*bswms4, uint32_t);
    158  1.5  christos 	bsrm(*bsrr4, uint32_t);
    159  1.5  christos 	bswm(*bswr4, uint32_t);
    160  1.5  christos 	bsrm(*bsrrs4, uint32_t);
    161  1.5  christos 	bswm(*bswrs4, uint32_t);
    162  1.5  christos 	bssr(*bssr4, uint32_t);
    163  1.5  christos 	bscr(*bscr4, uint32_t);
    164  1.1    dyoung };
    165  1.1    dyoung 
    166  1.1    dyoung #define BUS_SPACE_BARRIER_READ  0x01            /* force read barrier */
    167  1.1    dyoung #define BUS_SPACE_BARRIER_WRITE 0x02            /* force write barrier */
    168  1.1    dyoung 
    169  1.1    dyoung #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
    170  1.1    dyoung 
    171  1.1    dyoung #define __BUS_SPACE_HAS_STREAM_METHODS
    172  1.1    dyoung 
    173  1.1    dyoung extern const struct amiga_bus_space_methods amiga_bus_stride_1;
    174  1.1    dyoung extern const struct amiga_bus_space_methods amiga_bus_stride_2;
    175  1.1    dyoung extern const struct amiga_bus_space_methods amiga_bus_stride_4;
    176  1.1    dyoung extern const struct amiga_bus_space_methods amiga_bus_stride_4swap;
    177  1.1    dyoung extern const struct amiga_bus_space_methods amiga_bus_stride_16;
    178  1.6  christos extern const struct amiga_bus_space_methods amiga_bus_stride_0x1000;
    179  1.1    dyoung 
    180  1.1    dyoung #endif /* _AMIGAPPC_BUS_DEFS_H_ */
    181