2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2019 Andrew Turner
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.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
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.
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
35 #ifndef _SYS__CSAN_BUS_H_
36 #define _SYS__CSAN_BUS_H_
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)
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)
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)
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)
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);
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 *);
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);
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);
97 KCSAN_BS(2, uint16_t);
98 KCSAN_BS(4, uint32_t);
99 KCSAN_BS(8, uint64_t);
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,
113 #ifndef KCSAN_RUNTIME
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
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
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
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
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
207 #endif /* !KCSAN_RUNTIME */
209 #endif /* !_SYS__CSAN_BUS_H_ */