Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/riscv/include/bus.h
39507 views
1
/* $NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $ */
2
3
/*-
4
* Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
5
* All rights reserved.
6
*
7
* This code is derived from software contributed to The NetBSD Foundation
8
* by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
9
* NASA Ames Research Center.
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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
* POSSIBILITY OF SUCH DAMAGE.
31
*/
32
33
/*-
34
* Copyright (c) 1996 Charles M. Hannum. All rights reserved.
35
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
36
*
37
* Redistribution and use in source and binary forms, with or without
38
* modification, are permitted provided that the following conditions
39
* are met:
40
* 1. Redistributions of source code must retain the above copyright
41
* notice, this list of conditions and the following disclaimer.
42
* 2. Redistributions in binary form must reproduce the above copyright
43
* notice, this list of conditions and the following disclaimer in the
44
* documentation and/or other materials provided with the distribution.
45
* 3. All advertising materials mentioning features or use of this software
46
* must display the following acknowledgement:
47
* This product includes software developed by Christopher G. Demetriou
48
* for the NetBSD Project.
49
* 4. The name of the author may not be used to endorse or promote products
50
* derived from this software without specific prior written permission
51
*
52
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
53
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
54
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
55
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
56
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
57
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
58
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
59
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
60
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
61
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
62
*
63
* From: sys/arm/include/bus.h
64
*/
65
66
#ifndef _MACHINE_BUS_H_
67
#define _MACHINE_BUS_H_
68
69
#include <machine/_bus.h>
70
71
#define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
72
73
#define BUS_SPACE_MAXADDR_24BIT 0xFFFFFFUL
74
#define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFFUL
75
#define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFFUL
76
#define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFFUL
77
78
#define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFFUL
79
#define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFFUL
80
81
#define BUS_SPACE_MAP_CACHEABLE 0x01
82
#define BUS_SPACE_MAP_LINEAR 0x02
83
#define BUS_SPACE_MAP_PREFETCHABLE 0x04
84
85
#define BUS_SPACE_UNRESTRICTED (~0)
86
87
#define BUS_SPACE_BARRIER_READ 0x01
88
#define BUS_SPACE_BARRIER_WRITE 0x02
89
90
struct bus_space {
91
/* cookie */
92
void *bs_cookie;
93
94
/* mapping/unmapping */
95
int (*bs_map) (void *, bus_addr_t, bus_size_t,
96
int, bus_space_handle_t *);
97
void (*bs_unmap) (void *, bus_space_handle_t, bus_size_t);
98
int (*bs_subregion) (void *, bus_space_handle_t,
99
bus_size_t, bus_size_t, bus_space_handle_t *);
100
101
/* allocation/deallocation */
102
int (*bs_alloc) (void *, bus_addr_t, bus_addr_t,
103
bus_size_t, bus_size_t, bus_size_t, int,
104
bus_addr_t *, bus_space_handle_t *);
105
void (*bs_free) (void *, bus_space_handle_t,
106
bus_size_t);
107
108
/* get kernel virtual address */
109
/* barrier */
110
void (*bs_barrier) (void *, bus_space_handle_t,
111
bus_size_t, bus_size_t, int);
112
113
/* read single */
114
u_int8_t (*bs_r_1) (void *, bus_space_handle_t, bus_size_t);
115
u_int16_t (*bs_r_2) (void *, bus_space_handle_t, bus_size_t);
116
u_int32_t (*bs_r_4) (void *, bus_space_handle_t, bus_size_t);
117
u_int64_t (*bs_r_8) (void *, bus_space_handle_t, bus_size_t);
118
119
/* read multiple */
120
void (*bs_rm_1) (void *, bus_space_handle_t, bus_size_t,
121
u_int8_t *, bus_size_t);
122
void (*bs_rm_2) (void *, bus_space_handle_t, bus_size_t,
123
u_int16_t *, bus_size_t);
124
void (*bs_rm_4) (void *, bus_space_handle_t,
125
bus_size_t, u_int32_t *, bus_size_t);
126
void (*bs_rm_8) (void *, bus_space_handle_t,
127
bus_size_t, u_int64_t *, bus_size_t);
128
129
/* read region */
130
void (*bs_rr_1) (void *, bus_space_handle_t,
131
bus_size_t, u_int8_t *, bus_size_t);
132
void (*bs_rr_2) (void *, bus_space_handle_t,
133
bus_size_t, u_int16_t *, bus_size_t);
134
void (*bs_rr_4) (void *, bus_space_handle_t,
135
bus_size_t, u_int32_t *, bus_size_t);
136
void (*bs_rr_8) (void *, bus_space_handle_t,
137
bus_size_t, u_int64_t *, bus_size_t);
138
139
/* write single */
140
void (*bs_w_1) (void *, bus_space_handle_t,
141
bus_size_t, u_int8_t);
142
void (*bs_w_2) (void *, bus_space_handle_t,
143
bus_size_t, u_int16_t);
144
void (*bs_w_4) (void *, bus_space_handle_t,
145
bus_size_t, u_int32_t);
146
void (*bs_w_8) (void *, bus_space_handle_t,
147
bus_size_t, u_int64_t);
148
149
/* write multiple */
150
void (*bs_wm_1) (void *, bus_space_handle_t,
151
bus_size_t, const u_int8_t *, bus_size_t);
152
void (*bs_wm_2) (void *, bus_space_handle_t,
153
bus_size_t, const u_int16_t *, bus_size_t);
154
void (*bs_wm_4) (void *, bus_space_handle_t,
155
bus_size_t, const u_int32_t *, bus_size_t);
156
void (*bs_wm_8) (void *, bus_space_handle_t,
157
bus_size_t, const u_int64_t *, bus_size_t);
158
159
/* write region */
160
void (*bs_wr_1) (void *, bus_space_handle_t,
161
bus_size_t, const u_int8_t *, bus_size_t);
162
void (*bs_wr_2) (void *, bus_space_handle_t,
163
bus_size_t, const u_int16_t *, bus_size_t);
164
void (*bs_wr_4) (void *, bus_space_handle_t,
165
bus_size_t, const u_int32_t *, bus_size_t);
166
void (*bs_wr_8) (void *, bus_space_handle_t,
167
bus_size_t, const u_int64_t *, bus_size_t);
168
169
/* set multiple */
170
void (*bs_sm_1) (void *, bus_space_handle_t,
171
bus_size_t, u_int8_t, bus_size_t);
172
void (*bs_sm_2) (void *, bus_space_handle_t,
173
bus_size_t, u_int16_t, bus_size_t);
174
void (*bs_sm_4) (void *, bus_space_handle_t,
175
bus_size_t, u_int32_t, bus_size_t);
176
void (*bs_sm_8) (void *, bus_space_handle_t,
177
bus_size_t, u_int64_t, bus_size_t);
178
179
/* set region */
180
void (*bs_sr_1) (void *, bus_space_handle_t,
181
bus_size_t, u_int8_t, bus_size_t);
182
void (*bs_sr_2) (void *, bus_space_handle_t,
183
bus_size_t, u_int16_t, bus_size_t);
184
void (*bs_sr_4) (void *, bus_space_handle_t,
185
bus_size_t, u_int32_t, bus_size_t);
186
void (*bs_sr_8) (void *, bus_space_handle_t,
187
bus_size_t, u_int64_t, bus_size_t);
188
189
/* copy */
190
void (*bs_c_1) (void *, bus_space_handle_t, bus_size_t,
191
bus_space_handle_t, bus_size_t, bus_size_t);
192
void (*bs_c_2) (void *, bus_space_handle_t, bus_size_t,
193
bus_space_handle_t, bus_size_t, bus_size_t);
194
void (*bs_c_4) (void *, bus_space_handle_t, bus_size_t,
195
bus_space_handle_t, bus_size_t, bus_size_t);
196
void (*bs_c_8) (void *, bus_space_handle_t, bus_size_t,
197
bus_space_handle_t, bus_size_t, bus_size_t);
198
199
/* read single stream */
200
u_int8_t (*bs_r_1_s) (void *, bus_space_handle_t, bus_size_t);
201
u_int16_t (*bs_r_2_s) (void *, bus_space_handle_t, bus_size_t);
202
u_int32_t (*bs_r_4_s) (void *, bus_space_handle_t, bus_size_t);
203
u_int64_t (*bs_r_8_s) (void *, bus_space_handle_t, bus_size_t);
204
205
/* read multiple stream */
206
void (*bs_rm_1_s) (void *, bus_space_handle_t, bus_size_t,
207
u_int8_t *, bus_size_t);
208
void (*bs_rm_2_s) (void *, bus_space_handle_t, bus_size_t,
209
u_int16_t *, bus_size_t);
210
void (*bs_rm_4_s) (void *, bus_space_handle_t,
211
bus_size_t, u_int32_t *, bus_size_t);
212
void (*bs_rm_8_s) (void *, bus_space_handle_t,
213
bus_size_t, u_int64_t *, bus_size_t);
214
215
/* read region stream */
216
void (*bs_rr_1_s) (void *, bus_space_handle_t,
217
bus_size_t, u_int8_t *, bus_size_t);
218
void (*bs_rr_2_s) (void *, bus_space_handle_t,
219
bus_size_t, u_int16_t *, bus_size_t);
220
void (*bs_rr_4_s) (void *, bus_space_handle_t,
221
bus_size_t, u_int32_t *, bus_size_t);
222
void (*bs_rr_8_s) (void *, bus_space_handle_t,
223
bus_size_t, u_int64_t *, bus_size_t);
224
225
/* write single stream */
226
void (*bs_w_1_s) (void *, bus_space_handle_t,
227
bus_size_t, u_int8_t);
228
void (*bs_w_2_s) (void *, bus_space_handle_t,
229
bus_size_t, u_int16_t);
230
void (*bs_w_4_s) (void *, bus_space_handle_t,
231
bus_size_t, u_int32_t);
232
void (*bs_w_8_s) (void *, bus_space_handle_t,
233
bus_size_t, u_int64_t);
234
235
/* write multiple stream */
236
void (*bs_wm_1_s) (void *, bus_space_handle_t,
237
bus_size_t, const u_int8_t *, bus_size_t);
238
void (*bs_wm_2_s) (void *, bus_space_handle_t,
239
bus_size_t, const u_int16_t *, bus_size_t);
240
void (*bs_wm_4_s) (void *, bus_space_handle_t,
241
bus_size_t, const u_int32_t *, bus_size_t);
242
void (*bs_wm_8_s) (void *, bus_space_handle_t,
243
bus_size_t, const u_int64_t *, bus_size_t);
244
245
/* write region stream */
246
void (*bs_wr_1_s) (void *, bus_space_handle_t,
247
bus_size_t, const u_int8_t *, bus_size_t);
248
void (*bs_wr_2_s) (void *, bus_space_handle_t,
249
bus_size_t, const u_int16_t *, bus_size_t);
250
void (*bs_wr_4_s) (void *, bus_space_handle_t,
251
bus_size_t, const u_int32_t *, bus_size_t);
252
void (*bs_wr_8_s) (void *, bus_space_handle_t,
253
bus_size_t, const u_int64_t *, bus_size_t);
254
};
255
256
/*
257
* Utility macros; INTERNAL USE ONLY.
258
*/
259
#define __bs_c(a,b) __CONCAT(a,b)
260
#define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size)
261
262
#define __bs_rs(sz, t, h, o) \
263
(*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o)
264
#define __bs_ws(sz, t, h, o, v) \
265
(*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v)
266
#define __bs_nonsingle(type, sz, t, h, o, a, c) \
267
(*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c)
268
#define __bs_set(type, sz, t, h, o, v, c) \
269
(*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c)
270
#define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \
271
(*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt)
272
273
#define __bs_opname_s(op,size) __bs_c(__bs_c(__bs_c(__bs_c(bs_,op),_),size),_s)
274
#define __bs_rs_s(sz, t, h, o) \
275
(*(t)->__bs_opname_s(r,sz))((t)->bs_cookie, h, o)
276
#define __bs_ws_s(sz, t, h, o, v) \
277
(*(t)->__bs_opname_s(w,sz))((t)->bs_cookie, h, o, v)
278
#define __bs_nonsingle_s(type, sz, t, h, o, a, c) \
279
(*(t)->__bs_opname_s(type,sz))((t)->bs_cookie, h, o, a, c)
280
281
/*
282
* Mapping and unmapping operations.
283
*/
284
#define bus_space_map(t, a, s, c, hp) \
285
(*(t)->bs_map)((t)->bs_cookie, (a), (s), (c), (hp))
286
#define bus_space_unmap(t, h, s) \
287
(*(t)->bs_unmap)((t)->bs_cookie, (h), (s))
288
#define bus_space_subregion(t, h, o, s, hp) \
289
(*(t)->bs_subregion)((t)->bs_cookie, (h), (o), (s), (hp))
290
291
/*
292
* Allocation and deallocation operations.
293
*/
294
#define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \
295
(*(t)->bs_alloc)((t)->bs_cookie, (rs), (re), (s), (a), (b), \
296
(c), (ap), (hp))
297
#define bus_space_free(t, h, s) \
298
(*(t)->bs_free)((t)->bs_cookie, (h), (s))
299
300
/*
301
* Bus barrier operations.
302
*/
303
#define bus_space_barrier(t, h, o, l, f) \
304
(*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f))
305
306
/*
307
* Bus read (single) operations.
308
*/
309
#define bus_space_read_1(t, h, o) __bs_rs(1,(t),(h),(o))
310
#define bus_space_read_2(t, h, o) __bs_rs(2,(t),(h),(o))
311
#define bus_space_read_4(t, h, o) __bs_rs(4,(t),(h),(o))
312
#define bus_space_read_8(t, h, o) __bs_rs(8,(t),(h),(o))
313
314
#define bus_space_read_stream_1(t, h, o) __bs_rs_s(1,(t), (h), (o))
315
#define bus_space_read_stream_2(t, h, o) __bs_rs_s(2,(t), (h), (o))
316
#define bus_space_read_stream_4(t, h, o) __bs_rs_s(4,(t), (h), (o))
317
#define bus_space_read_stream_8(t, h, o) __bs_rs_s(8,8,(t),(h),(o))
318
319
/*
320
* Bus read multiple operations.
321
*/
322
#define bus_space_read_multi_1(t, h, o, a, c) \
323
__bs_nonsingle(rm,1,(t),(h),(o),(a),(c))
324
#define bus_space_read_multi_2(t, h, o, a, c) \
325
__bs_nonsingle(rm,2,(t),(h),(o),(a),(c))
326
#define bus_space_read_multi_4(t, h, o, a, c) \
327
__bs_nonsingle(rm,4,(t),(h),(o),(a),(c))
328
#define bus_space_read_multi_8(t, h, o, a, c) \
329
__bs_nonsingle(rm,8,(t),(h),(o),(a),(c))
330
331
#define bus_space_read_multi_stream_1(t, h, o, a, c) \
332
__bs_nonsingle_s(rm,1,(t),(h),(o),(a),(c))
333
#define bus_space_read_multi_stream_2(t, h, o, a, c) \
334
__bs_nonsingle_s(rm,2,(t),(h),(o),(a),(c))
335
#define bus_space_read_multi_stream_4(t, h, o, a, c) \
336
__bs_nonsingle_s(rm,4,(t),(h),(o),(a),(c))
337
#define bus_space_read_multi_stream_8(t, h, o, a, c) \
338
__bs_nonsingle_s(rm,8,(t),(h),(o),(a),(c))
339
340
/*
341
* Bus read region operations.
342
*/
343
#define bus_space_read_region_1(t, h, o, a, c) \
344
__bs_nonsingle(rr,1,(t),(h),(o),(a),(c))
345
#define bus_space_read_region_2(t, h, o, a, c) \
346
__bs_nonsingle(rr,2,(t),(h),(o),(a),(c))
347
#define bus_space_read_region_4(t, h, o, a, c) \
348
__bs_nonsingle(rr,4,(t),(h),(o),(a),(c))
349
#define bus_space_read_region_8(t, h, o, a, c) \
350
__bs_nonsingle(rr,8,(t),(h),(o),(a),(c))
351
352
#define bus_space_read_region_stream_1(t, h, o, a, c) \
353
__bs_nonsingle_s(rr,1,(t),(h),(o),(a),(c))
354
#define bus_space_read_region_stream_2(t, h, o, a, c) \
355
__bs_nonsingle_s(rr,2,(t),(h),(o),(a),(c))
356
#define bus_space_read_region_stream_4(t, h, o, a, c) \
357
__bs_nonsingle_s(rr,4,(t),(h),(o),(a),(c))
358
#define bus_space_read_region_stream_8(t, h, o, a, c) \
359
__bs_nonsingle_s(rr,8,(t),(h),(o),(a),(c))
360
361
/*
362
* Bus write (single) operations.
363
*/
364
#define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v))
365
#define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v))
366
#define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v))
367
#define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v))
368
369
#define bus_space_write_stream_1(t, h, o, v) __bs_ws_s(1,(t),(h),(o),(v))
370
#define bus_space_write_stream_2(t, h, o, v) __bs_ws_s(2,(t),(h),(o),(v))
371
#define bus_space_write_stream_4(t, h, o, v) __bs_ws_s(4,(t),(h),(o),(v))
372
#define bus_space_write_stream_8(t, h, o, v) __bs_ws_s(8,(t),(h),(o),(v))
373
374
/*
375
* Bus write multiple operations.
376
*/
377
#define bus_space_write_multi_1(t, h, o, a, c) \
378
__bs_nonsingle(wm,1,(t),(h),(o),(a),(c))
379
#define bus_space_write_multi_2(t, h, o, a, c) \
380
__bs_nonsingle(wm,2,(t),(h),(o),(a),(c))
381
#define bus_space_write_multi_4(t, h, o, a, c) \
382
__bs_nonsingle(wm,4,(t),(h),(o),(a),(c))
383
#define bus_space_write_multi_8(t, h, o, a, c) \
384
__bs_nonsingle(wm,8,(t),(h),(o),(a),(c))
385
386
#define bus_space_write_multi_stream_1(t, h, o, a, c) \
387
__bs_nonsingle_s(wm,1,(t),(h),(o),(a),(c))
388
#define bus_space_write_multi_stream_2(t, h, o, a, c) \
389
__bs_nonsingle_s(wm,2,(t),(h),(o),(a),(c))
390
#define bus_space_write_multi_stream_4(t, h, o, a, c) \
391
__bs_nonsingle_s(wm,4,(t),(h),(o),(a),(c))
392
#define bus_space_write_multi_stream_8(t, h, o, a, c) \
393
__bs_nonsingle_s(wm,8,(t),(h),(o),(a),(c))
394
395
/*
396
* Bus write region operations.
397
*/
398
#define bus_space_write_region_1(t, h, o, a, c) \
399
__bs_nonsingle(wr,1,(t),(h),(o),(a),(c))
400
#define bus_space_write_region_2(t, h, o, a, c) \
401
__bs_nonsingle(wr,2,(t),(h),(o),(a),(c))
402
#define bus_space_write_region_4(t, h, o, a, c) \
403
__bs_nonsingle(wr,4,(t),(h),(o),(a),(c))
404
#define bus_space_write_region_8(t, h, o, a, c) \
405
__bs_nonsingle(wr,8,(t),(h),(o),(a),(c))
406
407
#define bus_space_write_region_stream_1(t, h, o, a, c) \
408
__bs_nonsingle_s(wr,1,(t),(h),(o),(a),(c))
409
#define bus_space_write_region_stream_2(t, h, o, a, c) \
410
__bs_nonsingle_s(wr,2,(t),(h),(o),(a),(c))
411
#define bus_space_write_region_stream_4(t, h, o, a, c) \
412
__bs_nonsingle_s(wr,4,(t),(h),(o),(a),(c))
413
#define bus_space_write_region_stream_8(t, h, o, a, c) \
414
__bs_nonsingle_s(wr,8,(t),(h),(o),(a),(c))
415
416
/*
417
* Set multiple operations.
418
*/
419
#define bus_space_set_multi_1(t, h, o, v, c) \
420
__bs_set(sm,1,(t),(h),(o),(v),(c))
421
#define bus_space_set_multi_2(t, h, o, v, c) \
422
__bs_set(sm,2,(t),(h),(o),(v),(c))
423
#define bus_space_set_multi_4(t, h, o, v, c) \
424
__bs_set(sm,4,(t),(h),(o),(v),(c))
425
#define bus_space_set_multi_8(t, h, o, v, c) \
426
__bs_set(sm,8,(t),(h),(o),(v),(c))
427
428
/*
429
* Set region operations.
430
*/
431
#define bus_space_set_region_1(t, h, o, v, c) \
432
__bs_set(sr,1,(t),(h),(o),(v),(c))
433
#define bus_space_set_region_2(t, h, o, v, c) \
434
__bs_set(sr,2,(t),(h),(o),(v),(c))
435
#define bus_space_set_region_4(t, h, o, v, c) \
436
__bs_set(sr,4,(t),(h),(o),(v),(c))
437
#define bus_space_set_region_8(t, h, o, v, c) \
438
__bs_set(sr,8,(t),(h),(o),(v),(c))
439
440
/*
441
* Copy operations.
442
*/
443
#define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \
444
__bs_copy(1, t, h1, o1, h2, o2, c)
445
#define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \
446
__bs_copy(2, t, h1, o1, h2, o2, c)
447
#define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \
448
__bs_copy(4, t, h1, o1, h2, o2, c)
449
#define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \
450
__bs_copy(8, t, h1, o1, h2, o2, c)
451
452
#define BUS_PEEK_FUNC(width, type) \
453
static inline int \
454
bus_space_peek_##width(bus_space_tag_t tag, \
455
bus_space_handle_t hnd, bus_size_t offset, type *value) \
456
{ \
457
type tmp; \
458
tmp = bus_space_read_##width(tag, hnd, offset); \
459
*value = (type)tmp; \
460
return (0); \
461
}
462
BUS_PEEK_FUNC(1, uint8_t)
463
BUS_PEEK_FUNC(2, uint16_t)
464
BUS_PEEK_FUNC(4, uint32_t)
465
BUS_PEEK_FUNC(8, uint64_t)
466
467
#define BUS_POKE_FUNC(width, type) \
468
static inline int \
469
bus_space_poke_##width(bus_space_tag_t tag, \
470
bus_space_handle_t hnd, bus_size_t offset, type value) \
471
{ \
472
bus_space_write_##width(tag, hnd, offset, value); \
473
return (0); \
474
}
475
BUS_POKE_FUNC(1, uint8_t)
476
BUS_POKE_FUNC(2, uint16_t)
477
BUS_POKE_FUNC(4, uint32_t)
478
BUS_POKE_FUNC(8, uint64_t)
479
480
#include <machine/bus_dma.h>
481
482
#endif /* _MACHINE_BUS_H_ */
483
484