]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/mips/nlm/bus_space_rmi_pci.c
Merge OpenSSL 1.0.2n.
[FreeBSD/FreeBSD.git] / sys / mips / nlm / bus_space_rmi_pci.c
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright 2003-2011 Netlogic Microsystems (Netlogic). All rights
5  * reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are
9  * met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in
15  *    the documentation and/or other materials provided with the
16  *    distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY Netlogic Microsystems ``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
21  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NETLOGIC OR CONTRIBUTORS BE
22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28  * THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  * NETLOGIC_BSD */
31
32 #include <sys/cdefs.h>
33 __FBSDID("$FreeBSD$");
34
35 #include <sys/param.h>
36 #include <sys/systm.h>
37 #include <sys/bus.h>
38 #include <sys/kernel.h>
39 #include <sys/endian.h>
40 #include <sys/malloc.h>
41 #include <sys/ktr.h>
42
43 #include <vm/vm.h>
44 #include <vm/pmap.h>
45 #include <vm/vm_kern.h>
46 #include <vm/vm_extern.h>
47
48 #include <machine/bus.h>
49 #include <machine/cache.h>
50
51 static int
52 rmi_pci_bus_space_map(void *t, bus_addr_t addr,
53     bus_size_t size, int flags,
54     bus_space_handle_t * bshp);
55
56 static void
57 rmi_pci_bus_space_unmap(void *t, bus_space_handle_t bsh,
58     bus_size_t size);
59
60 static int
61 rmi_pci_bus_space_subregion(void *t,
62     bus_space_handle_t bsh,
63     bus_size_t offset, bus_size_t size,
64     bus_space_handle_t * nbshp);
65
66 static u_int8_t
67 rmi_pci_bus_space_read_1(void *t,
68     bus_space_handle_t handle,
69     bus_size_t offset);
70
71 static u_int16_t
72 rmi_pci_bus_space_read_2(void *t,
73     bus_space_handle_t handle,
74     bus_size_t offset);
75
76 static u_int32_t
77 rmi_pci_bus_space_read_4(void *t,
78     bus_space_handle_t handle,
79     bus_size_t offset);
80
81 static void
82 rmi_pci_bus_space_read_multi_1(void *t,
83     bus_space_handle_t handle,
84     bus_size_t offset, u_int8_t * addr,
85     size_t count);
86
87 static void
88 rmi_pci_bus_space_read_multi_2(void *t,
89     bus_space_handle_t handle,
90     bus_size_t offset, u_int16_t * addr,
91     size_t count);
92
93 static void
94 rmi_pci_bus_space_read_multi_4(void *t,
95     bus_space_handle_t handle,
96     bus_size_t offset, u_int32_t * addr,
97     size_t count);
98
99 static void
100 rmi_pci_bus_space_read_region_1(void *t,
101     bus_space_handle_t bsh,
102     bus_size_t offset, u_int8_t * addr,
103     size_t count);
104
105 static void
106 rmi_pci_bus_space_read_region_2(void *t,
107     bus_space_handle_t bsh,
108     bus_size_t offset, u_int16_t * addr,
109     size_t count);
110
111 static void
112 rmi_pci_bus_space_read_region_4(void *t,
113     bus_space_handle_t bsh,
114     bus_size_t offset, u_int32_t * addr,
115     size_t count);
116
117 static void
118 rmi_pci_bus_space_write_1(void *t,
119     bus_space_handle_t handle,
120     bus_size_t offset, u_int8_t value);
121
122 static void
123 rmi_pci_bus_space_write_2(void *t,
124     bus_space_handle_t handle,
125     bus_size_t offset, u_int16_t value);
126
127 static void
128 rmi_pci_bus_space_write_4(void *t,
129     bus_space_handle_t handle,
130     bus_size_t offset, u_int32_t value);
131
132 static void
133 rmi_pci_bus_space_write_multi_1(void *t,
134     bus_space_handle_t handle,
135     bus_size_t offset,
136     const u_int8_t * addr,
137     size_t count);
138
139 static void
140 rmi_pci_bus_space_write_multi_2(void *t,
141     bus_space_handle_t handle,
142     bus_size_t offset,
143     const u_int16_t * addr,
144     size_t count);
145
146 static void
147 rmi_pci_bus_space_write_multi_4(void *t,
148     bus_space_handle_t handle,
149     bus_size_t offset,
150     const u_int32_t * addr,
151     size_t count);
152
153 static void
154 rmi_pci_bus_space_write_region_2(void *t,
155     bus_space_handle_t bsh,
156     bus_size_t offset,
157     const u_int16_t * addr,
158     size_t count);
159
160 static void
161 rmi_pci_bus_space_write_region_4(void *t,
162     bus_space_handle_t bsh,
163     bus_size_t offset,
164     const u_int32_t * addr,
165     size_t count);
166
167 static void
168 rmi_pci_bus_space_set_region_2(void *t,
169     bus_space_handle_t bsh,
170     bus_size_t offset, u_int16_t value,
171     size_t count);
172
173 static void
174 rmi_pci_bus_space_set_region_4(void *t,
175     bus_space_handle_t bsh,
176     bus_size_t offset, u_int32_t value,
177     size_t count);
178
179 static void
180 rmi_pci_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused,
181     bus_size_t offset __unused, bus_size_t len __unused, int flags);
182
183 static void
184 rmi_pci_bus_space_copy_region_2(void *t,
185     bus_space_handle_t bsh1,
186     bus_size_t off1,
187     bus_space_handle_t bsh2,
188     bus_size_t off2, size_t count);
189
190 u_int8_t
191 rmi_pci_bus_space_read_stream_1(void *t, bus_space_handle_t handle,
192     bus_size_t offset);
193
194 static u_int16_t
195 rmi_pci_bus_space_read_stream_2(void *t, bus_space_handle_t handle,
196     bus_size_t offset);
197
198 static u_int32_t
199 rmi_pci_bus_space_read_stream_4(void *t, bus_space_handle_t handle,
200     bus_size_t offset);
201
202 static void
203 rmi_pci_bus_space_read_multi_stream_1(void *t,
204     bus_space_handle_t handle,
205     bus_size_t offset, u_int8_t * addr,
206     size_t count);
207
208 static void
209 rmi_pci_bus_space_read_multi_stream_2(void *t,
210     bus_space_handle_t handle,
211     bus_size_t offset, u_int16_t * addr,
212     size_t count);
213
214 static void
215 rmi_pci_bus_space_read_multi_stream_4(void *t,
216     bus_space_handle_t handle,
217     bus_size_t offset, u_int32_t * addr,
218     size_t count);
219
220 void
221 rmi_pci_bus_space_write_stream_1(void *t, bus_space_handle_t bsh,
222     bus_size_t offset, u_int8_t value);
223
224 static void
225 rmi_pci_bus_space_write_stream_2(void *t, bus_space_handle_t handle,
226     bus_size_t offset, u_int16_t value);
227
228 static void
229 rmi_pci_bus_space_write_stream_4(void *t, bus_space_handle_t handle,
230     bus_size_t offset, u_int32_t value);
231
232 static void
233 rmi_pci_bus_space_write_multi_stream_1(void *t,
234     bus_space_handle_t handle,
235     bus_size_t offset,
236     const u_int8_t * addr,
237     size_t count);
238
239 static void
240 rmi_pci_bus_space_write_multi_stream_2(void *t,
241     bus_space_handle_t handle,
242     bus_size_t offset,
243     const u_int16_t * addr,
244     size_t count);
245
246 static void
247 rmi_pci_bus_space_write_multi_stream_4(void *t,
248     bus_space_handle_t handle,
249     bus_size_t offset,
250     const u_int32_t * addr,
251     size_t count);
252
253 #define TODO() printf("XLR memory bus space function '%s' unimplemented\n", __func__)
254
255 static struct bus_space local_rmi_pci_bus_space = {
256         /* cookie */
257         (void *)0,
258
259         /* mapping/unmapping */
260         rmi_pci_bus_space_map,
261         rmi_pci_bus_space_unmap,
262         rmi_pci_bus_space_subregion,
263
264         /* allocation/deallocation */
265         NULL,
266         NULL,
267
268         /* barrier */
269         rmi_pci_bus_space_barrier,
270
271         /* read (single) */
272         rmi_pci_bus_space_read_1,
273         rmi_pci_bus_space_read_2,
274         rmi_pci_bus_space_read_4,
275         NULL,
276
277         /* read multiple */
278         rmi_pci_bus_space_read_multi_1,
279         rmi_pci_bus_space_read_multi_2,
280         rmi_pci_bus_space_read_multi_4,
281         NULL,
282
283         /* read region */
284         rmi_pci_bus_space_read_region_1,
285         rmi_pci_bus_space_read_region_2,
286         rmi_pci_bus_space_read_region_4,
287         NULL,
288
289         /* write (single) */
290         rmi_pci_bus_space_write_1,
291         rmi_pci_bus_space_write_2,
292         rmi_pci_bus_space_write_4,
293         NULL,
294
295         /* write multiple */
296         rmi_pci_bus_space_write_multi_1,
297         rmi_pci_bus_space_write_multi_2,
298         rmi_pci_bus_space_write_multi_4,
299         NULL,
300
301         /* write region */
302         NULL,
303         rmi_pci_bus_space_write_region_2,
304         rmi_pci_bus_space_write_region_4,
305         NULL,
306
307         /* set multiple */
308         NULL,
309         NULL,
310         NULL,
311         NULL,
312
313         /* set region */
314         NULL,
315         rmi_pci_bus_space_set_region_2,
316         rmi_pci_bus_space_set_region_4,
317         NULL,
318
319         /* copy */
320         NULL,
321         rmi_pci_bus_space_copy_region_2,
322         NULL,
323         NULL,
324
325         /* read (single) stream */
326         rmi_pci_bus_space_read_stream_1,
327         rmi_pci_bus_space_read_stream_2,
328         rmi_pci_bus_space_read_stream_4,
329         NULL,
330
331         /* read multiple stream */
332         rmi_pci_bus_space_read_multi_stream_1,
333         rmi_pci_bus_space_read_multi_stream_2,
334         rmi_pci_bus_space_read_multi_stream_4,
335         NULL,
336
337         /* read region stream */
338         rmi_pci_bus_space_read_region_1,
339         rmi_pci_bus_space_read_region_2,
340         rmi_pci_bus_space_read_region_4,
341         NULL,
342
343         /* write (single) stream */
344         rmi_pci_bus_space_write_stream_1,
345         rmi_pci_bus_space_write_stream_2,
346         rmi_pci_bus_space_write_stream_4,
347         NULL,
348
349         /* write multiple stream */
350         rmi_pci_bus_space_write_multi_stream_1,
351         rmi_pci_bus_space_write_multi_stream_2,
352         rmi_pci_bus_space_write_multi_stream_4,
353         NULL,
354
355         /* write region stream */
356         NULL,
357         rmi_pci_bus_space_write_region_2,
358         rmi_pci_bus_space_write_region_4,
359         NULL,
360 };
361
362 /* generic bus_space tag */
363 bus_space_tag_t rmi_pci_bus_space = &local_rmi_pci_bus_space;
364
365 /*
366  * Map a region of device bus space into CPU virtual address space.
367  */
368 static int
369 rmi_pci_bus_space_map(void *t __unused, bus_addr_t addr,
370     bus_size_t size __unused, int flags __unused,
371     bus_space_handle_t * bshp)
372 {
373         *bshp = addr;
374         return (0);
375 }
376
377 /*
378  * Unmap a region of device bus space.
379  */
380 static void
381 rmi_pci_bus_space_unmap(void *t __unused, bus_space_handle_t bsh __unused,
382     bus_size_t size __unused)
383 {
384 }
385
386 /*
387  * Get a new handle for a subregion of an already-mapped area of bus space.
388  */
389
390 static int
391 rmi_pci_bus_space_subregion(void *t __unused, bus_space_handle_t bsh,
392     bus_size_t offset, bus_size_t size __unused,
393     bus_space_handle_t * nbshp)
394 {
395         *nbshp = bsh + offset;
396         return (0);
397 }
398
399 /*
400  * Read a 1, 2, 4, or 8 byte quantity from bus space
401  * described by tag/handle/offset.
402  */
403
404 static u_int8_t
405 rmi_pci_bus_space_read_1(void *tag, bus_space_handle_t handle,
406     bus_size_t offset)
407 {
408         return (u_int8_t) (*(volatile u_int8_t *)(handle + offset));
409 }
410
411 static u_int16_t
412 rmi_pci_bus_space_read_2(void *tag, bus_space_handle_t handle,
413     bus_size_t offset)
414 {
415         u_int16_t value;
416
417         value = *(volatile u_int16_t *)(handle + offset);
418         return bswap16(value);
419 }
420
421 static u_int32_t
422 rmi_pci_bus_space_read_4(void *tag, bus_space_handle_t handle,
423     bus_size_t offset)
424 {
425         uint32_t value;
426
427         value = *(volatile u_int32_t *)(handle + offset);
428         return bswap32(value);
429 }
430
431 /*
432  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
433  * described by tag/handle/offset and copy into buffer provided.
434  */
435 static void
436 rmi_pci_bus_space_read_multi_1(void *tag, bus_space_handle_t handle,
437     bus_size_t offset, u_int8_t * addr, size_t count)
438 {
439         while (count--) {
440                 *addr = *(volatile u_int8_t *)(handle + offset);
441                 addr++;
442         }
443 }
444
445 static void
446 rmi_pci_bus_space_read_multi_2(void *tag, bus_space_handle_t handle,
447     bus_size_t offset, u_int16_t * addr, size_t count)
448 {
449
450         while (count--) {
451                 *addr = *(volatile u_int16_t *)(handle + offset);
452                 *addr = bswap16(*addr);
453                 addr++;
454         }
455 }
456
457 static void
458 rmi_pci_bus_space_read_multi_4(void *tag, bus_space_handle_t handle,
459     bus_size_t offset, u_int32_t * addr, size_t count)
460 {
461
462         while (count--) {
463                 *addr = *(volatile u_int32_t *)(handle + offset);
464                 *addr = bswap32(*addr);
465                 addr++;
466         }
467 }
468
469 /*
470  * Write the 1, 2, 4, or 8 byte value `value' to bus space
471  * described by tag/handle/offset.
472  */
473
474 static void
475 rmi_pci_bus_space_write_1(void *tag, bus_space_handle_t handle,
476     bus_size_t offset, u_int8_t value)
477 {
478         mips_sync();
479         *(volatile u_int8_t *)(handle + offset) = value;
480 }
481
482 static void
483 rmi_pci_bus_space_write_2(void *tag, bus_space_handle_t handle,
484     bus_size_t offset, u_int16_t value)
485 {
486         mips_sync();
487         *(volatile u_int16_t *)(handle + offset) = bswap16(value);
488 }
489
490
491 static void
492 rmi_pci_bus_space_write_4(void *tag, bus_space_handle_t handle,
493     bus_size_t offset, u_int32_t value)
494 {
495         mips_sync();
496         *(volatile u_int32_t *)(handle + offset) = bswap32(value);
497 }
498
499 /*
500  * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
501  * provided to bus space described by tag/handle/offset.
502  */
503
504
505 static void
506 rmi_pci_bus_space_write_multi_1(void *tag, bus_space_handle_t handle,
507     bus_size_t offset, const u_int8_t * addr, size_t count)
508 {
509         mips_sync();
510         while (count--) {
511                 (*(volatile u_int8_t *)(handle + offset)) = *addr;
512                 addr++;
513         }
514 }
515
516 static void
517 rmi_pci_bus_space_write_multi_2(void *tag, bus_space_handle_t handle,
518     bus_size_t offset, const u_int16_t * addr, size_t count)
519 {
520         mips_sync();
521         while (count--) {
522                 (*(volatile u_int16_t *)(handle + offset)) = bswap16(*addr);
523                 addr++;
524         }
525 }
526
527 static void
528 rmi_pci_bus_space_write_multi_4(void *tag, bus_space_handle_t handle,
529     bus_size_t offset, const u_int32_t * addr, size_t count)
530 {
531         mips_sync();
532         while (count--) {
533                 (*(volatile u_int32_t *)(handle + offset)) = bswap32(*addr);
534                 addr++;
535         }
536 }
537
538 /*
539  * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described
540  * by tag/handle starting at `offset'.
541  */
542
543 static void
544 rmi_pci_bus_space_set_region_2(void *t, bus_space_handle_t bsh,
545     bus_size_t offset, u_int16_t value, size_t count)
546 {
547         bus_addr_t addr = bsh + offset;
548
549         for (; count != 0; count--, addr += 2)
550                 (*(volatile u_int16_t *)(addr)) = value;
551 }
552
553 static void
554 rmi_pci_bus_space_set_region_4(void *t, bus_space_handle_t bsh,
555     bus_size_t offset, u_int32_t value, size_t count)
556 {
557         bus_addr_t addr = bsh + offset;
558
559         for (; count != 0; count--, addr += 4)
560                 (*(volatile u_int32_t *)(addr)) = value;
561 }
562
563
564 /*
565  * Copy `count' 1, 2, 4, or 8 byte values from bus space starting
566  * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2.
567  */
568 static void
569 rmi_pci_bus_space_copy_region_2(void *t, bus_space_handle_t bsh1,
570     bus_size_t off1, bus_space_handle_t bsh2,
571     bus_size_t off2, size_t count)
572 {
573         TODO();
574 }
575
576 /*
577  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
578  * described by tag/handle/offset and copy into buffer provided.
579  */
580
581 u_int8_t
582 rmi_pci_bus_space_read_stream_1(void *t, bus_space_handle_t handle,
583     bus_size_t offset)
584 {
585
586         return *((volatile u_int8_t *)(handle + offset));
587 }
588
589
590 static u_int16_t
591 rmi_pci_bus_space_read_stream_2(void *t, bus_space_handle_t handle,
592     bus_size_t offset)
593 {
594         return *(volatile u_int16_t *)(handle + offset);
595 }
596
597
598 static u_int32_t
599 rmi_pci_bus_space_read_stream_4(void *t, bus_space_handle_t handle,
600     bus_size_t offset)
601 {
602         return (*(volatile u_int32_t *)(handle + offset));
603 }
604
605
606 static void
607 rmi_pci_bus_space_read_multi_stream_1(void *tag, bus_space_handle_t handle,
608     bus_size_t offset, u_int8_t * addr, size_t count)
609 {
610         while (count--) {
611                 *addr = (*(volatile u_int8_t *)(handle + offset));
612                 addr++;
613         }
614 }
615
616 static void
617 rmi_pci_bus_space_read_multi_stream_2(void *tag, bus_space_handle_t handle,
618     bus_size_t offset, u_int16_t * addr, size_t count)
619 {
620         while (count--) {
621                 *addr = (*(volatile u_int16_t *)(handle + offset));
622                 addr++;
623         }
624 }
625
626 static void
627 rmi_pci_bus_space_read_multi_stream_4(void *tag, bus_space_handle_t handle,
628     bus_size_t offset, u_int32_t * addr, size_t count)
629 {
630         while (count--) {
631                 *addr = (*(volatile u_int32_t *)(handle + offset));
632                 addr++;
633         }
634 }
635
636
637
638 /*
639  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
640  * described by tag/handle and starting at `offset' and copy into
641  * buffer provided.
642  */
643 void
644 rmi_pci_bus_space_read_region_1(void *t, bus_space_handle_t bsh,
645     bus_size_t offset, u_int8_t * addr, size_t count)
646 {
647         bus_addr_t baddr = bsh + offset;
648
649         while (count--) {
650                 *addr++ = (*(volatile u_int8_t *)(baddr));
651                 baddr += 1;
652         }
653 }
654
655 void
656 rmi_pci_bus_space_read_region_2(void *t, bus_space_handle_t bsh,
657     bus_size_t offset, u_int16_t * addr, size_t count)
658 {
659         bus_addr_t baddr = bsh + offset;
660
661         while (count--) {
662                 *addr++ = (*(volatile u_int16_t *)(baddr));
663                 baddr += 2;
664         }
665 }
666
667 void
668 rmi_pci_bus_space_read_region_4(void *t, bus_space_handle_t bsh,
669     bus_size_t offset, u_int32_t * addr, size_t count)
670 {
671         bus_addr_t baddr = bsh + offset;
672
673         while (count--) {
674                 *addr++ = (*(volatile u_int32_t *)(baddr));
675                 baddr += 4;
676         }
677 }
678
679
680 void
681 rmi_pci_bus_space_write_stream_1(void *t, bus_space_handle_t handle,
682     bus_size_t offset, u_int8_t value)
683 {
684         mips_sync();
685         *(volatile u_int8_t *)(handle + offset) = value;
686 }
687
688 static void
689 rmi_pci_bus_space_write_stream_2(void *t, bus_space_handle_t handle,
690     bus_size_t offset, u_int16_t value)
691 {
692         mips_sync();
693         *(volatile u_int16_t *)(handle + offset) = value;
694 }
695
696
697 static void
698 rmi_pci_bus_space_write_stream_4(void *t, bus_space_handle_t handle,
699     bus_size_t offset, u_int32_t value)
700 {
701         mips_sync();
702         *(volatile u_int32_t *)(handle + offset) = value;
703 }
704
705
706 static void
707 rmi_pci_bus_space_write_multi_stream_1(void *tag, bus_space_handle_t handle,
708     bus_size_t offset, const u_int8_t * addr, size_t count)
709 {
710         mips_sync();
711         while (count--) {
712                 (*(volatile u_int8_t *)(handle + offset)) = *addr;
713                 addr++;
714         }
715 }
716
717 static void
718 rmi_pci_bus_space_write_multi_stream_2(void *tag, bus_space_handle_t handle,
719     bus_size_t offset, const u_int16_t * addr, size_t count)
720 {
721         mips_sync();
722         while (count--) {
723                 (*(volatile u_int16_t *)(handle + offset)) = *addr;
724                 addr++;
725         }
726 }
727
728 static void
729 rmi_pci_bus_space_write_multi_stream_4(void *tag, bus_space_handle_t handle,
730     bus_size_t offset, const u_int32_t * addr, size_t count)
731 {
732         mips_sync();
733         while (count--) {
734                 (*(volatile u_int32_t *)(handle + offset)) = *addr;
735                 addr++;
736         }
737 }
738
739 void
740 rmi_pci_bus_space_write_region_2(void *t,
741     bus_space_handle_t bsh,
742     bus_size_t offset,
743     const u_int16_t * addr,
744     size_t count)
745 {
746         bus_addr_t baddr = (bus_addr_t) bsh + offset;
747
748         while (count--) {
749                 (*(volatile u_int16_t *)(baddr)) = *addr;
750                 addr++;
751                 baddr += 2;
752         }
753 }
754
755 void
756 rmi_pci_bus_space_write_region_4(void *t, bus_space_handle_t bsh,
757     bus_size_t offset, const u_int32_t * addr, size_t count)
758 {
759         bus_addr_t baddr = bsh + offset;
760
761         while (count--) {
762                 (*(volatile u_int32_t *)(baddr)) = *addr;
763                 addr++;
764                 baddr += 4;
765         }
766 }
767
768 static void
769 rmi_pci_bus_space_barrier(void *tag __unused, bus_space_handle_t bsh __unused,
770     bus_size_t offset __unused, bus_size_t len __unused, int flags)
771 {
772
773 }