Deleted Added
full compact
0a1,2
> /* $NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $ */
>
2c4
< * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
---
> * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
68,69c70
< * $NetBSD: bus.h,v 1.9.4.1 2000/06/30 16:27:30 simonb Exp $
< * $FreeBSD: head/sys/powerpc/include/bus.h 165147 2006-12-13 03:25:31Z marcel $
---
> * $FreeBSD: head/sys/powerpc/include/bus.h 174782 2007-12-19 18:00:50Z marcel $
72,73c73,74
< #ifndef _MACPPC_BUS_H_
< #define _MACPPC_BUS_H_
---
> #ifndef _MACHINE_BUS_H_
> #define _MACHINE_BUS_H_
76d76
< #include <machine/pio.h>
78,81c78,80
< #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF
< #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF
< #define BUS_SPACE_MAXSIZE 0xFFFFFFFF
< #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF
---
> #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
>
> #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF
83c82,85
< #define BUS_SPACE_MAXADDR 0xFFFFFFFF
---
> #define BUS_SPACE_MAXADDR 0xFFFFFFFF
> #define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF
> #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF
> #define BUS_SPACE_MAXSIZE 0xFFFFFFFF
85c87,89
< #define BUS_SPACE_UNRESTRICTED (~0)
---
> #define BUS_SPACE_MAP_CACHEABLE 0x01
> #define BUS_SPACE_MAP_LINEAR 0x02
> #define BUS_SPACE_MAP_PREFETCHABLE 0x04
87,89c91
< /*
< * Values for the macppc bus space tag, not to be used directly by MI code.
< */
---
> #define BUS_SPACE_UNRESTRICTED (~0)
91c93,94
< #define __BUS_SPACE_HAS_STREAM_METHODS 1
---
> #define BUS_SPACE_BARRIER_READ 0x01
> #define BUS_SPACE_BARRIER_WRITE 0x02
93,97c96
< /*
< * Define the PPC tag values
< */
< #define PPC_BUS_SPACE_MEM 1 /* space is mem space */
< #define PPC_BUS_SPACE_IO 2 /* space is io space */
---
> struct bus_space_access;
99,104c98,104
< static __inline void *
< __ppc_ba(bus_space_tag_t tag __unused, bus_space_handle_t handle,
< bus_size_t offset)
< {
< return ((void *)(handle + offset));
< }
---
> struct bus_space {
> /* mapping/unmapping */
> int (*bs_map)(bus_addr_t, bus_size_t, int,
> bus_space_handle_t *);
> void (*bs_unmap)(bus_size_t);
> int (*bs_subregion)(bus_space_handle_t, bus_size_t,
> bus_size_t, bus_space_handle_t *);
106,111c106,109
< /*
< * int bus_space_map(bus_space_tag_t t, bus_addr_t addr,
< * bus_size_t size, int flags, bus_space_handle_t *bshp));
< *
< * Map a region of bus space.
< */
---
> /* allocation/deallocation */
> int (*bs_alloc)(bus_addr_t, bus_addr_t, bus_size_t,
> bus_size_t, bus_size_t, int, bus_addr_t *, bus_space_handle_t *);
> void (*bs_free)(bus_space_handle_t, bus_size_t);
113,117c111,112
< static __inline int
< bus_space_map(bus_space_tag_t t __unused, bus_addr_t addr,
< bus_size_t size __unused, int flags __unused,
< bus_space_handle_t *bshp)
< {
---
> void (*bs_barrier)(bus_space_handle_t, bus_size_t,
> bus_size_t, int);
119,121c114,118
< *bshp = addr;
< return (0);
< }
---
> /* Read single. */
> uint8_t (*bs_r_1)(bus_space_handle_t, bus_size_t);
> uint16_t (*bs_r_2)(bus_space_handle_t, bus_size_t);
> uint32_t (*bs_r_4)(bus_space_handle_t, bus_size_t);
> uint64_t (*bs_r_8)(bus_space_handle_t, bus_size_t);
123,128c120,122
< /*
< * int bus_space_unmap(bus_space_tag_t t,
< * bus_space_handle_t bsh, bus_size_t size));
< *
< * Unmap a region of bus space.
< */
---
> uint16_t (*bs_r_s_2)(bus_space_handle_t, bus_size_t);
> uint32_t (*bs_r_s_4)(bus_space_handle_t, bus_size_t);
> uint64_t (*bs_r_s_8)(bus_space_handle_t, bus_size_t);
130,134c124,132
< static __inline void
< bus_space_unmap(bus_space_tag_t t __unused, bus_space_handle_t bsh __unused,
< bus_size_t size __unused)
< {
< }
---
> /* read multiple */
> void (*bs_rm_1)(bus_space_handle_t, bus_size_t, uint8_t *,
> bus_size_t);
> void (*bs_rm_2)(bus_space_handle_t, bus_size_t, uint16_t *,
> bus_size_t);
> void (*bs_rm_4)(bus_space_handle_t, bus_size_t, uint32_t *,
> bus_size_t);
> void (*bs_rm_8)(bus_space_handle_t, bus_size_t, uint64_t *,
> bus_size_t);
136,142c134,139
< /*
< * int bus_space_subregion(bus_space_tag_t t,
< * bus_space_handle_t bsh, bus_size_t offset, bus_size_t size,
< * bus_space_handle_t *nbshp));
< *
< * Get a new handle for a subregion of an already-mapped area of bus space.
< */
---
> void (*bs_rm_s_2)(bus_space_handle_t, bus_size_t, uint16_t *,
> bus_size_t);
> void (*bs_rm_s_4)(bus_space_handle_t, bus_size_t, uint32_t *,
> bus_size_t);
> void (*bs_rm_s_8)(bus_space_handle_t, bus_size_t, uint64_t *,
> bus_size_t);
144,150c141,149
< static __inline int
< bus_space_subregion(bus_space_tag_t t __unused, bus_space_handle_t bsh,
< bus_size_t offset, bus_size_t size __unused, bus_space_handle_t *nbshp)
< {
< *nbshp = bsh + offset;
< return (0);
< }
---
> /* read region */
> void (*bs_rr_1)(bus_space_handle_t, bus_size_t, uint8_t *,
> bus_size_t);
> void (*bs_rr_2)(bus_space_handle_t, bus_size_t, uint16_t *,
> bus_size_t);
> void (*bs_rr_4)(bus_space_handle_t, bus_size_t, uint32_t *,
> bus_size_t);
> void (*bs_rr_8)(bus_space_handle_t, bus_size_t, uint64_t *,
> bus_size_t);
152,159c151,156
< /*
< * int bus_space_alloc(bus_space_tag_t t, bus_addr_t rstart,
< * bus_addr_t rend, bus_size_t size, bus_size_t align,
< * bus_size_t boundary, int flags, bus_addr_t *addrp,
< * bus_space_handle_t *bshp));
< *
< * Allocate a region of bus space.
< */
---
> void (*bs_rr_s_2)(bus_space_handle_t, bus_size_t, uint16_t *,
> bus_size_t);
> void (*bs_rr_s_4)(bus_space_handle_t, bus_size_t, uint32_t *,
> bus_size_t);
> void (*bs_rr_s_8)(bus_space_handle_t, bus_size_t, uint64_t *,
> bus_size_t);
161,163c158,162
< #if 0
< #define bus_space_alloc(t, rs, re, s, a, b, f, ap, hp) !!! unimplemented !!!
< #endif
---
> /* write */
> void (*bs_w_1)(bus_space_handle_t, bus_size_t, uint8_t);
> void (*bs_w_2)(bus_space_handle_t, bus_size_t, uint16_t);
> void (*bs_w_4)(bus_space_handle_t, bus_size_t, uint32_t);
> void (*bs_w_8)(bus_space_handle_t, bus_size_t, uint64_t);
165,173c164,166
< /*
< * int bus_space_free(bus_space_tag_t t,
< * bus_space_handle_t bsh, bus_size_t size));
< *
< * Free a region of bus space.
< */
< #if 0
< #define bus_space_free(t, h, s) !!! unimplemented !!!
< #endif
---
> void (*bs_w_s_2)(bus_space_handle_t, bus_size_t, uint16_t);
> void (*bs_w_s_4)(bus_space_handle_t, bus_size_t, uint32_t);
> void (*bs_w_s_8)(bus_space_handle_t, bus_size_t, uint64_t);
175,181c168,176
< /*
< * u_intN_t bus_space_read_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset));
< *
< * Read a 1, 2, 4, or 8 byte quantity from bus space
< * described by tag/handle/offset.
< */
---
> /* write multiple */
> void (*bs_wm_1)(bus_space_handle_t, bus_size_t,
> const uint8_t *, bus_size_t);
> void (*bs_wm_2)(bus_space_handle_t, bus_size_t,
> const uint16_t *, bus_size_t);
> void (*bs_wm_4)(bus_space_handle_t, bus_size_t,
> const uint32_t *, bus_size_t);
> void (*bs_wm_8)(bus_space_handle_t, bus_size_t,
> const uint64_t *, bus_size_t);
183,187c178,183
< static __inline u_int8_t
< bus_space_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
< {
< return (in8(__ppc_ba(t, h, o)));
< }
---
> void (*bs_wm_s_2)(bus_space_handle_t, bus_size_t,
> const uint16_t *, bus_size_t);
> void (*bs_wm_s_4)(bus_space_handle_t, bus_size_t,
> const uint32_t *, bus_size_t);
> void (*bs_wm_s_8)(bus_space_handle_t, bus_size_t,
> const uint64_t *, bus_size_t);
189,193c185,193
< static __inline u_int16_t
< bus_space_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
< {
< return (in16rb(__ppc_ba(t, h, o)));
< }
---
> /* write region */
> void (*bs_wr_1)(bus_space_handle_t, bus_size_t,
> const uint8_t *, bus_size_t);
> void (*bs_wr_2)(bus_space_handle_t, bus_size_t,
> const uint16_t *, bus_size_t);
> void (*bs_wr_4)(bus_space_handle_t, bus_size_t,
> const uint32_t *, bus_size_t);
> void (*bs_wr_8)(bus_space_handle_t, bus_size_t,
> const uint64_t *, bus_size_t);
195,199c195,200
< static __inline u_int32_t
< bus_space_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
< {
< return (in32rb(__ppc_ba(t, h, o)));
< }
---
> void (*bs_wr_s_2)(bus_space_handle_t, bus_size_t,
> const uint16_t *, bus_size_t);
> void (*bs_wr_s_4)(bus_space_handle_t, bus_size_t,
> const uint32_t *, bus_size_t);
> void (*bs_wr_s_8)(bus_space_handle_t, bus_size_t,
> const uint64_t *, bus_size_t);
201,203c202,210
< #if 0 /* Cause a link error for bus_space_read_8 */
< #define bus_space_read_8(t, h, o) !!! unimplemented !!!
< #endif
---
> /* set multiple */
> void (*bs_sm_1)(bus_space_handle_t, bus_size_t, uint8_t,
> bus_size_t);
> void (*bs_sm_2)(bus_space_handle_t, bus_size_t, uint16_t,
> bus_size_t);
> void (*bs_sm_4)(bus_space_handle_t, bus_size_t, uint32_t,
> bus_size_t);
> void (*bs_sm_8)(bus_space_handle_t, bus_size_t, uint64_t,
> bus_size_t);
205,209c212,217
< static __inline u_int8_t
< bus_space_read_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
< {
< return (in8(__ppc_ba(t, h, o)));
< }
---
> void (*bs_sm_s_2)(bus_space_handle_t, bus_size_t, uint16_t,
> bus_size_t);
> void (*bs_sm_s_4)(bus_space_handle_t, bus_size_t, uint32_t,
> bus_size_t);
> void (*bs_sm_s_8)(bus_space_handle_t, bus_size_t, uint64_t,
> bus_size_t);
211,215c219,227
< static __inline u_int16_t
< bus_space_read_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
< {
< return (in16(__ppc_ba(t, h, o)));
< }
---
> /* set region */
> void (*bs_sr_1)(bus_space_handle_t, bus_size_t, uint8_t,
> bus_size_t);
> void (*bs_sr_2)(bus_space_handle_t, bus_size_t, uint16_t,
> bus_size_t);
> void (*bs_sr_4)(bus_space_handle_t, bus_size_t, uint32_t,
> bus_size_t);
> void (*bs_sr_8)(bus_space_handle_t, bus_size_t, uint64_t,
> bus_size_t);
217,221c229,234
< static __inline u_int32_t
< bus_space_read_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o)
< {
< return (in32(__ppc_ba(t, h, o)));
< }
---
> void (*bs_sr_s_2)(bus_space_handle_t, bus_size_t, uint16_t,
> bus_size_t);
> void (*bs_sr_s_4)(bus_space_handle_t, bus_size_t, uint32_t,
> bus_size_t);
> void (*bs_sr_s_8)(bus_space_handle_t, bus_size_t, uint64_t,
> bus_size_t);
223,225c236,244
< #if 0 /* Cause a link error for bus_space_read_stream_8 */
< #define bus_space_read_stream_8(t, h, o) !!! unimplemented !!!
< #endif
---
> /* copy region */
> void (*bs_cr_1)(bus_space_handle_t, bus_size_t,
> bus_space_handle_t, bus_size_t, bus_size_t);
> void (*bs_cr_2)(bus_space_handle_t, bus_size_t,
> bus_space_handle_t, bus_size_t, bus_size_t);
> void (*bs_cr_4)(bus_space_handle_t, bus_size_t,
> bus_space_handle_t, bus_size_t, bus_size_t);
> void (*bs_cr_8)(bus_space_handle_t, bus_size_t,
> bus_space_handle_t, bus_size_t, bus_size_t);
227,234c246,252
< /*
< * void bus_space_read_multi_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset,
< * u_intN_t *addr, size_t count));
< *
< * Read `count' 1, 2, 4, or 8 byte quantities from bus space
< * described by tag/handle/offset and copy into buffer provided.
< */
---
> void (*bs_cr_s_2)(bus_space_handle_t, bus_size_t,
> bus_space_handle_t, bus_size_t, bus_size_t);
> void (*bs_cr_s_4)(bus_space_handle_t, bus_size_t,
> bus_space_handle_t, bus_size_t, bus_size_t);
> void (*bs_cr_s_8)(bus_space_handle_t, bus_size_t,
> bus_space_handle_t, bus_size_t, bus_size_t);
> };
236,241c254,255
< static __inline void
< bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< u_int8_t *a, size_t c)
< {
< ins8(__ppc_ba(t, h, o), a, c);
< }
---
> extern struct bus_space bs_be_tag;
> extern struct bus_space bs_le_tag;
243,248c257,258
< static __inline void
< bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< u_int16_t *a, size_t c)
< {
< ins16rb(__ppc_ba(t, h, o), a, c);
< }
---
> #define __bs_c(a,b) __CONCAT(a,b)
> #define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size)
250,255c260,269
< static __inline void
< bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< u_int32_t *a, size_t c)
< {
< ins32rb(__ppc_ba(t, h, o), a, c);
< }
---
> #define __bs_rs(sz, t, h, o) \
> (*(t)->__bs_opname(r,sz))(h, o)
> #define __bs_ws(sz, t, h, o, v) \
> (*(t)->__bs_opname(w,sz))(h, o, v)
> #define __bs_nonsingle(type, sz, t, h, o, a, c) \
> (*(t)->__bs_opname(type,sz))(h, o, a, c)
> #define __bs_set(type, sz, t, h, o, v, c) \
> (*(t)->__bs_opname(type,sz))(h, o, v, c)
> #define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \
> (*(t)->__bs_opname(c,sz))(h1, o1, h2, o2, cnt)
257,259c271,276
< #if 0 /* Cause a link error for bus_space_read_multi_8 */
< #define bus_space_read_multi_8 !!! unimplemented !!!
< #endif
---
> /*
> * Mapping and unmapping operations.
> */
> #define bus_space_map(t, a, s, c, hp) (*(t)->bs_map)(a, s, c, hp)
> #define bus_space_unmap(t, h, s) (*(t)->bs_unmap)(h, s)
> #define bus_space_subregion(t, h, o, s, hp) (*(t)->bs_subregion)(h, o, s, hp)
261,266c278,284
< static __inline void
< bus_space_read_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
< bus_size_t o, u_int8_t *a, size_t c)
< {
< ins8(__ppc_ba(t, h, o), a, c);
< }
---
> /*
> * Allocation and deallocation operations.
> */
> #define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \
> (*(t)->bs_alloc)(rs, re, s, a, b, c, ap, hp)
> #define bus_space_free(t, h, s) \
> (*(t)->bs_free)(h, s)
268,273c286,289
< static __inline void
< bus_space_read_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
< bus_size_t o, u_int16_t *a, size_t c)
< {
< ins16(__ppc_ba(t, h, o), a, c);
< }
---
> /*
> * Bus barrier operations.
> */
> #define bus_space_barrier(t, h, o, l, f) (*(t)->bs_barrier)(h, o, l, f)
275,280c291,297
< static __inline void
< bus_space_read_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
< bus_size_t o, u_int32_t *a, size_t c)
< {
< ins32(__ppc_ba(t, h, o), a, c);
< }
---
> /*
> * Bus read (single) operations.
> */
> #define bus_space_read_1(t, h, o) __bs_rs(1,t,h,o)
> #define bus_space_read_2(t, h, o) __bs_rs(2,t,h,o)
> #define bus_space_read_4(t, h, o) __bs_rs(4,t,h,o)
> #define bus_space_read_8(t, h, o) __bs_rs(8,t,h,o)
282,284c299,302
< #if 0 /* Cause a link error for bus_space_read_multi_stream_8 */
< #define bus_space_read_multi_stream_8 !!! unimplemented !!!
< #endif
---
> #define bus_space_read_stream_1 bus_space_read_1
> #define bus_space_read_stream_2(t, h, o) __bs_rs(s_2,t,h,o)
> #define bus_space_read_stream_4(t, h, o) __bs_rs(s_4,t,h,o)
> #define bus_space_read_stream_8(t, h, o) __bs_rs(s_8,t,h,o)
287,293c305
< * void bus_space_read_region_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset,
< * u_intN_t *addr, size_t count));
< *
< * Read `count' 1, 2, 4, or 8 byte quantities from bus space
< * described by tag/handle and starting at `offset' and copy into
< * buffer provided.
---
> * Bus read multiple operations.
294a307,314
> #define bus_space_read_multi_1(t, h, o, a, c) \
> __bs_nonsingle(rm,1,(t),(h),(o),(a),(c))
> #define bus_space_read_multi_2(t, h, o, a, c) \
> __bs_nonsingle(rm,2,(t),(h),(o),(a),(c))
> #define bus_space_read_multi_4(t, h, o, a, c) \
> __bs_nonsingle(rm,4,(t),(h),(o),(a),(c))
> #define bus_space_read_multi_8(t, h, o, a, c) \
> __bs_nonsingle(rm,8,(t),(h),(o),(a),(c))
296,300c316,322
< static __inline void
< bus_space_read_region_1(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int8_t *addr, size_t count)
< {
< volatile u_int8_t *s = __ppc_ba(tag, bsh, offset);
---
> #define bus_space_read_multi_stream_1 bus_space_read_multi_1
> #define bus_space_read_multi_stream_2(t, h, o, a, c) \
> __bs_nonsingle(rm,s_2,(t),(h),(o),(a),(c))
> #define bus_space_read_multi_stream_4(t, h, o, a, c) \
> __bs_nonsingle(rm,s_4,(t),(h),(o),(a),(c))
> #define bus_space_read_multi_stream_8(t, h, o, a, c) \
> __bs_nonsingle(rm,s_8,(t),(h),(o),(a),(c))
302,360d323
< while (count--)
< *addr++ = *s++;
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_read_region_2(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int16_t *addr, size_t count)
< {
< volatile u_int16_t *s = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< __asm __volatile("lhbrx %0, 0, %1" :
< "=r"(*addr++) : "r"(s++));
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_read_region_4(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int32_t *addr, size_t count)
< {
< volatile u_int32_t *s = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< __asm __volatile("lwbrx %0, 0, %1" :
< "=r"(*addr++) : "r"(s++));
< __asm __volatile("eieio; sync");
< }
<
< #if 0 /* Cause a link error for bus_space_read_region_8 */
< #define bus_space_read_region_8 !!! unimplemented !!!
< #endif
<
< static __inline void
< bus_space_read_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int16_t *addr, size_t count)
< {
< volatile u_int16_t *s = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< *addr++ = *s++;
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_read_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int32_t *addr, size_t count)
< {
< volatile u_int32_t *s = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< *addr++ = *s++;
< __asm __volatile("eieio; sync");
< }
<
< #if 0 /* Cause a link error */
< #define bus_space_read_region_stream_8 !!! unimplemented !!!
< #endif
<
362,367c325
< * void bus_space_write_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset,
< * u_intN_t value));
< *
< * Write the 1, 2, 4, or 8 byte value `value' to bus space
< * described by tag/handle/offset.
---
> * Bus read region operations.
368a327,334
> #define bus_space_read_region_1(t, h, o, a, c) \
> __bs_nonsingle(rr,1,(t),(h),(o),(a),(c))
> #define bus_space_read_region_2(t, h, o, a, c) \
> __bs_nonsingle(rr,2,(t),(h),(o),(a),(c))
> #define bus_space_read_region_4(t, h, o, a, c) \
> __bs_nonsingle(rr,4,(t),(h),(o),(a),(c))
> #define bus_space_read_region_8(t, h, o, a, c) \
> __bs_nonsingle(rr,8,(t),(h),(o),(a),(c))
370,375c336,342
< static __inline void
< bus_space_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint8_t v)
< {
< out8(__ppc_ba(t, h, o), v);
< }
---
> #define bus_space_read_region_stream_1 bus_space_read_region_1
> #define bus_space_read_region_stream_2(t, h, o, a, c) \
> __bs_nonsingle(rr,s_2,(t),(h),(o),(a),(c))
> #define bus_space_read_region_stream_4(t, h, o, a, c) \
> __bs_nonsingle(rr,s_4,(t),(h),(o),(a),(c))
> #define bus_space_read_region_stream_8(t, h, o, a, c) \
> __bs_nonsingle(rr,s_8,(t),(h),(o),(a),(c))
377,420d343
< static __inline void
< bus_space_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint16_t v)
< {
< out16rb(__ppc_ba(t, h, o), v);
< }
<
< static __inline void
< bus_space_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint32_t v)
< {
< out32rb(__ppc_ba(t, h, o), v);
< }
<
< #if 0 /* Cause a link error for bus_space_write_8 */
< #define bus_space_write_8 !!! unimplemented !!!
< #endif
<
< static __inline void
< bus_space_write_stream_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint8_t v)
< {
< out8(__ppc_ba(t, h, o), v);
< }
<
< static __inline void
< bus_space_write_stream_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint16_t v)
< {
< out16(__ppc_ba(t, h, o), v);
< }
<
< static __inline void
< bus_space_write_stream_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint32_t v)
< {
< out32(__ppc_ba(t, h, o), v);
< }
<
< #if 0 /* Cause a link error for bus_space_write_stream_8 */
< #define bus_space_write_stream_8 !!! unimplemented !!!
< #endif
<
<
422,427c345
< * void bus_space_write_multi_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset,
< * const u_intN_t *addr, size_t count));
< *
< * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
< * provided to bus space described by tag/handle/offset.
---
> * Bus write (single) operations.
428a347,350
> #define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v))
> #define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v))
> #define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v))
> #define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v))
430,435c352,355
< static __inline void
< bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint8_t *a, size_t c)
< {
< outsb(__ppc_ba(t, h, o), a, c);
< }
---
> #define bus_space_write_stream_1 bus_space_write_1
> #define bus_space_write_stream_2(t, h, o, v) __bs_ws(s_2,(t),(h),(o),(v))
> #define bus_space_write_stream_4(t, h, o, v) __bs_ws(s_4,(t),(h),(o),(v))
> #define bus_space_write_stream_8(t, h, o, v) __bs_ws(s_8,(t),(h),(o),(v))
437,479d356
< static __inline void
< bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint16_t *a, size_t c)
< {
< outsw(__ppc_ba(t, h, o), a, c);
< }
<
< static __inline void
< bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
< uint32_t *a, size_t c)
< {
< outsl(__ppc_ba(t, h, o), a, c);
< }
<
< #if 0
< #define bus_space_write_multi_8 !!! unimplemented !!!
< #endif
<
< static __inline void
< bus_space_write_multi_stream_1(bus_space_tag_t t, bus_space_handle_t h,
< bus_size_t o, const u_int8_t *a, size_t c)
< {
< outsb(__ppc_ba(t, h, o), a, c);
< }
<
< static __inline void
< bus_space_write_multi_stream_2(bus_space_tag_t t, bus_space_handle_t h,
< bus_size_t o, const u_int16_t *a, size_t c)
< {
< outsw(__ppc_ba(t, h, o), a, c);
< }
<
< static __inline void
< bus_space_write_multi_stream_4(bus_space_tag_t t, bus_space_handle_t h,
< bus_size_t o, const u_int32_t *a, size_t c)
< {
< outsl(__ppc_ba(t, h, o), a, c);
< }
<
< #if 0
< #define bus_space_write_multi_stream_8 !!! unimplemented !!!
< #endif
<
481,486c358
< * void bus_space_write_region_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset,
< * const u_intN_t *addr, size_t count));
< *
< * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided
< * to bus space described by tag/handle starting at `offset'.
---
> * Bus write multiple operations.
487a360,367
> #define bus_space_write_multi_1(t, h, o, a, c) \
> __bs_nonsingle(wm,1,(t),(h),(o),(a),(c))
> #define bus_space_write_multi_2(t, h, o, a, c) \
> __bs_nonsingle(wm,2,(t),(h),(o),(a),(c))
> #define bus_space_write_multi_4(t, h, o, a, c) \
> __bs_nonsingle(wm,4,(t),(h),(o),(a),(c))
> #define bus_space_write_multi_8(t, h, o, a, c) \
> __bs_nonsingle(wm,8,(t),(h),(o),(a),(c))
489,493c369,375
< static __inline void
< bus_space_write_region_1(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, const u_int8_t *addr, size_t count)
< {
< volatile u_int8_t *d = __ppc_ba(tag, bsh, offset);
---
> #define bus_space_write_multi_stream_1 bus_space_write_multi_1
> #define bus_space_write_multi_stream_2(t, h, o, a, c) \
> __bs_nonsingle(wm,s_2,(t),(h),(o),(a),(c))
> #define bus_space_write_multi_stream_4(t, h, o, a, c) \
> __bs_nonsingle(wm,s_4,(t),(h),(o),(a),(c))
> #define bus_space_write_multi_stream_8(t, h, o, a, c) \
> __bs_nonsingle(wm,s_8,(t),(h),(o),(a),(c))
495,553d376
< while (count--)
< *d++ = *addr++;
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_write_region_2(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, const u_int16_t *addr, size_t count)
< {
< volatile u_int16_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< __asm __volatile("sthbrx %0, 0, %1" ::
< "r"(*addr++), "r"(d++));
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_write_region_4(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, const u_int32_t *addr, size_t count)
< {
< volatile u_int32_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< __asm __volatile("stwbrx %0, 0, %1" ::
< "r"(*addr++), "r"(d++));
< __asm __volatile("eieio; sync");
< }
<
< #if 0
< #define bus_space_write_region_8 !!! bus_space_write_region_8 unimplemented !!!
< #endif
<
< static __inline void
< bus_space_write_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, const u_int16_t *addr, size_t count)
< {
< volatile u_int16_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< *d++ = *addr++;
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_write_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, const u_int32_t *addr, size_t count)
< {
< volatile u_int32_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< *d++ = *addr++;
< __asm __volatile("eieio; sync");
< }
<
< #if 0
< #define bus_space_write_region_stream_8 !!! unimplemented !!!
< #endif
<
555,560c378
< * void bus_space_set_multi_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val,
< * size_t count));
< *
< * Write the 1, 2, 4, or 8 byte value `val' to bus space described
< * by tag/handle/offset `count' times.
---
> * Bus write region operations.
561a380,387
> #define bus_space_write_region_1(t, h, o, a, c) \
> __bs_nonsingle(wr,1,(t),(h),(o),(a),(c))
> #define bus_space_write_region_2(t, h, o, a, c) \
> __bs_nonsingle(wr,2,(t),(h),(o),(a),(c))
> #define bus_space_write_region_4(t, h, o, a, c) \
> __bs_nonsingle(wr,4,(t),(h),(o),(a),(c))
> #define bus_space_write_region_8(t, h, o, a, c) \
> __bs_nonsingle(wr,8,(t),(h),(o),(a),(c))
563,567c389,395
< static __inline void
< bus_space_set_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int8_t val, size_t count)
< {
< volatile u_int8_t *d = __ppc_ba(tag, bsh, offset);
---
> #define bus_space_write_region_stream_1 bus_space_write_region_1
> #define bus_space_write_region_stream_2(t, h, o, a, c) \
> __bs_nonsingle(wr,s_2,(t),(h),(o),(a),(c))
> #define bus_space_write_region_stream_4(t, h, o, a, c) \
> __bs_nonsingle(wr,s_4,(t),(h),(o),(a),(c))
> #define bus_space_write_region_stream_8(t, h, o, a, c) \
> __bs_nonsingle(wr,s_8,(t),(h),(o),(a),(c))
569,627d396
< while (count--)
< *d = val;
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_set_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int16_t val, size_t count)
< {
< volatile u_int16_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< __asm __volatile("sthbrx %0, 0, %1" ::
< "r"(val), "r"(d));
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_set_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int32_t val, size_t count)
< {
< volatile u_int32_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< __asm __volatile("stwbrx %0, 0, %1" ::
< "r"(val), "r"(d));
< __asm __volatile("eieio; sync");
< }
<
< #if 0
< #define bus_space_set_multi_8 !!! bus_space_set_multi_8 unimplemented !!!
< #endif
<
< static __inline void
< bus_space_set_multi_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int16_t val, size_t count)
< {
< volatile u_int16_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< *d = val;
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_set_multi_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int32_t val, size_t count)
< {
< volatile u_int32_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< *d = val;
< __asm __volatile("eieio; sync");
< }
<
< #if 0
< #define bus_space_set_multi_stream_8 !!! unimplemented !!!
< #endif
<
629,634c398
< * void bus_space_set_region_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val,
< * size_t count));
< *
< * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described
< * by tag/handle starting at `offset'.
---
> * Set multiple operations.
635a400,407
> #define bus_space_set_multi_1(t, h, o, v, c) \
> __bs_set(sm,1,(t),(h),(o),(v),(c))
> #define bus_space_set_multi_2(t, h, o, v, c) \
> __bs_set(sm,2,(t),(h),(o),(v),(c))
> #define bus_space_set_multi_4(t, h, o, v, c) \
> __bs_set(sm,4,(t),(h),(o),(v),(c))
> #define bus_space_set_multi_8(t, h, o, v, c) \
> __bs_set(sm,8,(t),(h),(o),(v),(c))
637,641c409,415
< static __inline void
< bus_space_set_region_1(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int8_t val, size_t count)
< {
< volatile u_int8_t *d = __ppc_ba(tag, bsh, offset);
---
> #define bus_space_set_multi_stream_1 bus_space_set_multi_1
> #define bus_space_set_multi_stream_2(t, h, o, v, c) \
> __bs_set(sm,s_2,(t),(h),(o),(v),(c))
> #define bus_space_set_multi_stream_4(t, h, o, v, c) \
> __bs_set(sm,s_4,(t),(h),(o),(v),(c))
> #define bus_space_set_multi_stream_8(t, h, o, v, c) \
> __bs_set(sm,s_8,(t),(h),(o),(v),(c))
643,701d416
< while (count--)
< *d++ = val;
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_set_region_2(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int16_t val, size_t count)
< {
< volatile u_int16_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< __asm __volatile("sthbrx %0, 0, %1" ::
< "r"(val), "r"(d++));
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_set_region_4(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int32_t val, size_t count)
< {
< volatile u_int32_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< __asm __volatile("stwbrx %0, 0, %1" ::
< "r"(val), "r"(d++));
< __asm __volatile("eieio; sync");
< }
<
< #if 0
< #define bus_space_set_region_8 !!! bus_space_set_region_8 unimplemented !!!
< #endif
<
< static __inline void
< bus_space_set_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int16_t val, size_t count)
< {
< volatile u_int16_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< *d++ = val;
< __asm __volatile("eieio; sync");
< }
<
< static __inline void
< bus_space_set_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh,
< bus_size_t offset, u_int32_t val, size_t count)
< {
< volatile u_int32_t *d = __ppc_ba(tag, bsh, offset);
<
< while (count--)
< *d++ = val;
< __asm __volatile("eieio; sync");
< }
<
< #if 0
< #define bus_space_set_region_stream_8 !!! unimplemented !!!
< #endif
<
703,709c418
< * void bus_space_copy_region_N(bus_space_tag_t tag,
< * bus_space_handle_t bsh1, bus_size_t off1,
< * bus_space_handle_t bsh2, bus_size_t off2,
< * size_t count));
< *
< * Copy `count' 1, 2, 4, or 8 byte values from bus space starting
< * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2.
---
> * Set region operations.
710a420,427
> #define bus_space_set_region_1(t, h, o, v, c) \
> __bs_set(sr,1,(t),(h),(o),(v),(c))
> #define bus_space_set_region_2(t, h, o, v, c) \
> __bs_set(sr,2,(t),(h),(o),(v),(c))
> #define bus_space_set_region_4(t, h, o, v, c) \
> __bs_set(sr,4,(t),(h),(o),(v),(c))
> #define bus_space_set_region_8(t, h, o, v, c) \
> __bs_set(sr,8,(t),(h),(o),(v),(c))
712c429,435
< /* XXX IMPLEMENT bus_space_copy_N() XXX */
---
> #define bus_space_set_region_stream_1 bus_space_set_region_1
> #define bus_space_set_region_stream_2(t, h, o, v, c) \
> __bs_set(sr,s_2,(t),(h),(o),(v),(c))
> #define bus_space_set_region_stream_4(t, h, o, v, c) \
> __bs_set(sr,s_4,(t),(h),(o),(v),(c))
> #define bus_space_set_region_stream_8(t, h, o, v, c) \
> __bs_set(sr,s_8,(t),(h),(o),(v),(c))
713a437
> #if 0
715,722c439
< * Bus read/write barrier methods.
< *
< * void bus_space_barrier(bus_space_tag_t tag,
< * bus_space_handle_t bsh, bus_size_t offset,
< * bus_size_t len, int flags));
< *
< * Note: the macppc does not currently require barriers, but we must
< * provide the flags to MI code.
---
> * Copy operations.
723a441,448
> #define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \
> __bs_copy(1, t, h1, o1, h2, o2, c)
> #define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \
> __bs_copy(2, t, h1, o1, h2, o2, c)
> #define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \
> __bs_copy(4, t, h1, o1, h2, o2, c)
> #define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \
> __bs_copy(8, t, h1, o1, h2, o2, c)
725,726c450,457
< #define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */
< #define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */
---
> #define bus_space_copy_region_stream_1 bus_space_copy_region_1
> #define bus_space_copy_region_stream_2(t, h1, o1, h2, o2, c) \
> __bs_copy(s_2, t, h1, o1, h2, o2, c)
> #define bus_space_copy_region_stream_4(t, h1, o1, h2, o2, c) \
> __bs_copy(s_4, t, h1, o1, h2, o2, c)
> #define bus_space_copy_region_stream_8(t, h1, o1, h2, o2, c) \
> __bs_copy(s_8, t, h1, o1, h2, o2, c)
> #endif
728,738d458
< static __inline void
< bus_space_barrier(bus_space_tag_t tag __unused,
< bus_space_handle_t bsh __unused, bus_size_t offset __unused,
< bus_size_t len __unused, int flags __unused)
< {
< __asm __volatile("" : : : "memory");
< }
<
<
< #define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
<
741c461
< #endif /* _MACPPC_BUS_H_ */
---
> #endif /* _MACHINE_BUS_H_ */