xref: /f-stack/freebsd/sys/_cscan_bus.h (revision 22ce4aff)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2019 Andrew Turner
5  *
6  * This software was developed by SRI International and the University of
7  * Cambridge Computer Laboratory (Department of Computer Science and
8  * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
9  * DARPA SSITH research programme.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  *
32  * $FreeBSD$
33  */
34 
35 #ifndef _SYS__CSAN_BUS_H_
36 #define	_SYS__CSAN_BUS_H_
37 
38 #define	KCSAN_BS_MULTI(rw, width, type)					\
39 	void kcsan_bus_space_##rw##_multi_##width(bus_space_tag_t, 	\
40 	    bus_space_handle_t, bus_size_t, type *, bus_size_t);	\
41 	void kcsan_bus_space_##rw##_multi_stream_##width(bus_space_tag_t, \
42 	    bus_space_handle_t, bus_size_t, type *, bus_size_t);	\
43 	void kcsan_bus_space_##rw##_region_##width(bus_space_tag_t,	\
44 	    bus_space_handle_t, bus_size_t, type *, bus_size_t);	\
45 	void kcsan_bus_space_##rw##_region_stream_##width(bus_space_tag_t, \
46 	    bus_space_handle_t, bus_size_t, type *, bus_size_t)
47 
48 #define	KCSAN_BS_READ(width, type)					\
49 	type kcsan_bus_space_read_##width(bus_space_tag_t, 		\
50 	    bus_space_handle_t, bus_size_t);				\
51 	type kcsan_bus_space_read_stream_##width(bus_space_tag_t,	\
52 	    bus_space_handle_t, bus_size_t);				\
53 	KCSAN_BS_MULTI(read, width, type)
54 
55 #define	KCSAN_BS_WRITE(width, type)					\
56 	void kcsan_bus_space_write_##width(bus_space_tag_t, 		\
57 	    bus_space_handle_t, bus_size_t, type);			\
58 	void kcsan_bus_space_write_stream_##width(bus_space_tag_t,	\
59 	    bus_space_handle_t, bus_size_t, type);			\
60 	KCSAN_BS_MULTI(write, width, const type)
61 
62 #define	KCSAN_BS_SET(width, type)					\
63 	void kcsan_bus_space_set_multi_##width(bus_space_tag_t, 	\
64 	    bus_space_handle_t, bus_size_t, type, bus_size_t);		\
65 	void kcsan_bus_space_set_multi_stream_##width(bus_space_tag_t, \
66 	    bus_space_handle_t, bus_size_t, type, bus_size_t);		\
67 	void kcsan_bus_space_set_region_##width(bus_space_tag_t,	\
68 	    bus_space_handle_t, bus_size_t, type, bus_size_t);		\
69 	void kcsan_bus_space_set_region_stream_##width(bus_space_tag_t, \
70 	    bus_space_handle_t, bus_size_t, type, bus_size_t)
71 
72 #define	KCSAN_BS_COPY(width, type)					\
73 	void kcsan_bus_space_copy_region_##width(bus_space_tag_t,	\
74 	    bus_space_handle_t,	bus_size_t, bus_space_handle_t,		\
75 	    bus_size_t, bus_size_t);					\
76 	void kcsan_bus_space_copy_region_stream_##width(bus_space_tag_t, \
77 	    bus_space_handle_t,	bus_size_t, bus_space_handle_t,		\
78 	    bus_size_t, bus_size_t);
79 
80 #define	KCSAN_BS_PEEK(width, type)					\
81 	int kcsan_bus_space_peek_##width(bus_space_tag_t, 		\
82 	    bus_space_handle_t, bus_size_t, type *);
83 
84 #define	KCSAN_BS_POKE(width, type)					\
85 	int kcsan_bus_space_poke_##width(bus_space_tag_t, 		\
86 	    bus_space_handle_t, bus_size_t, type);
87 
88 #define	KCSAN_BS(width, type)						\
89 	KCSAN_BS_READ(width, type);					\
90 	KCSAN_BS_WRITE(width, type);					\
91 	KCSAN_BS_SET(width, type);					\
92 	KCSAN_BS_COPY(width, type)					\
93 	KCSAN_BS_PEEK(width, type);					\
94 	KCSAN_BS_POKE(width, type);
95 
96 KCSAN_BS(1, uint8_t);
97 KCSAN_BS(2, uint16_t);
98 KCSAN_BS(4, uint32_t);
99 KCSAN_BS(8, uint64_t);
100 
101 int kcsan_bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t, int,
102     bus_space_handle_t *);
103 void kcsan_bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t);
104 int kcsan_bus_space_subregion(bus_space_tag_t, bus_space_handle_t, bus_size_t,
105     bus_size_t, bus_space_handle_t *);
106 int kcsan_bus_space_alloc(bus_space_tag_t, bus_addr_t, bus_addr_t,
107     bus_size_t, bus_size_t, bus_size_t, int, bus_addr_t *,
108     bus_space_handle_t *);
109 void kcsan_bus_space_free(bus_space_tag_t, bus_space_handle_t, bus_size_t);
110 void kcsan_bus_space_barrier(bus_space_tag_t, bus_space_handle_t, bus_size_t,
111     bus_size_t, int);
112 
113 #ifndef KCSAN_RUNTIME
114 
115 #define	bus_space_map			kcsan_bus_space_map
116 #define	bus_space_unmap			kcsan_bus_space_unmap
117 #define	bus_space_subregion		kcsan_bus_space_subregion
118 #define	bus_space_alloc			kcsan_bus_space_alloc
119 #define	bus_space_free			kcsan_bus_space_free
120 #define	bus_space_barrier		kcsan_bus_space_barrier
121 
122 #define	bus_space_read_1		kcsan_bus_space_read_1
123 #define	bus_space_read_stream_1		kcsan_bus_space_read_stream_1
124 #define	bus_space_read_multi_1		kcsan_bus_space_read_multi_1
125 #define	bus_space_read_multi_stream_1	kcsan_bus_space_read_multi_stream_1
126 #define	bus_space_read_region_1		kcsan_bus_space_read_region_1
127 #define	bus_space_read_region_stream_1	kcsan_bus_space_read_region_stream_1
128 #define	bus_space_write_1		kcsan_bus_space_write_1
129 #define	bus_space_write_stream_1	kcsan_bus_space_write_stream_1
130 #define	bus_space_write_multi_1		kcsan_bus_space_write_multi_1
131 #define	bus_space_write_multi_stream_1	kcsan_bus_space_write_multi_stream_1
132 #define	bus_space_write_region_1	kcsan_bus_space_write_region_1
133 #define	bus_space_write_region_stream_1	kcsan_bus_space_write_region_stream_1
134 #define	bus_space_set_multi_1		kcsan_bus_space_set_multi_1
135 #define	bus_space_set_multi_stream_1	kcsan_bus_space_set_multi_stream_1
136 #define	bus_space_set_region_1		kcsan_bus_space_set_region_1
137 #define	bus_space_set_region_stream_1	kcsan_bus_space_set_region_stream_1
138 #define	bus_space_copy_multi_1		kcsan_bus_space_copy_multi_1
139 #define	bus_space_copy_multi_stream_1	kcsan_bus_space_copy_multi_stream_1
140 #define	bus_space_poke_1		kcsan_bus_space_poke_1
141 #define	bus_space_peek_1		kcsan_bus_space_peek_1
142 
143 #define	bus_space_read_2		kcsan_bus_space_read_2
144 #define	bus_space_read_stream_2		kcsan_bus_space_read_stream_2
145 #define	bus_space_read_multi_2		kcsan_bus_space_read_multi_2
146 #define	bus_space_read_multi_stream_2	kcsan_bus_space_read_multi_stream_2
147 #define	bus_space_read_region_2		kcsan_bus_space_read_region_2
148 #define	bus_space_read_region_stream_2	kcsan_bus_space_read_region_stream_2
149 #define	bus_space_write_2		kcsan_bus_space_write_2
150 #define	bus_space_write_stream_2	kcsan_bus_space_write_stream_2
151 #define	bus_space_write_multi_2		kcsan_bus_space_write_multi_2
152 #define	bus_space_write_multi_stream_2	kcsan_bus_space_write_multi_stream_2
153 #define	bus_space_write_region_2	kcsan_bus_space_write_region_2
154 #define	bus_space_write_region_stream_2	kcsan_bus_space_write_region_stream_2
155 #define	bus_space_set_multi_2		kcsan_bus_space_set_multi_2
156 #define	bus_space_set_multi_stream_2	kcsan_bus_space_set_multi_stream_2
157 #define	bus_space_set_region_2		kcsan_bus_space_set_region_2
158 #define	bus_space_set_region_stream_2	kcsan_bus_space_set_region_stream_2
159 #define	bus_space_copy_multi_2		kcsan_bus_space_copy_multi_2
160 #define	bus_space_copy_multi_stream_2	kcsan_bus_space_copy_multi_stream_2
161 #define	bus_space_poke_2		kcsan_bus_space_poke_2
162 #define	bus_space_peek_2		kcsan_bus_space_peek_2
163 
164 #define	bus_space_read_4		kcsan_bus_space_read_4
165 #define	bus_space_read_stream_4		kcsan_bus_space_read_stream_4
166 #define	bus_space_read_multi_4		kcsan_bus_space_read_multi_4
167 #define	bus_space_read_multi_stream_4	kcsan_bus_space_read_multi_stream_4
168 #define	bus_space_read_region_4		kcsan_bus_space_read_region_4
169 #define	bus_space_read_region_stream_4	kcsan_bus_space_read_region_stream_4
170 #define	bus_space_write_4		kcsan_bus_space_write_4
171 #define	bus_space_write_stream_4	kcsan_bus_space_write_stream_4
172 #define	bus_space_write_multi_4		kcsan_bus_space_write_multi_4
173 #define	bus_space_write_multi_stream_4	kcsan_bus_space_write_multi_stream_4
174 #define	bus_space_write_region_4	kcsan_bus_space_write_region_4
175 #define	bus_space_write_region_stream_4	kcsan_bus_space_write_region_stream_4
176 #define	bus_space_set_multi_4		kcsan_bus_space_set_multi_4
177 #define	bus_space_set_multi_stream_4	kcsan_bus_space_set_multi_stream_4
178 #define	bus_space_set_region_4		kcsan_bus_space_set_region_4
179 #define	bus_space_set_region_stream_4	kcsan_bus_space_set_region_stream_4
180 #define	bus_space_copy_multi_4		kcsan_bus_space_copy_multi_4
181 #define	bus_space_copy_multi_stream_4	kcsan_bus_space_copy_multi_stream_4
182 #define	bus_space_poke_4		kcsan_bus_space_poke_4
183 #define	bus_space_peek_4		kcsan_bus_space_peek_4
184 
185 #define	bus_space_read_8		kcsan_bus_space_read_8
186 #define	bus_space_read_stream_8		kcsan_bus_space_read_stream_8
187 #define	bus_space_read_multi_8		kcsan_bus_space_read_multi_8
188 #define	bus_space_read_multi_stream_8	kcsan_bus_space_read_multi_stream_8
189 #define	bus_space_read_region_8		kcsan_bus_space_read_region_8
190 #define	bus_space_read_region_stream_8	kcsan_bus_space_read_region_stream_8
191 #define	bus_space_write_8		kcsan_bus_space_write_8
192 #define	bus_space_write_stream_8	kcsan_bus_space_write_stream_8
193 #define	bus_space_write_multi_8		kcsan_bus_space_write_multi_8
194 #define	bus_space_write_multi_stream_8	kcsan_bus_space_write_multi_stream_8
195 #define	bus_space_write_region_8	kcsan_bus_space_write_region_8
196 #define	bus_space_write_region_stream_8	kcsan_bus_space_write_region_stream_8
197 #define	bus_space_set_multi_8		kcsan_bus_space_set_multi_8
198 #define	bus_space_set_multi_stream_8	kcsan_bus_space_set_multi_stream_8
199 #define	bus_space_set_region_8		kcsan_bus_space_set_region_8
200 #define	bus_space_set_region_stream_8	kcsan_bus_space_set_region_stream_8
201 #define	bus_space_copy_multi_8		kcsan_bus_space_copy_multi_8
202 #define	bus_space_copy_multi_stream_8	kcsan_bus_space_copy_multi_stream_8
203 #define	bus_space_poke_8		kcsan_bus_space_poke_8
204 #define	bus_space_peek_8		kcsan_bus_space_peek_8
205 
206 
207 #endif /* !KCSAN_RUNTIME */
208 
209 #endif /* !_SYS__CSAN_BUS_H_ */
210