]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/sys/_cscan_bus.h
Upgrade to version 3.1.5
[FreeBSD/FreeBSD.git] / sys / sys / _cscan_bus.h
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(width, type)                                           \
81         KCSAN_BS_READ(width, type);                                     \
82         KCSAN_BS_WRITE(width, type);                                    \
83         KCSAN_BS_SET(width, type);                                      \
84         KCSAN_BS_COPY(width, type)
85
86 KCSAN_BS(1, uint8_t);
87 KCSAN_BS(2, uint16_t);
88 KCSAN_BS(4, uint32_t);
89 KCSAN_BS(8, uint64_t);
90
91 int kcsan_bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t, int,
92     bus_space_handle_t *);
93 void kcsan_bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t);
94 int kcsan_bus_space_subregion(bus_space_tag_t, bus_space_handle_t, bus_size_t,
95     bus_size_t, bus_space_handle_t *);
96 int kcsan_bus_space_alloc(bus_space_tag_t, bus_addr_t, bus_addr_t,
97     bus_size_t, bus_size_t, bus_size_t, int, bus_addr_t *,
98     bus_space_handle_t *);
99 void kcsan_bus_space_free(bus_space_tag_t, bus_space_handle_t, bus_size_t);
100 void kcsan_bus_space_barrier(bus_space_tag_t, bus_space_handle_t, bus_size_t,
101     bus_size_t, int);
102
103 #ifndef KCSAN_RUNTIME
104
105 #define bus_space_map                   kcsan_bus_space_map
106 #define bus_space_unmap                 kcsan_bus_space_unmap
107 #define bus_space_subregion             kcsan_bus_space_subregion
108 #define bus_space_alloc                 kcsan_bus_space_alloc
109 #define bus_space_free                  kcsan_bus_space_free
110 #define bus_space_barrier               kcsan_bus_space_barrier
111
112 #define bus_space_read_1                kcsan_bus_space_read_1
113 #define bus_space_read_stream_1         kcsan_bus_space_read_stream_1
114 #define bus_space_read_multi_1          kcsan_bus_space_read_multi_1
115 #define bus_space_read_multi_stream_1   kcsan_bus_space_read_multi_stream_1
116 #define bus_space_read_region_1         kcsan_bus_space_read_region_1
117 #define bus_space_read_region_stream_1  kcsan_bus_space_read_region_stream_1
118 #define bus_space_write_1               kcsan_bus_space_write_1
119 #define bus_space_write_stream_1        kcsan_bus_space_write_stream_1
120 #define bus_space_write_multi_1         kcsan_bus_space_write_multi_1
121 #define bus_space_write_multi_stream_1  kcsan_bus_space_write_multi_stream_1
122 #define bus_space_write_region_1        kcsan_bus_space_write_region_1
123 #define bus_space_write_region_stream_1 kcsan_bus_space_write_region_stream_1
124 #define bus_space_set_multi_1           kcsan_bus_space_set_multi_1
125 #define bus_space_set_multi_stream_1    kcsan_bus_space_set_multi_stream_1
126 #define bus_space_set_region_1          kcsan_bus_space_set_region_1
127 #define bus_space_set_region_stream_1   kcsan_bus_space_set_region_stream_1
128 #define bus_space_copy_multi_1          kcsan_bus_space_copy_multi_1
129 #define bus_space_copy_multi_stream_1   kcsan_bus_space_copy_multi_stream_1
130
131 #define bus_space_read_2                kcsan_bus_space_read_2
132 #define bus_space_read_stream_2         kcsan_bus_space_read_stream_2
133 #define bus_space_read_multi_2          kcsan_bus_space_read_multi_2
134 #define bus_space_read_multi_stream_2   kcsan_bus_space_read_multi_stream_2
135 #define bus_space_read_region_2         kcsan_bus_space_read_region_2
136 #define bus_space_read_region_stream_2  kcsan_bus_space_read_region_stream_2
137 #define bus_space_write_2               kcsan_bus_space_write_2
138 #define bus_space_write_stream_2        kcsan_bus_space_write_stream_2
139 #define bus_space_write_multi_2         kcsan_bus_space_write_multi_2
140 #define bus_space_write_multi_stream_2  kcsan_bus_space_write_multi_stream_2
141 #define bus_space_write_region_2        kcsan_bus_space_write_region_2
142 #define bus_space_write_region_stream_2 kcsan_bus_space_write_region_stream_2
143 #define bus_space_set_multi_2           kcsan_bus_space_set_multi_2
144 #define bus_space_set_multi_stream_2    kcsan_bus_space_set_multi_stream_2
145 #define bus_space_set_region_2          kcsan_bus_space_set_region_2
146 #define bus_space_set_region_stream_2   kcsan_bus_space_set_region_stream_2
147 #define bus_space_copy_multi_2          kcsan_bus_space_copy_multi_2
148 #define bus_space_copy_multi_stream_2   kcsan_bus_space_copy_multi_stream_2
149
150 #define bus_space_read_4                kcsan_bus_space_read_4
151 #define bus_space_read_stream_4         kcsan_bus_space_read_stream_4
152 #define bus_space_read_multi_4          kcsan_bus_space_read_multi_4
153 #define bus_space_read_multi_stream_4   kcsan_bus_space_read_multi_stream_4
154 #define bus_space_read_region_4         kcsan_bus_space_read_region_4
155 #define bus_space_read_region_stream_4  kcsan_bus_space_read_region_stream_4
156 #define bus_space_write_4               kcsan_bus_space_write_4
157 #define bus_space_write_stream_4        kcsan_bus_space_write_stream_4
158 #define bus_space_write_multi_4         kcsan_bus_space_write_multi_4
159 #define bus_space_write_multi_stream_4  kcsan_bus_space_write_multi_stream_4
160 #define bus_space_write_region_4        kcsan_bus_space_write_region_4
161 #define bus_space_write_region_stream_4 kcsan_bus_space_write_region_stream_4
162 #define bus_space_set_multi_4           kcsan_bus_space_set_multi_4
163 #define bus_space_set_multi_stream_4    kcsan_bus_space_set_multi_stream_4
164 #define bus_space_set_region_4          kcsan_bus_space_set_region_4
165 #define bus_space_set_region_stream_4   kcsan_bus_space_set_region_stream_4
166 #define bus_space_copy_multi_4          kcsan_bus_space_copy_multi_4
167 #define bus_space_copy_multi_stream_4   kcsan_bus_space_copy_multi_stream_4
168
169 #define bus_space_read_8                kcsan_bus_space_read_8
170 #define bus_space_read_stream_8         kcsan_bus_space_read_stream_8
171 #define bus_space_read_multi_8          kcsan_bus_space_read_multi_8
172 #define bus_space_read_multi_stream_8   kcsan_bus_space_read_multi_stream_8
173 #define bus_space_read_region_8         kcsan_bus_space_read_region_8
174 #define bus_space_read_region_stream_8  kcsan_bus_space_read_region_stream_8
175 #define bus_space_write_8               kcsan_bus_space_write_8
176 #define bus_space_write_stream_8        kcsan_bus_space_write_stream_8
177 #define bus_space_write_multi_8         kcsan_bus_space_write_multi_8
178 #define bus_space_write_multi_stream_8  kcsan_bus_space_write_multi_stream_8
179 #define bus_space_write_region_8        kcsan_bus_space_write_region_8
180 #define bus_space_write_region_stream_8 kcsan_bus_space_write_region_stream_8
181 #define bus_space_set_multi_8           kcsan_bus_space_set_multi_8
182 #define bus_space_set_multi_stream_8    kcsan_bus_space_set_multi_stream_8
183 #define bus_space_set_region_8          kcsan_bus_space_set_region_8
184 #define bus_space_set_region_stream_8   kcsan_bus_space_set_region_stream_8
185 #define bus_space_copy_multi_8          kcsan_bus_space_copy_multi_8
186 #define bus_space_copy_multi_stream_8   kcsan_bus_space_copy_multi_stream_8
187
188 #endif /* !KCSAN_RUNTIME */
189
190 #endif /* !_SYS__CSAN_BUS_H_ */