1198956Srrs/*-
2198956Srrs * Copyright (c) 2009 RMI Corporation
3198956Srrs * All rights reserved.
4198956Srrs *
5198956Srrs * Redistribution and use in source and binary forms, with or without
6198956Srrs * modification, are permitted provided that the following conditions
7198956Srrs * are met:
8198956Srrs * 1. Redistributions of source code must retain the above copyright
9198956Srrs *    notice, this list of conditions and the following disclaimer.
10198956Srrs * 2. Redistributions in binary form must reproduce the above copyright
11198956Srrs *    notice, this list of conditions and the following disclaimer in the
12198956Srrs *    documentation and/or other materials provided with the distribution.
13198956Srrs *
14198956Srrs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15198956Srrs * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16198956Srrs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17198956Srrs * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18198956Srrs * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19198956Srrs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20198956Srrs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21198956Srrs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22198956Srrs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23198956Srrs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24198956Srrs * SUCH DAMAGE.
25198956Srrs *
26198956Srrs * $FreeBSD$
27198956Srrs */
28198956Srrs#include <sys/cdefs.h>
29198956Srrs__FBSDID("$FreeBSD$");
30198956Srrs
31198956Srrs#include <sys/param.h>
32198956Srrs#include <sys/systm.h>
33198956Srrs#include <sys/bus.h>
34198956Srrs#include <sys/kernel.h>
35204131Srrs#include <sys/endian.h>
36198956Srrs#include <sys/malloc.h>
37198956Srrs#include <sys/ktr.h>
38198956Srrs
39198956Srrs#include <vm/vm.h>
40198956Srrs#include <vm/pmap.h>
41198956Srrs#include <vm/vm_kern.h>
42198956Srrs#include <vm/vm_extern.h>
43198956Srrs
44198956Srrs#include <machine/bus.h>
45198956Srrs#include <machine/cache.h>
46198956Srrs
47198957Srrsstatic int
48198957Srrsrmi_bus_space_map(void *t, bus_addr_t addr,
49198957Srrs    bus_size_t size, int flags,
50198957Srrs    bus_space_handle_t * bshp);
51198956Srrs
52198957Srrsstatic void
53198957Srrsrmi_bus_space_unmap(void *t, bus_space_handle_t bsh,
54198957Srrs    bus_size_t size);
55198956Srrs
56198957Srrsstatic int
57198957Srrsrmi_bus_space_subregion(void *t,
58198957Srrs    bus_space_handle_t bsh,
59198957Srrs    bus_size_t offset, bus_size_t size,
60198957Srrs    bus_space_handle_t * nbshp);
61198956Srrs
62198957Srrsstatic u_int8_t
63198957Srrsrmi_bus_space_read_1(void *t,
64198957Srrs    bus_space_handle_t handle,
65198957Srrs    bus_size_t offset);
66198956Srrs
67198957Srrsstatic u_int16_t
68198957Srrsrmi_bus_space_read_2(void *t,
69198957Srrs    bus_space_handle_t handle,
70198957Srrs    bus_size_t offset);
71198956Srrs
72198957Srrsstatic u_int32_t
73198957Srrsrmi_bus_space_read_4(void *t,
74198957Srrs    bus_space_handle_t handle,
75198957Srrs    bus_size_t offset);
76198956Srrs
77198957Srrsstatic void
78198957Srrsrmi_bus_space_read_multi_1(void *t,
79198957Srrs    bus_space_handle_t handle,
80198957Srrs    bus_size_t offset, u_int8_t * addr,
81198957Srrs    size_t count);
82198956Srrs
83198957Srrsstatic void
84198957Srrsrmi_bus_space_read_multi_2(void *t,
85198957Srrs    bus_space_handle_t handle,
86198957Srrs    bus_size_t offset, u_int16_t * addr,
87198957Srrs    size_t count);
88198956Srrs
89198957Srrsstatic void
90198957Srrsrmi_bus_space_read_multi_4(void *t,
91198957Srrs    bus_space_handle_t handle,
92198957Srrs    bus_size_t offset, u_int32_t * addr,
93198957Srrs    size_t count);
94198956Srrs
95198957Srrsstatic void
96198957Srrsrmi_bus_space_read_region_1(void *t,
97198957Srrs    bus_space_handle_t bsh,
98198957Srrs    bus_size_t offset, u_int8_t * addr,
99198957Srrs    size_t count);
100198956Srrs
101198957Srrsstatic void
102198957Srrsrmi_bus_space_read_region_2(void *t,
103198957Srrs    bus_space_handle_t bsh,
104198957Srrs    bus_size_t offset, u_int16_t * addr,
105198957Srrs    size_t count);
106198956Srrs
107198957Srrsstatic void
108198957Srrsrmi_bus_space_read_region_4(void *t,
109198957Srrs    bus_space_handle_t bsh,
110198957Srrs    bus_size_t offset, u_int32_t * addr,
111198957Srrs    size_t count);
112198956Srrs
113198957Srrsstatic void
114198957Srrsrmi_bus_space_write_1(void *t,
115198957Srrs    bus_space_handle_t handle,
116198957Srrs    bus_size_t offset, u_int8_t value);
117198956Srrs
118198957Srrsstatic void
119198957Srrsrmi_bus_space_write_2(void *t,
120198957Srrs    bus_space_handle_t handle,
121198957Srrs    bus_size_t offset, u_int16_t value);
122198956Srrs
123198957Srrsstatic void
124198957Srrsrmi_bus_space_write_4(void *t,
125198957Srrs    bus_space_handle_t handle,
126198957Srrs    bus_size_t offset, u_int32_t value);
127198956Srrs
128198957Srrsstatic void
129198957Srrsrmi_bus_space_write_multi_1(void *t,
130198957Srrs    bus_space_handle_t handle,
131198957Srrs    bus_size_t offset,
132198957Srrs    const u_int8_t * addr,
133198957Srrs    size_t count);
134204131Srrs
135198957Srrsstatic void
136198957Srrsrmi_bus_space_write_multi_2(void *t,
137198957Srrs    bus_space_handle_t handle,
138198957Srrs    bus_size_t offset,
139198957Srrs    const u_int16_t * addr,
140198957Srrs    size_t count);
141198956Srrs
142198957Srrsstatic void
143198957Srrsrmi_bus_space_write_multi_4(void *t,
144198957Srrs    bus_space_handle_t handle,
145198957Srrs    bus_size_t offset,
146198957Srrs    const u_int32_t * addr,
147198957Srrs    size_t count);
148198956Srrs
149198957Srrsstatic void
150198957Srrsrmi_bus_space_write_region_2(void *t,
151198957Srrs    bus_space_handle_t bsh,
152198957Srrs    bus_size_t offset,
153198957Srrs    const u_int16_t * addr,
154198957Srrs    size_t count);
155198956Srrs
156198957Srrsstatic void
157198957Srrsrmi_bus_space_write_region_4(void *t,
158198957Srrs    bus_space_handle_t bsh,
159198957Srrs    bus_size_t offset,
160198957Srrs    const u_int32_t * addr,
161198957Srrs    size_t count);
162198956Srrs
163198956Srrs
164198957Srrsstatic void
165198957Srrsrmi_bus_space_set_region_2(void *t,
166198957Srrs    bus_space_handle_t bsh,
167198957Srrs    bus_size_t offset, u_int16_t value,
168198957Srrs    size_t count);
169198957Srrsstatic void
170198957Srrsrmi_bus_space_set_region_4(void *t,
171198957Srrs    bus_space_handle_t bsh,
172198957Srrs    bus_size_t offset, u_int32_t value,
173198957Srrs    size_t count);
174198956Srrs
175198957Srrsstatic void
176198957Srrsrmi_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused,
177198957Srrs    bus_size_t offset __unused, bus_size_t len __unused, int flags);
178198956Srrs
179198957Srrsstatic void
180198957Srrsrmi_bus_space_copy_region_2(void *t,
181198957Srrs    bus_space_handle_t bsh1,
182198957Srrs    bus_size_t off1,
183198957Srrs    bus_space_handle_t bsh2,
184198957Srrs    bus_size_t off2, size_t count);
185198956Srrs
186198957Srrsu_int8_t
187198957Srrsrmi_bus_space_read_stream_1(void *t, bus_space_handle_t handle,
188198957Srrs    bus_size_t offset);
189198956Srrs
190198957Srrsstatic u_int16_t
191198957Srrsrmi_bus_space_read_stream_2(void *t, bus_space_handle_t handle,
192198957Srrs    bus_size_t offset);
193198956Srrs
194198957Srrsstatic u_int32_t
195198957Srrsrmi_bus_space_read_stream_4(void *t, bus_space_handle_t handle,
196198957Srrs    bus_size_t offset);
197198957Srrsstatic void
198198957Srrsrmi_bus_space_read_multi_stream_1(void *t,
199198957Srrs    bus_space_handle_t handle,
200198957Srrs    bus_size_t offset, u_int8_t * addr,
201198957Srrs    size_t count);
202198956Srrs
203198957Srrsstatic void
204198957Srrsrmi_bus_space_read_multi_stream_2(void *t,
205198957Srrs    bus_space_handle_t handle,
206198957Srrs    bus_size_t offset, u_int16_t * addr,
207198957Srrs    size_t count);
208198956Srrs
209198957Srrsstatic void
210198957Srrsrmi_bus_space_read_multi_stream_4(void *t,
211198957Srrs    bus_space_handle_t handle,
212198957Srrs    bus_size_t offset, u_int32_t * addr,
213198957Srrs    size_t count);
214198956Srrs
215198957Srrsvoid
216198957Srrsrmi_bus_space_write_stream_1(void *t, bus_space_handle_t bsh,
217198957Srrs    bus_size_t offset, u_int8_t value);
218198957Srrsstatic void
219198957Srrsrmi_bus_space_write_stream_2(void *t, bus_space_handle_t handle,
220198957Srrs    bus_size_t offset, u_int16_t value);
221198956Srrs
222198957Srrsstatic void
223198957Srrsrmi_bus_space_write_stream_4(void *t, bus_space_handle_t handle,
224198957Srrs    bus_size_t offset, u_int32_t value);
225198956Srrs
226198957Srrsstatic void
227198957Srrsrmi_bus_space_write_multi_stream_1(void *t,
228198957Srrs    bus_space_handle_t handle,
229198957Srrs    bus_size_t offset,
230198957Srrs    const u_int8_t * addr,
231198957Srrs    size_t count);
232198957Srrsstatic void
233198957Srrsrmi_bus_space_write_multi_stream_2(void *t,
234198957Srrs    bus_space_handle_t handle,
235198957Srrs    bus_size_t offset,
236198957Srrs    const u_int16_t * addr,
237198957Srrs    size_t count);
238198956Srrs
239198957Srrsstatic void
240198957Srrsrmi_bus_space_write_multi_stream_4(void *t,
241198957Srrs    bus_space_handle_t handle,
242198957Srrs    bus_size_t offset,
243198957Srrs    const u_int32_t * addr,
244198957Srrs    size_t count);
245198956Srrs
246204131Srrs#define TODO() printf("XLR memory bus space function '%s' unimplemented\n", __func__)
247204131Srrs
248198956Srrsstatic struct bus_space local_rmi_bus_space = {
249198956Srrs	/* cookie */
250198957Srrs	(void *)0,
251198956Srrs
252198956Srrs	/* mapping/unmapping */
253198956Srrs	rmi_bus_space_map,
254198956Srrs	rmi_bus_space_unmap,
255198956Srrs	rmi_bus_space_subregion,
256198956Srrs
257198956Srrs	/* allocation/deallocation */
258198956Srrs	NULL,
259198956Srrs	NULL,
260198956Srrs
261198956Srrs	/* barrier */
262198957Srrs	rmi_bus_space_barrier,
263198956Srrs
264198956Srrs	/* read (single) */
265198956Srrs	rmi_bus_space_read_1,
266198956Srrs	rmi_bus_space_read_2,
267198956Srrs	rmi_bus_space_read_4,
268198956Srrs	NULL,
269198956Srrs
270198956Srrs	/* read multiple */
271198956Srrs	rmi_bus_space_read_multi_1,
272198956Srrs	rmi_bus_space_read_multi_2,
273198956Srrs	rmi_bus_space_read_multi_4,
274198956Srrs	NULL,
275198956Srrs
276198956Srrs	/* read region */
277198956Srrs	rmi_bus_space_read_region_1,
278198956Srrs	rmi_bus_space_read_region_2,
279198956Srrs	rmi_bus_space_read_region_4,
280198956Srrs	NULL,
281198956Srrs
282198956Srrs	/* write (single) */
283198956Srrs	rmi_bus_space_write_1,
284198956Srrs	rmi_bus_space_write_2,
285198956Srrs	rmi_bus_space_write_4,
286198956Srrs	NULL,
287198956Srrs
288198956Srrs	/* write multiple */
289198956Srrs	rmi_bus_space_write_multi_1,
290198956Srrs	rmi_bus_space_write_multi_2,
291198956Srrs	rmi_bus_space_write_multi_4,
292198956Srrs	NULL,
293198956Srrs
294198956Srrs	/* write region */
295198956Srrs	NULL,
296198956Srrs	rmi_bus_space_write_region_2,
297198956Srrs	rmi_bus_space_write_region_4,
298198956Srrs	NULL,
299198956Srrs
300198956Srrs	/* set multiple */
301198956Srrs	NULL,
302198956Srrs	NULL,
303198956Srrs	NULL,
304198956Srrs	NULL,
305198956Srrs
306198956Srrs	/* set region */
307198956Srrs	NULL,
308198956Srrs	rmi_bus_space_set_region_2,
309198956Srrs	rmi_bus_space_set_region_4,
310198956Srrs	NULL,
311198956Srrs
312198956Srrs	/* copy */
313198956Srrs	NULL,
314198956Srrs	rmi_bus_space_copy_region_2,
315198956Srrs	NULL,
316198956Srrs	NULL,
317198956Srrs
318198956Srrs	/* read (single) stream */
319198956Srrs	rmi_bus_space_read_stream_1,
320198956Srrs	rmi_bus_space_read_stream_2,
321198956Srrs	rmi_bus_space_read_stream_4,
322198956Srrs	NULL,
323198956Srrs
324198956Srrs	/* read multiple stream */
325198956Srrs	rmi_bus_space_read_multi_stream_1,
326198956Srrs	rmi_bus_space_read_multi_stream_2,
327198956Srrs	rmi_bus_space_read_multi_stream_4,
328198956Srrs	NULL,
329198956Srrs
330198956Srrs	/* read region stream */
331198956Srrs	rmi_bus_space_read_region_1,
332198956Srrs	rmi_bus_space_read_region_2,
333198956Srrs	rmi_bus_space_read_region_4,
334198956Srrs	NULL,
335198956Srrs
336198956Srrs	/* write (single) stream */
337198956Srrs	rmi_bus_space_write_stream_1,
338198956Srrs	rmi_bus_space_write_stream_2,
339198956Srrs	rmi_bus_space_write_stream_4,
340198956Srrs	NULL,
341198956Srrs
342198956Srrs	/* write multiple stream */
343198956Srrs	rmi_bus_space_write_multi_stream_1,
344198956Srrs	rmi_bus_space_write_multi_stream_2,
345198956Srrs	rmi_bus_space_write_multi_stream_4,
346198956Srrs	NULL,
347198956Srrs
348198956Srrs	/* write region stream */
349198956Srrs	NULL,
350198956Srrs	rmi_bus_space_write_region_2,
351198956Srrs	rmi_bus_space_write_region_4,
352198956Srrs	NULL,
353198956Srrs};
354198956Srrs
355198956Srrs/* generic bus_space tag */
356198956Srrsbus_space_tag_t rmi_bus_space = &local_rmi_bus_space;
357198956Srrs
358198956Srrs/*
359198956Srrs * Map a region of device bus space into CPU virtual address space.
360198956Srrs */
361198956Srrsstatic int
362198956Srrsrmi_bus_space_map(void *t __unused, bus_addr_t addr,
363198957Srrs    bus_size_t size __unused, int flags __unused,
364198957Srrs    bus_space_handle_t * bshp)
365198956Srrs{
366198956Srrs
367198956Srrs	*bshp = addr;
368198956Srrs	return (0);
369198956Srrs}
370198956Srrs
371198956Srrs/*
372198956Srrs * Unmap a region of device bus space.
373198956Srrs */
374198956Srrsstatic void
375198956Srrsrmi_bus_space_unmap(void *t __unused, bus_space_handle_t bsh __unused,
376198957Srrs    bus_size_t size __unused)
377198956Srrs{
378198956Srrs}
379198956Srrs
380198956Srrs/*
381198956Srrs * Get a new handle for a subregion of an already-mapped area of bus space.
382198956Srrs */
383198956Srrs
384198956Srrsstatic int
385198956Srrsrmi_bus_space_subregion(void *t __unused, bus_space_handle_t bsh,
386198957Srrs    bus_size_t offset, bus_size_t size __unused,
387198957Srrs    bus_space_handle_t * nbshp)
388198956Srrs{
389198956Srrs	*nbshp = bsh + offset;
390198956Srrs	return (0);
391198956Srrs}
392198956Srrs
393198956Srrs/*
394198956Srrs * Read a 1, 2, 4, or 8 byte quantity from bus space
395198956Srrs * described by tag/handle/offset.
396198956Srrs */
397198956Srrs
398198956Srrsstatic u_int8_t
399198956Srrsrmi_bus_space_read_1(void *tag, bus_space_handle_t handle,
400198957Srrs    bus_size_t offset)
401198956Srrs{
402204131Srrs	return (u_int8_t) (*(volatile u_int32_t *)(handle + offset));
403198956Srrs}
404198956Srrs
405198956Srrsstatic u_int16_t
406198956Srrsrmi_bus_space_read_2(void *tag, bus_space_handle_t handle,
407198957Srrs    bus_size_t offset)
408198956Srrs{
409204131Srrs	return (u_int16_t)(*(volatile u_int32_t *)(handle + offset));
410198956Srrs}
411198956Srrs
412198956Srrsstatic u_int32_t
413198956Srrsrmi_bus_space_read_4(void *tag, bus_space_handle_t handle,
414198957Srrs    bus_size_t offset)
415198956Srrs{
416204131Srrs	return (*(volatile u_int32_t *)(handle + offset));
417198956Srrs}
418198956Srrs
419198956Srrs
420198956Srrs/*
421198956Srrs * Read `count' 1, 2, 4, or 8 byte quantities from bus space
422198956Srrs * described by tag/handle/offset and copy into buffer provided.
423198956Srrs */
424198956Srrsstatic void
425198956Srrsrmi_bus_space_read_multi_1(void *tag, bus_space_handle_t handle,
426198957Srrs    bus_size_t offset, u_int8_t * addr, size_t count)
427198956Srrs{
428204131Srrs	TODO();
429198956Srrs}
430198956Srrs
431198956Srrsstatic void
432198956Srrsrmi_bus_space_read_multi_2(void *tag, bus_space_handle_t handle,
433198957Srrs    bus_size_t offset, u_int16_t * addr, size_t count)
434198956Srrs{
435204131Srrs	TODO();
436198956Srrs}
437198956Srrs
438198956Srrsstatic void
439198956Srrsrmi_bus_space_read_multi_4(void *tag, bus_space_handle_t handle,
440198957Srrs    bus_size_t offset, u_int32_t * addr, size_t count)
441198956Srrs{
442204131Srrs	TODO();
443198956Srrs}
444198956Srrs
445198956Srrs/*
446198956Srrs * Write the 1, 2, 4, or 8 byte value `value' to bus space
447198956Srrs * described by tag/handle/offset.
448198956Srrs */
449198956Srrs
450198956Srrsstatic void
451198956Srrsrmi_bus_space_write_1(void *tag, bus_space_handle_t handle,
452198957Srrs    bus_size_t offset, u_int8_t value)
453198956Srrs{
454204131Srrs	*(volatile u_int32_t *)(handle + offset) =  (u_int32_t)value;
455198956Srrs}
456198956Srrs
457198956Srrsstatic void
458198956Srrsrmi_bus_space_write_2(void *tag, bus_space_handle_t handle,
459198957Srrs    bus_size_t offset, u_int16_t value)
460198956Srrs{
461204131Srrs	*(volatile u_int32_t *)(handle + offset) = (u_int32_t)value;
462198956Srrs}
463198956Srrs
464198956Srrsstatic void
465198956Srrsrmi_bus_space_write_4(void *tag, bus_space_handle_t handle,
466198957Srrs    bus_size_t offset, u_int32_t value)
467198956Srrs{
468204131Srrs	*(volatile u_int32_t *)(handle + offset) = value;
469198956Srrs}
470198956Srrs
471198956Srrs
472198956Srrs/*
473198956Srrs * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
474198956Srrs * provided to bus space described by tag/handle/offset.
475198956Srrs */
476198956Srrs
477198956Srrs
478198956Srrsstatic void
479198956Srrsrmi_bus_space_write_multi_1(void *tag, bus_space_handle_t handle,
480198957Srrs    bus_size_t offset, const u_int8_t * addr, size_t count)
481198956Srrs{
482204131Srrs	TODO();
483198956Srrs}
484198956Srrs
485198956Srrsstatic void
486198956Srrsrmi_bus_space_write_multi_2(void *tag, bus_space_handle_t handle,
487198957Srrs    bus_size_t offset, const u_int16_t * addr, size_t count)
488198956Srrs{
489204131Srrs	TODO();
490198956Srrs}
491198956Srrs
492198956Srrsstatic void
493198956Srrsrmi_bus_space_write_multi_4(void *tag, bus_space_handle_t handle,
494198957Srrs    bus_size_t offset, const u_int32_t * addr, size_t count)
495198956Srrs{
496204131Srrs	TODO();
497198956Srrs}
498198956Srrs
499198956Srrs/*
500198956Srrs * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described
501198956Srrs * by tag/handle starting at `offset'.
502198956Srrs */
503198956Srrs
504198956Srrsstatic void
505198956Srrsrmi_bus_space_set_region_2(void *t, bus_space_handle_t bsh,
506198957Srrs    bus_size_t offset, u_int16_t value, size_t count)
507198956Srrs{
508198956Srrs	bus_addr_t addr = bsh + offset;
509198956Srrs
510198956Srrs	for (; count != 0; count--, addr += 2)
511204131Srrs		(*(volatile u_int32_t *)(addr)) = value;
512198956Srrs}
513198956Srrs
514198956Srrsstatic void
515198956Srrsrmi_bus_space_set_region_4(void *t, bus_space_handle_t bsh,
516198957Srrs    bus_size_t offset, u_int32_t value, size_t count)
517198956Srrs{
518198956Srrs	bus_addr_t addr = bsh + offset;
519198956Srrs
520198956Srrs	for (; count != 0; count--, addr += 4)
521198956Srrs		(*(volatile u_int32_t *)(addr)) = value;
522198956Srrs}
523198956Srrs
524198956Srrs
525198956Srrs/*
526198956Srrs * Copy `count' 1, 2, 4, or 8 byte values from bus space starting
527198956Srrs * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2.
528198956Srrs */
529198956Srrsstatic void
530198956Srrsrmi_bus_space_copy_region_2(void *t, bus_space_handle_t bsh1,
531198957Srrs    bus_size_t off1, bus_space_handle_t bsh2,
532198957Srrs    bus_size_t off2, size_t count)
533198956Srrs{
534198956Srrs	printf("bus_space_copy_region_2 - unimplemented\n");
535198956Srrs}
536198956Srrs
537198956Srrs/*
538198956Srrs * Read `count' 1, 2, 4, or 8 byte quantities from bus space
539198956Srrs * described by tag/handle/offset and copy into buffer provided.
540198956Srrs */
541198956Srrs
542198956Srrsu_int8_t
543198956Srrsrmi_bus_space_read_stream_1(void *t, bus_space_handle_t handle,
544198956Srrs    bus_size_t offset)
545198956Srrs{
546198956Srrs
547198956Srrs	return *((volatile u_int8_t *)(handle + offset));
548198956Srrs}
549198956Srrs
550198956Srrs
551198956Srrsstatic u_int16_t
552198956Srrsrmi_bus_space_read_stream_2(void *t, bus_space_handle_t handle,
553198957Srrs    bus_size_t offset)
554198956Srrs{
555198957Srrs	return *(volatile u_int16_t *)(handle + offset);
556198956Srrs}
557198956Srrs
558198956Srrs
559198956Srrsstatic u_int32_t
560198956Srrsrmi_bus_space_read_stream_4(void *t, bus_space_handle_t handle,
561198957Srrs    bus_size_t offset)
562198956Srrs{
563198957Srrs	return (*(volatile u_int32_t *)(handle + offset));
564198956Srrs}
565198956Srrs
566198956Srrs
567198956Srrsstatic void
568198956Srrsrmi_bus_space_read_multi_stream_1(void *tag, bus_space_handle_t handle,
569198957Srrs    bus_size_t offset, u_int8_t * addr, size_t count)
570198956Srrs{
571204131Srrs	TODO();
572198956Srrs}
573198956Srrs
574198956Srrsstatic void
575198956Srrsrmi_bus_space_read_multi_stream_2(void *tag, bus_space_handle_t handle,
576198957Srrs    bus_size_t offset, u_int16_t * addr, size_t count)
577198956Srrs{
578204131Srrs	TODO();
579198956Srrs}
580198956Srrs
581198956Srrsstatic void
582198956Srrsrmi_bus_space_read_multi_stream_4(void *tag, bus_space_handle_t handle,
583198957Srrs    bus_size_t offset, u_int32_t * addr, size_t count)
584198956Srrs{
585204131Srrs	TODO();
586198956Srrs}
587198956Srrs
588198956Srrs
589198956Srrs/*
590198956Srrs * Read `count' 1, 2, 4, or 8 byte quantities from bus space
591198956Srrs * described by tag/handle and starting at `offset' and copy into
592198956Srrs * buffer provided.
593198956Srrs */
594198956Srrsvoid
595198956Srrsrmi_bus_space_read_region_1(void *t, bus_space_handle_t bsh,
596198957Srrs    bus_size_t offset, u_int8_t * addr, size_t count)
597198956Srrs{
598204131Srrs	TODO();
599198956Srrs}
600198956Srrs
601198956Srrsvoid
602198956Srrsrmi_bus_space_read_region_2(void *t, bus_space_handle_t bsh,
603198957Srrs    bus_size_t offset, u_int16_t * addr, size_t count)
604198956Srrs{
605204131Srrs	TODO();
606198956Srrs}
607198956Srrs
608198956Srrsvoid
609198956Srrsrmi_bus_space_read_region_4(void *t, bus_space_handle_t bsh,
610198957Srrs    bus_size_t offset, u_int32_t * addr, size_t count)
611198956Srrs{
612198956Srrs	bus_addr_t baddr = bsh + offset;
613198956Srrs
614198956Srrs	while (count--) {
615198956Srrs		*addr++ = (*(volatile u_int32_t *)(baddr));
616198956Srrs		baddr += 4;
617198956Srrs	}
618198956Srrs}
619198956Srrs
620198956Srrsvoid
621198956Srrsrmi_bus_space_write_stream_1(void *t, bus_space_handle_t handle,
622198956Srrs    bus_size_t offset, u_int8_t value)
623198956Srrs{
624204131Srrs	TODO();
625198956Srrs}
626198956Srrs
627198956Srrs
628198956Srrsstatic void
629198956Srrsrmi_bus_space_write_stream_2(void *t, bus_space_handle_t handle,
630198957Srrs    bus_size_t offset, u_int16_t value)
631198956Srrs{
632204131Srrs	TODO();
633198956Srrs}
634198956Srrs
635198956Srrs
636198956Srrsstatic void
637198956Srrsrmi_bus_space_write_stream_4(void *t, bus_space_handle_t handle,
638198957Srrs    bus_size_t offset, u_int32_t value)
639198956Srrs{
640204131Srrs	TODO();
641198956Srrs}
642198956Srrs
643198956Srrs
644198956Srrsstatic void
645198956Srrsrmi_bus_space_write_multi_stream_1(void *tag, bus_space_handle_t handle,
646198957Srrs    bus_size_t offset, const u_int8_t * addr, size_t count)
647198956Srrs{
648204131Srrs	TODO();
649198956Srrs}
650198956Srrs
651198956Srrsstatic void
652198956Srrsrmi_bus_space_write_multi_stream_2(void *tag, bus_space_handle_t handle,
653198957Srrs    bus_size_t offset, const u_int16_t * addr, size_t count)
654198956Srrs{
655204131Srrs	TODO();
656198956Srrs}
657198956Srrs
658198956Srrsstatic void
659198956Srrsrmi_bus_space_write_multi_stream_4(void *tag, bus_space_handle_t handle,
660198957Srrs    bus_size_t offset, const u_int32_t * addr, size_t count)
661198956Srrs{
662204131Srrs	TODO();
663198956Srrs}
664198956Srrs
665198956Srrsvoid
666198956Srrsrmi_bus_space_write_region_2(void *t,
667198957Srrs    bus_space_handle_t bsh,
668198957Srrs    bus_size_t offset,
669198957Srrs    const u_int16_t * addr,
670198957Srrs    size_t count)
671198956Srrs{
672204131Srrs	TODO();
673198956Srrs}
674198956Srrs
675198956Srrsvoid
676198956Srrsrmi_bus_space_write_region_4(void *t, bus_space_handle_t bsh,
677198957Srrs    bus_size_t offset, const u_int32_t * addr, size_t count)
678198956Srrs{
679204131Srrs	TODO();
680198956Srrs}
681198956Srrs
682198956Srrsstatic void
683198956Srrsrmi_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused,
684198957Srrs    bus_size_t offset __unused, bus_size_t len __unused, int flags)
685198956Srrs{
686198956Srrs}
687