xref: /openbsd/sys/arch/sparc64/sparc64/busop_c.in (revision f6aab3d8)
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