Use __insn_barrier() in all bus_space read/write operations.

This commit is contained in:
pk 2003-11-16 11:09:07 +00:00
parent 97bb6a9d59
commit fdd5b03782
1 changed files with 123 additions and 39 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: bus.h,v 1.39 2003/06/15 23:09:05 fvdl Exp $ */ /* $NetBSD: bus.h,v 1.40 2003/11/16 11:09:07 pk Exp $ */
/*- /*-
* Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
@ -438,27 +438,29 @@ int bus_space_probe __P((
((void)(t), *(volatile u_int64_t *)((h) + (o))) ((void)(t), *(volatile u_int64_t *)((h) + (o)))
#if __FULL_SPARC_BUS_SPACE
static __inline__ u_int8_t bus_space_read_1 __P((bus_space_tag_t, static u_int8_t bus_space_read_1 __P((bus_space_tag_t,
bus_space_handle_t, bus_space_handle_t,
bus_size_t)); bus_size_t));
static __inline__ u_int16_t bus_space_read_2 __P((bus_space_tag_t, static u_int16_t bus_space_read_2 __P((bus_space_tag_t,
bus_space_handle_t, bus_space_handle_t,
bus_size_t)); bus_size_t));
static __inline__ u_int32_t bus_space_read_4 __P((bus_space_tag_t, static u_int32_t bus_space_read_4 __P((bus_space_tag_t,
bus_space_handle_t, bus_space_handle_t,
bus_size_t)); bus_size_t));
static __inline__ u_int64_t bus_space_read_8 __P((bus_space_tag_t, static u_int64_t bus_space_read_8 __P((bus_space_tag_t,
bus_space_handle_t, bus_space_handle_t,
bus_size_t)); bus_size_t));
#if __FULL_SPARC_BUS_SPACE
static __inline__ u_int8_t static __inline__ u_int8_t
bus_space_read_1(t, h, o) bus_space_read_1(t, h, o)
bus_space_tag_t t; bus_space_tag_t t;
bus_space_handle_t h; bus_space_handle_t h;
bus_size_t o; bus_size_t o;
{ {
__insn_barrier();
return t->sparc_read_1 ? return t->sparc_read_1 ?
(*t->sparc_read_1)(t, h, o) : (*t->sparc_read_1)(t, h, o) :
bus_space_read_1_real(t, h, o); bus_space_read_1_real(t, h, o);
@ -470,6 +472,7 @@ bus_space_read_2(t, h, o)
bus_space_handle_t h; bus_space_handle_t h;
bus_size_t o; bus_size_t o;
{ {
__insn_barrier();
return t->sparc_read_2 ? return t->sparc_read_2 ?
(*t->sparc_read_2)(t, h, o) : (*t->sparc_read_2)(t, h, o) :
bus_space_read_2_real(t, h, o); bus_space_read_2_real(t, h, o);
@ -481,6 +484,7 @@ bus_space_read_4(t, h, o)
bus_space_handle_t h; bus_space_handle_t h;
bus_size_t o; bus_size_t o;
{ {
__insn_barrier();
return t->sparc_read_4 ? return t->sparc_read_4 ?
(*t->sparc_read_4)(t, h, o) : (*t->sparc_read_4)(t, h, o) :
bus_space_read_4_real(t, h, o); bus_space_read_4_real(t, h, o);
@ -492,6 +496,7 @@ bus_space_read_8(t, h, o)
bus_space_handle_t h; bus_space_handle_t h;
bus_size_t o; bus_size_t o;
{ {
__insn_barrier();
return t->sparc_read_8 ? return t->sparc_read_8 ?
(*t->sparc_read_8)(t, h, o) : (*t->sparc_read_8)(t, h, o) :
bus_space_read_8_real(t, h, o); bus_space_read_8_real(t, h, o);
@ -499,10 +504,45 @@ bus_space_read_8(t, h, o)
#else /* __FULL_SPARC_BUS_SPACE */ #else /* __FULL_SPARC_BUS_SPACE */
#define bus_space_read_1 bus_space_read_1_real static __inline__ u_int8_t
#define bus_space_read_2 bus_space_read_2_real bus_space_read_1(t, h, o)
#define bus_space_read_4 bus_space_read_4_real bus_space_tag_t t;
#define bus_space_read_8 bus_space_read_8_real bus_space_handle_t h;
bus_size_t o;
{
__insn_barrier();
return bus_space_read_1_real(t, h, o);
}
static __inline__ u_int16_t
bus_space_read_2(t, h, o)
bus_space_tag_t t;
bus_space_handle_t h;
bus_size_t o;
{
__insn_barrier();
return bus_space_read_2_real(t, h, o);
}
static __inline__ u_int32_t
bus_space_read_4(t, h, o)
bus_space_tag_t t;
bus_space_handle_t h;
bus_size_t o;
{
__insn_barrier();
return bus_space_read_4_real(t, h, o);
}
static __inline__ u_int64_t
bus_space_read_8(t, h, o)
bus_space_tag_t t;
bus_space_handle_t h;
bus_size_t o;
{
__insn_barrier();
return bus_space_read_8_real(t, h, o);
}
#endif /* __FULL_SPARC_BUS_SPACE */ #endif /* __FULL_SPARC_BUS_SPACE */
@ -538,25 +578,26 @@ bus_space_read_8(t, h, o)
} while (/* CONSTCOND */ 0) } while (/* CONSTCOND */ 0)
#if __FULL_SPARC_BUS_SPACE
static __inline__ void bus_space_write_1 __P((bus_space_tag_t, static void bus_space_write_1 __P((bus_space_tag_t,
bus_space_handle_t, bus_space_handle_t,
bus_size_t, bus_size_t,
const u_int8_t)); const u_int8_t));
static __inline__ void bus_space_write_2 __P((bus_space_tag_t, static void bus_space_write_2 __P((bus_space_tag_t,
bus_space_handle_t, bus_space_handle_t,
bus_size_t, bus_size_t,
const u_int16_t)); const u_int16_t));
static __inline__ void bus_space_write_4 __P((bus_space_tag_t, static void bus_space_write_4 __P((bus_space_tag_t,
bus_space_handle_t, bus_space_handle_t,
bus_size_t, bus_size_t,
const u_int32_t)); const u_int32_t));
static __inline__ void bus_space_write_8 __P((bus_space_tag_t, static void bus_space_write_8 __P((bus_space_tag_t,
bus_space_handle_t, bus_space_handle_t,
bus_size_t, bus_size_t,
const u_int64_t)); const u_int64_t));
#if __FULL_SPARC_BUS_SPACE
static __inline__ void static __inline__ void
bus_space_write_1(t, h, o, v) bus_space_write_1(t, h, o, v)
bus_space_tag_t t; bus_space_tag_t t;
@ -564,6 +605,7 @@ bus_space_write_1(t, h, o, v)
bus_size_t o; bus_size_t o;
u_int8_t v; u_int8_t v;
{ {
__insn_barrier();
if (t->sparc_write_1) if (t->sparc_write_1)
(*t->sparc_write_1)(t, h, o, v); (*t->sparc_write_1)(t, h, o, v);
else else
@ -577,6 +619,7 @@ bus_space_write_2(t, h, o, v)
bus_size_t o; bus_size_t o;
u_int16_t v; u_int16_t v;
{ {
__insn_barrier();
if (t->sparc_write_2) if (t->sparc_write_2)
(*t->sparc_write_2)(t, h, o, v); (*t->sparc_write_2)(t, h, o, v);
else else
@ -590,6 +633,7 @@ bus_space_write_4(t, h, o, v)
bus_size_t o; bus_size_t o;
u_int32_t v; u_int32_t v;
{ {
__insn_barrier();
if (t->sparc_write_4) if (t->sparc_write_4)
(*t->sparc_write_4)(t, h, o, v); (*t->sparc_write_4)(t, h, o, v);
else else
@ -603,6 +647,7 @@ bus_space_write_8(t, h, o, v)
bus_size_t o; bus_size_t o;
u_int64_t v; u_int64_t v;
{ {
__insn_barrier();
if (t->sparc_write_8) if (t->sparc_write_8)
(*t->sparc_write_8)(t, h, o, v); (*t->sparc_write_8)(t, h, o, v);
else else
@ -611,10 +656,49 @@ bus_space_write_8(t, h, o, v)
#else /* __FULL_SPARC_BUS_SPACE */ #else /* __FULL_SPARC_BUS_SPACE */
#define bus_space_write_1 bus_space_write_1_real static __inline__ void
#define bus_space_write_2 bus_space_write_2_real bus_space_write_1(t, h, o, v)
#define bus_space_write_4 bus_space_write_4_real bus_space_tag_t t;
#define bus_space_write_8 bus_space_write_8_real bus_space_handle_t h;
bus_size_t o;
u_int8_t v;
{
__insn_barrier();
bus_space_write_1_real(t, h, o, v);
}
static __inline__ void
bus_space_write_2(t, h, o, v)
bus_space_tag_t t;
bus_space_handle_t h;
bus_size_t o;
u_int16_t v;
{
__insn_barrier();
bus_space_write_2_real(t, h, o, v);
}
static __inline__ void
bus_space_write_4(t, h, o, v)
bus_space_tag_t t;
bus_space_handle_t h;
bus_size_t o;
u_int32_t v;
{
__insn_barrier();
bus_space_write_4_real(t, h, o, v);
}
static __inline__ void
bus_space_write_8(t, h, o, v)
bus_space_tag_t t;
bus_space_handle_t h;
bus_size_t o;
u_int64_t v;
{
__insn_barrier();
bus_space_write_8_real(t, h, o, v);
}
#endif /* __FULL_SPARC_BUS_SPACE */ #endif /* __FULL_SPARC_BUS_SPACE */