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