1*cde8f271Sriastradh /* $NetBSD: bus_funcs.h,v 1.2 2022/02/16 23:49:26 riastradh Exp $ */ 2f7f7c8b5Sdyoung 3f7f7c8b5Sdyoung /* 4f7f7c8b5Sdyoung * Copyright (c) 1996 Leo Weppelman. All rights reserved. 5f7f7c8b5Sdyoung * 6f7f7c8b5Sdyoung * Redistribution and use in source and binary forms, with or without 7f7f7c8b5Sdyoung * modification, are permitted provided that the following conditions 8f7f7c8b5Sdyoung * are met: 9f7f7c8b5Sdyoung * 1. Redistributions of source code must retain the above copyright 10f7f7c8b5Sdyoung * notice, this list of conditions and the following disclaimer. 11f7f7c8b5Sdyoung * 2. Redistributions in binary form must reproduce the above copyright 12f7f7c8b5Sdyoung * notice, this list of conditions and the following disclaimer in the 13f7f7c8b5Sdyoung * documentation and/or other materials provided with the distribution. 14f7f7c8b5Sdyoung * 15f7f7c8b5Sdyoung * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16f7f7c8b5Sdyoung * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17f7f7c8b5Sdyoung * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18f7f7c8b5Sdyoung * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19f7f7c8b5Sdyoung * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20f7f7c8b5Sdyoung * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21f7f7c8b5Sdyoung * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22f7f7c8b5Sdyoung * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23f7f7c8b5Sdyoung * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24f7f7c8b5Sdyoung * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25f7f7c8b5Sdyoung */ 26f7f7c8b5Sdyoung 27f7f7c8b5Sdyoung #ifndef _AMIGAPPC_BUS_FUNCS_H_ 28f7f7c8b5Sdyoung #define _AMIGAPPC_BUS_FUNCS_H_ 29f7f7c8b5Sdyoung 30f7f7c8b5Sdyoung /* 31f7f7c8b5Sdyoung * Macro definition of map, unmap, etc. 32f7f7c8b5Sdyoung */ 33f7f7c8b5Sdyoung 34f7f7c8b5Sdyoung #define bus_space_map(t, o, s, f, hp) \ 35f7f7c8b5Sdyoung ((t)->absm->bsm)((t), (o), (s), (f), (hp)) 36f7f7c8b5Sdyoung 37f7f7c8b5Sdyoung #define bus_space_subregion(t, h, o, s, hp) \ 38f7f7c8b5Sdyoung ((t)->absm->bsms)((h), (o), (s), (hp)) 39f7f7c8b5Sdyoung 40f7f7c8b5Sdyoung #define bus_space_unmap(t, h, s) \ 41f7f7c8b5Sdyoung ((t)->absm->bsu)((h), (s)) 42f7f7c8b5Sdyoung 43f7f7c8b5Sdyoung /* 44f7f7c8b5Sdyoung * Macro definition of _2 functions as indirect method array calls 45f7f7c8b5Sdyoung */ 46f7f7c8b5Sdyoung 47f7f7c8b5Sdyoung /* 0: Helper macros */ 48f7f7c8b5Sdyoung 49f7f7c8b5Sdyoung #define dbsdr(n, t, h, o) ((t)->absm->n)((h), (o)) 50f7f7c8b5Sdyoung #define dbsdw(n, t, h, o, v) ((t)->absm->n)((h), (o), (v)) 51f7f7c8b5Sdyoung #define dbsm(n, t, h, o, p, c) ((t)->absm->n)((h), (o), (p), (c)) 52f7f7c8b5Sdyoung #define dbss(n, t, h, o, v, c) ((t)->absm->n)((h), (o), (v), (c)) 53f7f7c8b5Sdyoung #define dbsc(n, t, h, o, v, c) ((t)->absm->n)((h), (o), (v), (c)) 54f7f7c8b5Sdyoung 55f7f7c8b5Sdyoung /* 1: byte-wide "functions" */ 56f7f7c8b5Sdyoung 57f7f7c8b5Sdyoung #define bus_space_read_1(t, h, o) dbsdr(bsr1, t, h, o) 58f7f7c8b5Sdyoung #define bus_space_write_1(t, h, o, v) dbsdw(bsw1, t, h, o, v) 59f7f7c8b5Sdyoung 60f7f7c8b5Sdyoung #define bus_space_read_multi_1(t, h, o, p, c) dbsm(bsrm1, t, h, o, p, c) 61f7f7c8b5Sdyoung #define bus_space_write_multi_1(t, h, o, p, c) dbsm(bswm1, t, h, o, p, c) 62f7f7c8b5Sdyoung 63f7f7c8b5Sdyoung #define bus_space_read_region_1(t, h, o, p, c) dbsm(bsrr1, t, h, o, p, c) 64f7f7c8b5Sdyoung #define bus_space_write_region_1(t, h, o, p, c) dbsm(bswr1, t, h, o, p, c) 65f7f7c8b5Sdyoung 66f7f7c8b5Sdyoung #define bus_space_set_region_1(t, h, o, v, c) dbss(bssr1, t, h, o, v, c) 67f7f7c8b5Sdyoung #define bus_space_copy_region_1(t, h, o, g, q, c) dbss(bscr1, t, h, o, g, q, c) 68f7f7c8b5Sdyoung 69f7f7c8b5Sdyoung 70f7f7c8b5Sdyoung /* 2: word-wide "functions" */ 71f7f7c8b5Sdyoung 72f7f7c8b5Sdyoung #define bus_space_read_2(t, h, o) dbsdr(bsr2, t, h, o) 73f7f7c8b5Sdyoung #define bus_space_write_2(t, h, o, v) dbsdw(bsw2, t, h, o, v) 74f7f7c8b5Sdyoung #define bus_space_read_stream_2(t, h, o) dbsdr(bsrs2, t, h, o) 75f7f7c8b5Sdyoung #define bus_space_write_stream_2(t, h, o, v) dbsdw(bsws2, t, h, o, v) 76f7f7c8b5Sdyoung 77f7f7c8b5Sdyoung #define bus_space_read_multi_2(t, h, o, p, c) dbsm(bsrm2, t, h, o, p, c) 78f7f7c8b5Sdyoung #define bus_space_write_multi_2(t, h, o, p, c) dbsm(bswm2, t, h, o, p, c) 79f7f7c8b5Sdyoung 80f7f7c8b5Sdyoung #define bus_space_read_multi_stream_2(t, h, o, p, c) \ 81f7f7c8b5Sdyoung dbsm(bsrms2, t, h, o, p, c) 82f7f7c8b5Sdyoung 83f7f7c8b5Sdyoung #define bus_space_write_multi_stream_2(t, h, o, p, c) \ 84f7f7c8b5Sdyoung dbsm(bswms2, t, h, o, p, c) 85f7f7c8b5Sdyoung 86f7f7c8b5Sdyoung #define bus_space_read_region_2(t, h, o, p, c) dbsm(bsrr2, t, h, o, p, c) 87f7f7c8b5Sdyoung #define bus_space_write_region_2(t, h, o, p, c) dbsm(bswr2, t, h, o, p, c) 88f7f7c8b5Sdyoung 89f7f7c8b5Sdyoung #define bus_space_read_region_stream_2(t, h, o, p, c) \ 90f7f7c8b5Sdyoung dbsm(bsrrs2, t, h, o, p, c) 91f7f7c8b5Sdyoung 92f7f7c8b5Sdyoung #define bus_space_write_region_stream_2(t, h, o, p, c) \ 93f7f7c8b5Sdyoung dbsm(bswrs2, t, h, o, p, c) 94f7f7c8b5Sdyoung 95f7f7c8b5Sdyoung #define bus_space_set_region_2(t, h, o, v, c) dbss(bssr2, t, h, o, v, c) 96f7f7c8b5Sdyoung #define bus_space_copy_region_2(t, h, o, g, q, c) dbss(bscr2, t, h, o, g, q, c) 97f7f7c8b5Sdyoung 98f7f7c8b5Sdyoung /* 4: Fake 32-bit macros */ 99f7f7c8b5Sdyoung 100f7f7c8b5Sdyoung #define bus_space_read_4(t, h, o) \ 101f7f7c8b5Sdyoung (panic("bus_space_read_4 not implemented"), 0) 102f7f7c8b5Sdyoung 103f7f7c8b5Sdyoung #define bus_space_write_4(t, h, o, v) \ 104f7f7c8b5Sdyoung panic("bus_space_write_4 not implemented") 105f7f7c8b5Sdyoung 106f7f7c8b5Sdyoung #define bus_space_read_stream_4(t, h, o) \ 107f7f7c8b5Sdyoung (panic("bus_space_read_stream_4 not implemented"), 0) 108f7f7c8b5Sdyoung 109f7f7c8b5Sdyoung #define bus_space_write_stream_4(t, h, o, v) \ 110f7f7c8b5Sdyoung panic("bus_space_read_stream_4 not implemented") 111f7f7c8b5Sdyoung 112f7f7c8b5Sdyoung #define bus_space_read_multi_4(t, h, o, p, c) \ 113f7f7c8b5Sdyoung panic("bus_space_read_multi_4 not implemented") 114f7f7c8b5Sdyoung 115f7f7c8b5Sdyoung #define bus_space_write_multi_4(t, h, o, p, c) \ 116f7f7c8b5Sdyoung panic("bus_space_write_multi_4 not implemented") 117f7f7c8b5Sdyoung 118f7f7c8b5Sdyoung #define bus_space_read_multi_stream_4(t, h, o, p, c) \ 119f7f7c8b5Sdyoung panic("bus_space_read_multi_stream_4 not implemented") 120f7f7c8b5Sdyoung 121f7f7c8b5Sdyoung #define bus_space_write_multi_stream_4(t, h, o, p, c) \ 122f7f7c8b5Sdyoung panic("bus_space_write_multi_stream_4 not implemented") 123f7f7c8b5Sdyoung 124f7f7c8b5Sdyoung #define bus_space_read_region_stream_4(t, h, o, p, c) \ 125f7f7c8b5Sdyoung panic("bus_space_read_region_stream_4 not implemented") 126f7f7c8b5Sdyoung 127f7f7c8b5Sdyoung #define bus_space_write_region_stream_4(t, h, o, p, c) \ 128f7f7c8b5Sdyoung panic("bus_space_write_region_stream_4 not implemented") 129f7f7c8b5Sdyoung 130f7f7c8b5Sdyoung /* 131f7f7c8b5Sdyoung * Bus read/write barrier methods. 132f7f7c8b5Sdyoung * 133f7f7c8b5Sdyoung * void bus_space_barrier __P((bus_space_tag_t tag, 134f7f7c8b5Sdyoung * bus_space_handle_t bsh, bus_size_t offset, 135f7f7c8b5Sdyoung * bus_size_t len, int flags)); 136f7f7c8b5Sdyoung * 137f7f7c8b5Sdyoung * Note: the 680x0 does not currently require barriers, but we must 138f7f7c8b5Sdyoung * provide the flags to MI code. 139f7f7c8b5Sdyoung */ 140f7f7c8b5Sdyoung #define bus_space_barrier(t, h, o, l, f) \ 141f7f7c8b5Sdyoung ((void)((void)(t), (void)(h), (void)(o), (void)(l), (void)(f))) 142f7f7c8b5Sdyoung 143f7f7c8b5Sdyoung /* Instruction for enforcing reorder protection. */ 144*cde8f271Sriastradh #define amiga_bus_reorder_protect() __asm volatile("eieio" ::: "memory") 145f7f7c8b5Sdyoung 146f7f7c8b5Sdyoung #endif /* _AMIGAPPC_BUS_FUNCS_H_ */ 147