1 /* $NetBSD: bus_space_through.c,v 1.4 2005/12/11 12:17:33 christos Exp $ */
2
3 /*-
4 * Copyright (c) 2001 TAKEMRUA Shin. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of the project nor the names of its contributors
15 * may be used to endorse or promote products derived from this software
16 * without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 */
31
32 #include <sys/cdefs.h>
33 __KERNEL_RCSID(0, "$NetBSD: bus_space_through.c,v 1.4 2005/12/11 12:17:33 christos Exp $");
34
35 #include <sys/systm.h>
36 #include <machine/bus.h>
37
38 bus_space_protos(bs_through);
39 /*
40 * Mapping and unmapping operations.
41 */
42 int
bs_through_bs_map(bus_space_tag_t t,bus_addr_t addr,bus_size_t size,int cacheable,bus_space_handle_t * bshp)43 bs_through_bs_map(bus_space_tag_t t, bus_addr_t addr,
44 bus_size_t size, int cacheable, bus_space_handle_t *bshp)
45 {
46 return bus_space_map(t->bs_base, addr, size, cacheable, bshp);
47 }
48
49 void
bs_through_bs_unmap(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t size)50 bs_through_bs_unmap(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t size)
51 {
52 bus_space_unmap(t->bs_base, bsh, size);
53 }
54
55 int
bs_through_bs_subregion(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,bus_size_t size,bus_space_handle_t * nbshp)56 bs_through_bs_subregion(bus_space_tag_t t, bus_space_handle_t bsh,
57 bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp)
58 {
59 return bus_space_subregion(t->bs_base, bsh, offset, size, nbshp);
60 }
61
62
63 /*
64 * Allocation and deallocation operations.
65 */
66 int
bs_through_bs_alloc(bus_space_tag_t t,bus_addr_t rstart,bus_addr_t rend,bus_size_t size,bus_size_t align,bus_size_t boundary,int cacheable,bus_addr_t * addrp,bus_space_handle_t * bshp)67 bs_through_bs_alloc(bus_space_tag_t t, bus_addr_t rstart, bus_addr_t rend,
68 bus_size_t size, bus_size_t align, bus_size_t boundary, int cacheable,
69 bus_addr_t *addrp, bus_space_handle_t *bshp)
70 {
71 return bus_space_alloc(t->bs_base, rstart, rend, size, align, boundary,
72 cacheable, addrp, bshp);
73 }
74
75 void
bs_through_bs_free(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t size)76 bs_through_bs_free(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t size)
77 {
78 bus_space_free(t->bs_base, bsh, size);
79 }
80
81
82 /*
83 * Get kernel virtual address for ranges mapped BUS_SPACE_MAP_LINEAR.
84 */
85 void *
bs_through_bs_vaddr(bus_space_tag_t t,bus_space_handle_t bsh)86 bs_through_bs_vaddr(bus_space_tag_t t, bus_space_handle_t bsh)
87 {
88 return bus_space_vaddr(t->bs_base, bsh);
89 }
90
91
92 /*
93 * MMap bus space for a user application.
94 */
95 paddr_t
bs_through_bs_mmap(bus_space_tag_t t,bus_addr_t addr,off_t offset,int prot,int flags)96 bs_through_bs_mmap(bus_space_tag_t t, bus_addr_t addr, off_t offset,
97 int prot, int flags)
98 {
99 return bus_space_mmap(t->bs_base, addr, offset, prot, flags);
100 }
101
102
103 /*
104 * Bus barrier operations.
105 */
106 void
bs_through_bs_barrier(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,bus_size_t len,int flags)107 bs_through_bs_barrier(bus_space_tag_t t, bus_space_handle_t bsh,
108 bus_size_t offset, bus_size_t len, int flags)
109 {
110 bus_space_barrier(t->bs_base, bsh, offset, len, flags);
111 }
112
113
114 /*
115 * Bus probe operations.
116 */
117 int
bs_through_bs_peek(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,size_t size,void * ptr)118 bs_through_bs_peek(bus_space_tag_t t, bus_space_handle_t bsh,
119 bus_size_t offset, size_t size, void *ptr)
120 {
121 return bus_space_peek(t->bs_base, bsh, offset, size, ptr);
122 }
123
124 int
bs_through_bs_poke(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,size_t size,u_int32_t val)125 bs_through_bs_poke(bus_space_tag_t t, bus_space_handle_t bsh,
126 bus_size_t offset, size_t size, u_int32_t val)
127 {
128 return bus_space_poke(t->bs_base, bsh, offset, size, val);
129 }
130
131
132 /*
133 * Bus read (single) operations.
134 */
135 u_int8_t
bs_through_bs_r_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset)136 bs_through_bs_r_1(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset)
137 {
138 return bus_space_read_1(t->bs_base, bsh, offset);
139 }
140
141 u_int16_t
bs_through_bs_r_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset)142 bs_through_bs_r_2(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset)
143 {
144 return bus_space_read_2(t->bs_base, bsh, offset);
145 }
146
147 u_int32_t
bs_through_bs_r_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset)148 bs_through_bs_r_4(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset)
149 {
150 return bus_space_read_4(t->bs_base, bsh, offset);
151 }
152
153 u_int64_t
bs_through_bs_r_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset)154 bs_through_bs_r_8(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset)
155 {
156 return bus_space_read_8(t->bs_base, bsh, offset);
157 }
158
159
160 /*
161 * Bus read multiple operations.
162 */
163 void
bs_through_bs_rm_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int8_t * addr,bus_size_t count)164 bs_through_bs_rm_1(bus_space_tag_t t, bus_space_handle_t bsh,
165 bus_size_t offset, u_int8_t *addr, bus_size_t count)
166 {
167 bus_space_read_multi_1(t->bs_base, bsh, offset, addr, count);
168 }
169
170 void
bs_through_bs_rm_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int16_t * addr,bus_size_t count)171 bs_through_bs_rm_2(bus_space_tag_t t, bus_space_handle_t bsh,
172 bus_size_t offset, u_int16_t *addr, bus_size_t count)
173 {
174 bus_space_read_multi_2(t->bs_base, bsh, offset, addr, count);
175 }
176
177 void
bs_through_bs_rm_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int32_t * addr,bus_size_t count)178 bs_through_bs_rm_4(bus_space_tag_t t, bus_space_handle_t bsh,
179 bus_size_t offset, u_int32_t *addr, bus_size_t count)
180 {
181 bus_space_read_multi_4(t->bs_base, bsh, offset, addr, count);
182 }
183
184 void
bs_through_bs_rm_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int64_t * addr,bus_size_t count)185 bs_through_bs_rm_8(bus_space_tag_t t, bus_space_handle_t bsh,
186 bus_size_t offset, u_int64_t *addr, bus_size_t count)
187 {
188 bus_space_read_multi_8(t->bs_base, bsh, offset, addr, count);
189 }
190
191
192 /*
193 * Bus read region operations.
194 */
195 void
bs_through_bs_rr_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int8_t * addr,bus_size_t count)196 bs_through_bs_rr_1(bus_space_tag_t t, bus_space_handle_t bsh,
197 bus_size_t offset, u_int8_t *addr, bus_size_t count)
198 {
199 bus_space_read_region_1(t->bs_base, bsh, offset, addr, count);
200 }
201
202 void
bs_through_bs_rr_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int16_t * addr,bus_size_t count)203 bs_through_bs_rr_2(bus_space_tag_t t, bus_space_handle_t bsh,
204 bus_size_t offset, u_int16_t *addr, bus_size_t count)
205 {
206 bus_space_read_region_2(t->bs_base, bsh, offset, addr, count);
207 }
208
209 void
bs_through_bs_rr_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int32_t * addr,bus_size_t count)210 bs_through_bs_rr_4(bus_space_tag_t t, bus_space_handle_t bsh,
211 bus_size_t offset, u_int32_t *addr, bus_size_t count)
212 {
213 bus_space_read_region_4(t->bs_base, bsh, offset, addr, count);
214 }
215
216 void
bs_through_bs_rr_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int64_t * addr,bus_size_t count)217 bs_through_bs_rr_8(bus_space_tag_t t, bus_space_handle_t bsh,
218 bus_size_t offset, u_int64_t *addr, bus_size_t count)
219 {
220 bus_space_read_region_8(t->bs_base, bsh, offset, addr, count);
221 }
222
223
224 /*
225 * Bus write (single) operations.
226 */
227 void
bs_through_bs_w_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int8_t value)228 bs_through_bs_w_1(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
229 u_int8_t value)
230 {
231 bus_space_write_1(t->bs_base, bsh, offset, value);
232 }
233
234 void
bs_through_bs_w_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int16_t value)235 bs_through_bs_w_2(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
236 u_int16_t value)
237 {
238 bus_space_write_2(t->bs_base, bsh, offset, value);
239 }
240
241 void
bs_through_bs_w_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int32_t value)242 bs_through_bs_w_4(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
243 u_int32_t value)
244 {
245 bus_space_write_4(t->bs_base, bsh, offset, value);
246 }
247
248 void
bs_through_bs_w_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int64_t value)249 bs_through_bs_w_8(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
250 u_int64_t value)
251 {
252 bus_space_write_8(t->bs_base, bsh, offset, value);
253 }
254
255
256 /*
257 * Bus write multiple operations.
258 */
259 void
bs_through_bs_wm_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int8_t * addr,bus_size_t count)260 bs_through_bs_wm_1(bus_space_tag_t t, bus_space_handle_t bsh,
261 bus_size_t offset, const u_int8_t *addr, bus_size_t count)
262 {
263 bus_space_write_multi_1(t->bs_base, bsh, offset, addr, count);
264 }
265
266 void
bs_through_bs_wm_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int16_t * addr,bus_size_t count)267 bs_through_bs_wm_2(bus_space_tag_t t, bus_space_handle_t bsh,
268 bus_size_t offset, const u_int16_t *addr, bus_size_t count)
269 {
270 bus_space_write_multi_2(t->bs_base, bsh, offset, addr, count);
271 }
272
273 void
bs_through_bs_wm_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int32_t * addr,bus_size_t count)274 bs_through_bs_wm_4(bus_space_tag_t t, bus_space_handle_t bsh,
275 bus_size_t offset, const u_int32_t *addr, bus_size_t count)
276 {
277 bus_space_write_multi_4(t->bs_base, bsh, offset, addr, count);
278 }
279
280 void
bs_through_bs_wm_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int64_t * addr,bus_size_t count)281 bs_through_bs_wm_8(bus_space_tag_t t, bus_space_handle_t bsh,
282 bus_size_t offset, const u_int64_t *addr, bus_size_t count)
283 {
284 bus_space_write_multi_8(t->bs_base, bsh, offset, addr, count);
285 }
286
287
288 /*
289 * Bus write region operations.
290 */
291 void
bs_through_bs_wr_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int8_t * addr,bus_size_t count)292 bs_through_bs_wr_1(bus_space_tag_t t, bus_space_handle_t bsh,
293 bus_size_t offset, const u_int8_t *addr, bus_size_t count)
294 {
295 bus_space_write_region_1(t->bs_base, bsh, offset, addr, count);
296 }
297
298 void
bs_through_bs_wr_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int16_t * addr,bus_size_t count)299 bs_through_bs_wr_2(bus_space_tag_t t, bus_space_handle_t bsh,
300 bus_size_t offset, const u_int16_t *addr, bus_size_t count)
301 {
302 bus_space_write_region_2(t->bs_base, bsh, offset, addr, count);
303 }
304
305 void
bs_through_bs_wr_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int32_t * addr,bus_size_t count)306 bs_through_bs_wr_4(bus_space_tag_t t, bus_space_handle_t bsh,
307 bus_size_t offset, const u_int32_t *addr, bus_size_t count)
308 {
309 bus_space_write_region_4(t->bs_base, bsh, offset, addr, count);
310 }
311
312 void
bs_through_bs_wr_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int64_t * addr,bus_size_t count)313 bs_through_bs_wr_8(bus_space_tag_t t, bus_space_handle_t bsh,
314 bus_size_t offset, const u_int64_t *addr, bus_size_t count)
315 {
316 bus_space_write_region_8(t->bs_base, bsh, offset, addr, count);
317 }
318
319 #ifdef BUS_SPACE_HAS_REAL_STREAM_METHODS
320 /*
321 * Bus read (single) operations.
322 */
323 u_int8_t
bs_through_bs_rs_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset)324 bs_through_bs_rs_1(bus_space_tag_t t, bus_space_handle_t bsh,
325 bus_size_t offset)
326 {
327 return bus_space_read_stream_1(t->bs_base, bsh, offset);
328 }
329
330 u_int16_t
bs_through_bs_rs_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset)331 bs_through_bs_rs_2(bus_space_tag_t t, bus_space_handle_t bsh,
332 bus_size_t offset)
333 {
334 return bus_space_read_stream_2(t->bs_base, bsh, offset);
335 }
336
337 u_int32_t
bs_through_bs_rs_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset)338 bs_through_bs_rs_4(bus_space_tag_t t, bus_space_handle_t bsh,
339 bus_size_t offset)
340 {
341 return bus_space_read_stream_4(t->bs_base, bsh, offset);
342 }
343
344 u_int64_t
bs_through_bs_rs_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset)345 bs_through_bs_rs_8(bus_space_tag_t t, bus_space_handle_t bsh,
346 bus_size_t offset)
347 {
348 return bus_space_read_stream_8(t->bs_base, bsh, offset);
349 }
350
351
352 /*
353 * Bus read multiple operations.
354 */
355 void
bs_through_bs_rms_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int8_t * addr,bus_size_t count)356 bs_through_bs_rms_1(bus_space_tag_t t, bus_space_handle_t bsh,
357 bus_size_t offset, u_int8_t *addr, bus_size_t count)
358 {
359 bus_space_read_multi_stream_1(t->bs_base, bsh, offset, addr, count);
360 }
361
362 void
bs_through_bs_rms_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int16_t * addr,bus_size_t count)363 bs_through_bs_rms_2(bus_space_tag_t t, bus_space_handle_t bsh,
364 bus_size_t offset, u_int16_t *addr, bus_size_t count)
365 {
366 bus_space_read_multi_stream_2(t->bs_base, bsh, offset, addr, count);
367 }
368
369 void
bs_through_bs_rms_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int32_t * addr,bus_size_t count)370 bs_through_bs_rms_4(bus_space_tag_t t, bus_space_handle_t bsh,
371 bus_size_t offset, u_int32_t *addr, bus_size_t count)
372 {
373 bus_space_read_multi_stream_4(t->bs_base, bsh, offset, addr, count);
374 }
375
376 void
bs_through_bs_rms_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int64_t * addr,bus_size_t count)377 bs_through_bs_rms_8(bus_space_tag_t t, bus_space_handle_t bsh,
378 bus_size_t offset, u_int64_t *addr, bus_size_t count)
379 {
380 bus_space_read_multi_stream_8(t->bs_base, bsh, offset, addr, count);
381 }
382
383
384 /*
385 * Bus read region operations.
386 */
387 void
bs_through_bs_rrs_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int8_t * addr,bus_size_t count)388 bs_through_bs_rrs_1(bus_space_tag_t t, bus_space_handle_t bsh,
389 bus_size_t offset, u_int8_t *addr, bus_size_t count)
390 {
391 bus_space_read_reagion_stream_1(t->bs_base, bsh, offset, addr, count);
392 }
393
394 void
bs_through_bs_rrs_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int16_t * addr,bus_size_t count)395 bs_through_bs_rrs_2(bus_space_tag_t t, bus_space_handle_t bsh,
396 bus_size_t offset, u_int16_t *addr, bus_size_t count)
397 {
398 bus_space_read_reagion_stream_2(t->bs_base, bsh, offset, addr, count);
399 }
400
401 void
bs_through_bs_rrs_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int32_t * addr,bus_size_t count)402 bs_through_bs_rrs_4(bus_space_tag_t t, bus_space_handle_t bsh,
403 bus_size_t offset, u_int32_t *addr, bus_size_t count)
404 {
405 bus_space_read_reagion_stream_4(t->bs_base, bsh, offset, addr, count);
406 }
407
408 void
bs_through_bs_rrs_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int64_t * addr,bus_size_t count)409 bs_through_bs_rrs_8(bus_space_tag_t t, bus_space_handle_t bsh,
410 bus_size_t offset, u_int64_t *addr, bus_size_t count)
411 {
412 bus_space_read_reagion_stream_8(t->bs_base, bsh, offset, addr, count);
413 }
414
415
416 /*
417 * Bus write (single) operations.
418 */
419 void
bs_through_bs_ws_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int8_t value)420 bs_through_bs_ws_1(bus_space_tag_t t, bus_space_handle_t bsh,
421 bus_size_t offset, u_int8_t value)
422 {
423 bus_space_write_stream_1(t->bs_base, bsh, offset, value);
424 }
425
426 void
bs_through_bs_ws_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int16_t value)427 bs_through_bs_ws_2(bus_space_tag_t t, bus_space_handle_t bsh,
428 bus_size_t offset, u_int16_t value)
429 {
430 bus_space_write_stream_2(t->bs_base, bsh, offset, value);
431 }
432
433 void
bs_through_bs_ws_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int32_t value)434 bs_through_bs_ws_4(bus_space_tag_t t, bus_space_handle_t bsh,
435 bus_size_t offset, u_int32_t value)
436 {
437 bus_space_write_stream_4(t->bs_base, bsh, offset, value);
438 }
439
440 void
bs_through_bs_ws_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int64_t value)441 bs_through_bs_ws_8(bus_space_tag_t t, bus_space_handle_t bsh,
442 bus_size_t offset, u_int64_t value)
443 {
444 bus_space_write_stream_8(t->bs_base, bsh, offset, value);
445 }
446
447
448 /*
449 * Bus write multiple operations.
450 */
451 void
bs_through_bs_wms_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int8_t * addr,bus_size_t count)452 bs_through_bs_wms_1(bus_space_tag_t t, bus_space_handle_t bsh,
453 bus_size_t offset, const u_int8_t *addr, bus_size_t count)
454 {
455 bus_space_write_multi_stream_1(t->bs_base, bsh, offset, addr, count);
456 }
457
458 void
bs_through_bs_wms_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int16_t * addr,bus_size_t count)459 bs_through_bs_wms_2(bus_space_tag_t t, bus_space_handle_t bsh,
460 bus_size_t offset, const u_int16_t *addr, bus_size_t count)
461 {
462 bus_space_write_multi_stream_2(t->bs_base, bsh, offset, addr, count);
463 }
464
465 void
bs_through_bs_wms_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int32_t * addr,bus_size_t count)466 bs_through_bs_wms_4(bus_space_tag_t t, bus_space_handle_t bsh,
467 bus_size_t offset, const u_int32_t *addr, bus_size_t count)
468 {
469 bus_space_write_multi_stream_4(t->bs_base, bsh, offset, addr, count);
470 }
471
472 void
bs_through_bs_wms_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int64_t * addr,bus_size_t count)473 bs_through_bs_wms_8(bus_space_tag_t t, bus_space_handle_t bsh,
474 bus_size_t offset, const u_int64_t *addr, bus_size_t count)
475 {
476 bus_space_write_multi_stream_8(t->bs_base, bsh, offset, addr, count);
477 }
478
479
480 /*
481 * Bus write region operations.
482 */
483 void
bs_through_bs_wrs_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int8_t * addr,bus_size_t count)484 bs_through_bs_wrs_1(bus_space_tag_t t, bus_space_handle_t bsh,
485 bus_size_t offset, const u_int8_t *addr, bus_size_t count)
486 {
487 bus_space_write_region_stream_1(t->bs_base, bsh, offset, addr, count);
488 }
489
490 void
bs_through_bs_wrs_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int16_t * addr,bus_size_t count)491 bs_through_bs_wrs_2(bus_space_tag_t t, bus_space_handle_t bsh,
492 bus_size_t offset, const u_int16_t *addr, bus_size_t count)
493 {
494 bus_space_write_region_stream_2(t->bs_base, bsh, offset, addr, count);
495 }
496
497 void
bs_through_bs_wrs_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int32_t * addr,bus_size_t count)498 bs_through_bs_wrs_4(bus_space_tag_t t, bus_space_handle_t bsh,
499 bus_size_t offset, const u_int32_t *addr, bus_size_t count)
500 {
501 bus_space_write_region_stream_4(t->bs_base, bsh, offset, addr, count);
502 }
503
504 void
bs_through_bs_wrs_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,const u_int64_t * addr,bus_size_t count)505 bs_through_bs_wrs_8(bus_space_tag_t t, bus_space_handle_t bsh,
506 bus_size_t offset, const u_int64_t *addr, bus_size_t count)
507 {
508 bus_space_write_region_stream_8(t->bs_base, bsh, offset, addr, count);
509 }
510 #endif /* ! BUS_SPACE_HAS_REAL_STREAM_METHODS */
511
512
513 /*
514 * Set multiple operations.
515 */
516 void
bs_through_bs_sm_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int8_t value,bus_size_t count)517 bs_through_bs_sm_1(bus_space_tag_t t, bus_space_handle_t bsh,
518 bus_size_t offset, u_int8_t value, bus_size_t count)
519 {
520 bus_space_set_multi_1(t->bs_base, bsh, offset, value, count);
521 }
522
523 void
bs_through_bs_sm_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int16_t value,bus_size_t count)524 bs_through_bs_sm_2(bus_space_tag_t t, bus_space_handle_t bsh,
525 bus_size_t offset, u_int16_t value, bus_size_t count)
526 {
527 bus_space_set_multi_2(t->bs_base, bsh, offset, value, count);
528 }
529
530 void
bs_through_bs_sm_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int32_t value,bus_size_t count)531 bs_through_bs_sm_4(bus_space_tag_t t, bus_space_handle_t bsh,
532 bus_size_t offset, u_int32_t value, bus_size_t count)
533 {
534 bus_space_set_multi_4(t->bs_base, bsh, offset, value, count);
535 }
536
537 void
bs_through_bs_sm_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int64_t value,bus_size_t count)538 bs_through_bs_sm_8(bus_space_tag_t t, bus_space_handle_t bsh,
539 bus_size_t offset, u_int64_t value, bus_size_t count)
540 {
541 bus_space_set_multi_8(t->bs_base, bsh, offset, value, count);
542 }
543
544 /*
545 * Set region operations.
546 */
547 void
bs_through_bs_sr_1(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int8_t value,bus_size_t count)548 bs_through_bs_sr_1(bus_space_tag_t t, bus_space_handle_t bsh,
549 bus_size_t offset, u_int8_t value, bus_size_t count)
550 {
551 bus_space_set_region_1(t->bs_base, bsh, offset, value, count);
552 }
553
554 void
bs_through_bs_sr_2(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int16_t value,bus_size_t count)555 bs_through_bs_sr_2(bus_space_tag_t t, bus_space_handle_t bsh,
556 bus_size_t offset, u_int16_t value, bus_size_t count)
557 {
558 bus_space_set_region_2(t->bs_base, bsh, offset, value, count);
559 }
560
561 void
bs_through_bs_sr_4(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int32_t value,bus_size_t count)562 bs_through_bs_sr_4(bus_space_tag_t t, bus_space_handle_t bsh,
563 bus_size_t offset, u_int32_t value, bus_size_t count)
564 {
565 bus_space_set_region_4(t->bs_base, bsh, offset, value, count);
566 }
567
568 void
bs_through_bs_sr_8(bus_space_tag_t t,bus_space_handle_t bsh,bus_size_t offset,u_int64_t value,bus_size_t count)569 bs_through_bs_sr_8(bus_space_tag_t t, bus_space_handle_t bsh,
570 bus_size_t offset, u_int64_t value, bus_size_t count)
571 {
572 bus_space_set_region_8(t->bs_base, bsh, offset, value, count);
573 }
574
575
576 /*
577 * Copy operations.
578 */
579 void
bs_through_bs_c_1(bus_space_tag_t t,bus_space_handle_t bsh1,bus_size_t offset1,bus_space_handle_t bsh2,bus_size_t offset2,bus_size_t n)580 bs_through_bs_c_1(bus_space_tag_t t, bus_space_handle_t bsh1,
581 bus_size_t offset1, bus_space_handle_t bsh2,
582 bus_size_t offset2, bus_size_t n)
583 {
584 bus_space_copy_region_1(t->bs_base, bsh1, offset1, bsh2, offset2, n);
585 }
586
587 void
bs_through_bs_c_2(bus_space_tag_t t,bus_space_handle_t bsh1,bus_size_t offset1,bus_space_handle_t bsh2,bus_size_t offset2,bus_size_t n)588 bs_through_bs_c_2(bus_space_tag_t t, bus_space_handle_t bsh1,
589 bus_size_t offset1, bus_space_handle_t bsh2,
590 bus_size_t offset2, bus_size_t n)
591 {
592 bus_space_copy_region_2(t->bs_base, bsh1, offset1, bsh2, offset2, n);
593 }
594
595 void
bs_through_bs_c_4(bus_space_tag_t t,bus_space_handle_t bsh1,bus_size_t offset1,bus_space_handle_t bsh2,bus_size_t offset2,bus_size_t n)596 bs_through_bs_c_4(bus_space_tag_t t, bus_space_handle_t bsh1,
597 bus_size_t offset1, bus_space_handle_t bsh2,
598 bus_size_t offset2, bus_size_t n)
599 {
600 bus_space_copy_region_4(t->bs_base, bsh1, offset1, bsh2, offset2, n);
601 }
602
603 void
bs_through_bs_c_8(bus_space_tag_t t,bus_space_handle_t bsh1,bus_size_t offset1,bus_space_handle_t bsh2,bus_size_t offset2,bus_size_t n)604 bs_through_bs_c_8(bus_space_tag_t t, bus_space_handle_t bsh1,
605 bus_size_t offset1, bus_space_handle_t bsh2,
606 bus_size_t offset2, bus_size_t n)
607 {
608 bus_space_copy_region_8(t->bs_base, bsh1, offset1, bsh2, offset2, n);
609 }
610