1ECHO:/* $OpenBSD: busop_c.in,v 1.2 2010/04/04 12:49:30 miod Exp $ */ 2ECHO: 3ECHO:/* 4ECHO: * Copyright (c) 2003 Henric Jungheim 5ECHO: * All rights reserved. 6ECHO: * 7ECHO: * Redistribution and use in source and binary forms, with or without 8ECHO: * modification, are permitted provided that the following conditions 9ECHO: * are met: 10ECHO: * 1. Redistributions of source code must retain the above copyright 11ECHO: * notice, this list of conditions and the following disclaimer. 12ECHO: * 2. Redistributions in binary form must reproduce the above copyright 13ECHO: * notice, this list of conditions and the following disclaimer in the 14ECHO: * documentation and/or other materials provided with the distribution. 15ECHO: * 3. The name of the author may not be used to endorse or promote products 16ECHO: * derived from this software without specific prior written permission. 17ECHO: * 18ECHO: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19ECHO: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20ECHO: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21ECHO: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22ECHO: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23ECHO: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24ECHO: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25ECHO: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26ECHO: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27ECHO: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28ECHO: */ 29ECHO: 30ECHO:#include <sys/param.h> 31ECHO:#include <sys/systm.h> 32ECHO:#include <sys/kernel.h> 33ECHO: 34ECHO:#include <machine/bus.h> 35ECHO: 36 37void 38bus_space_read_<RAW>multi_<NUM>(bus_space_tag_t t, bus_space_handle_t h, 39 bus_size_t o, 40NRAW: <TYPE> *a, bus_size_t c) 41RAW: void *a, size_t c) 42{ 43 <TYPE> *p = a; 44 45 BUS_SPACE_ASSERT(t, h, o, <NUM>); 46 BUS_SPACE_TRACE(t, h, 47 ("bsrm<NUM>(%llx + %llx, %x, %x) ->", (long long)h.bh_ptr, 48 (long long)o, t-><ASI>, c)); 49RAW: c /= sizeof(<TYPE>); 50 51 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 52 asi_set(t-><ASI>); 53 while (--c > 0) { 54 <TYPE> r = <LOAD>_asi(h.bh_ptr + o); 55 BUS_SPACE_TRACE(t, h, (" <FMT>", r)); 56 *p++ = r; 57 } 58 59 BUS_SPACE_TRACE(t, h, ("\n")); 60} 61 62void 63bus_space_write_<RAW>multi_<NUM>(bus_space_tag_t t, bus_space_handle_t h, 64 bus_size_t o, 65NRAW: const <TYPE> *a, bus_size_t c) 66RAW: const void *a, size_t c) 67{ 68 const <TYPE> *p = a; 69 70 BUS_SPACE_ASSERT(t, h, o, <NUM>); 71 BUS_SPACE_TRACE(t, h, 72 ("bswm<NUM>(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 73 (long long)o, t-><ASI>, c)); 74RAW: c /= sizeof(<TYPE>); 75 76 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 77 asi_set(t-><ASI>); 78 while (--c > 0) { 79 <TYPE> r = *p++; 80 BUS_SPACE_TRACE(t, h, (" <FMT>", r)); 81 <STORE>_asi(h.bh_ptr + o, r); 82 } 83 84 BUS_SPACE_TRACE(t, h, ("\n")); 85} 86 87void 88bus_space_set_<RAW>multi_<NUM>(bus_space_tag_t t, bus_space_handle_t h, 89 bus_size_t o, <TYPE> v, 90NRAW: bus_size_t c) 91RAW: size_t c) 92{ 93 BUS_SPACE_ASSERT(t, h, o, <NUM>); 94 BUS_SPACE_TRACE(t, h, 95 ("bssm<NUM>(%llx + %llx, %x, %x) <- <FMT>\n", (long long)h.bh_ptr, 96 (long long)o, t-><ASI>, c, v)); 97RAW: c /= sizeof(<TYPE>); 98 99 ++c; /* Looping on "--c" is slightly faster than on "c--" */ 100 asi_set(t-><ASI>); 101 while (--c > 0) 102 <STORE>_asi(h.bh_ptr + o, v); 103} 104 105void 106bus_space_read_<RAW>region_<NUM>(bus_space_tag_t t, bus_space_handle_t h, 107 bus_size_t o, 108NRAW: <TYPE> *a, bus_size_t c) 109RAW: void *a, size_t c) 110{ 111 <TYPE> *p = a; 112 paddr_t ptr = h.bh_ptr + o; 113 114 BUS_SPACE_ASSERT(t, h, o, <NUM>); 115 BUS_SPACE_TRACE(t, h, 116 ("bsrr<NUM>(%llx + %llx, %x, %x) <- \n", (long long)h.bh_ptr, 117 (long long)o, t-><ASI>, c)); 118RAW: c /= sizeof(<TYPE>); 119 120 asi_set(t-><ASI>); 121 for (; c; p++, c--, ptr += <NUM>) { 122 <TYPE> r = <LOAD>_asi(ptr); 123 BUS_SPACE_TRACE(t, h, (" <FMT>", r)); 124 *p = r; 125 } 126 127 BUS_SPACE_TRACE(t, h, ("\n")); 128} 129 130void 131bus_space_write_<RAW>region_<NUM>(bus_space_tag_t t, bus_space_handle_t h, 132 bus_size_t o, 133NRAW: const <TYPE> *a, bus_size_t c) 134RAW: const void *a, size_t c) 135{ 136 const <TYPE> *p = a; 137 paddr_t ptr = h.bh_ptr + o; 138 139 BUS_SPACE_ASSERT(t, h, o, <NUM>); 140 BUS_SPACE_TRACE(t, h, 141 ("bswr<NUM>(%llx + %llx, %x, %x) <-", (long long)h.bh_ptr, 142 (long long)o, t-><ASI>, c)); 143RAW: c /= sizeof(<TYPE>); 144 145 asi_set(t-><ASI>); 146 for (; c; p++, c--, ptr += <NUM>) { 147 <TYPE> r = *p; 148 BUS_SPACE_TRACE(t, h, (" <FMT>", r)); 149 <STORE>_asi(ptr, r); 150 } 151 152 BUS_SPACE_TRACE(t, h, ("\n")); 153} 154 155void 156bus_space_set_<RAW>region_<NUM>(bus_space_tag_t t, bus_space_handle_t h, 157 bus_size_t o, <TYPE> v, 158NRAW: bus_size_t c) 159RAW: size_t c) 160{ 161 paddr_t ptr = h.bh_ptr + o; 162 163 BUS_SPACE_ASSERT(t, h, o, <NUM>); 164 BUS_SPACE_TRACE(t, h, 165 ("bssr<NUM>(%llx + %llx, %x, %x) <- <FMT>\n", (long long)h.bh_ptr, 166 (long long)o, t-><ASI>, c, v)); 167RAW: c /= sizeof(<TYPE>); 168 169 asi_set(t-><ASI>); 170 for (; c; c--, ptr += <NUM>) 171 <STORE>_asi(ptr, v); 172} 173 174NRAW:void 175NRAW:bus_space_copy_<RAW><NUM>(bus_space_tag_t t, bus_space_handle_t h1, 176NRAW: bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, 177NRAW: bus_size_t c) 178NRAW:{ 179NRAW: paddr_t ptr1 = h1.bh_ptr + o1; 180NRAW: paddr_t ptr2 = h2.bh_ptr + o2; 181NRAW: 182NRAW: BUS_SPACE_ASSERT(t, h1, o2, <NUM>); 183NRAW: BUS_SPACE_ASSERT(t, h2, o2, <NUM>); 184NRAW: BUS_SPACE_TRACE(t, h1, 185NRAW: ("bscr<NUM>(%llx + %llx, %llx + %llx, %x, %x) <-> \n", 186NRAW: (long long)h1.bh_ptr, (long long)o1, 187NRAW: (long long)h2.bh_ptr, (long long)o2, 188NRAW: t-><ASI>, c)); 189NRAW: 190NRAW: asi_set(t-><ASI>); 191NRAW: for (; c; c--, ptr1 += <NUM>, ptr2 += <NUM>) { 192NRAW: <TYPE> r = <LOAD>_asi(ptr2); 193NRAW: BUS_SPACE_TRACE(t, h1, (" <FMT>", r)); 194NRAW: <STORE>_asi(ptr1, r); 195NRAW: } 196NRAW: BUS_SPACE_TRACE(t, h1, ("\n")); 197NRAW:} 198 199