Implement the bus space interfaces for set multiple, set region and copy.

This commit is contained in:
mark 1997-01-26 01:49:01 +00:00
parent f36384ee92
commit de7c5e2195
3 changed files with 297 additions and 59 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: bus.h,v 1.2 1997/01/13 00:33:36 mark Exp $ */
/* $NetBSD: bus.h,v 1.3 1997/01/26 01:49:01 mark Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
@ -64,6 +64,10 @@ struct bus_space {
void (*bs_free) __P((void *, bus_space_handle_t,
bus_size_t));
/* barrier */
void (*bs_barrier) __P((void *, bus_space_handle_t,
bus_size_t, bus_size_t, int));
/* read (single) */
u_int8_t (*bs_r_1) __P((void *, bus_space_handle_t,
bus_size_t));
@ -74,7 +78,7 @@ struct bus_space {
u_int64_t (*bs_r_8) __P((void *, bus_space_handle_t,
bus_size_t));
/* read multi */
/* read multiple */
void (*bs_rm_1) __P((void *, bus_space_handle_t,
bus_size_t, u_int8_t *, bus_size_t));
void (*bs_rm_2) __P((void *, bus_space_handle_t,
@ -104,7 +108,7 @@ struct bus_space {
void (*bs_w_8) __P((void *, bus_space_handle_t,
bus_size_t, u_int64_t));
/* write multi */
/* write multiple */
void (*bs_wm_1) __P((void *, bus_space_handle_t,
bus_size_t, const u_int8_t *, bus_size_t));
void (*bs_wm_2) __P((void *, bus_space_handle_t,
@ -124,18 +128,36 @@ struct bus_space {
void (*bs_wr_8) __P((void *, bus_space_handle_t,
bus_size_t, const u_int64_t *, bus_size_t));
/* set multi */
/* XXX IMPLEMENT */
/* set multiple */
void (*bs_sm_1) __P((void *, bus_space_handle_t,
bus_size_t, u_int8_t, bus_size_t));
void (*bs_sm_2) __P((void *, bus_space_handle_t,
bus_size_t, u_int16_t, bus_size_t));
void (*bs_sm_4) __P((void *, bus_space_handle_t,
bus_size_t, u_int32_t, bus_size_t));
void (*bs_sm_8) __P((void *, bus_space_handle_t,
bus_size_t, u_int64_t, bus_size_t));
/* set region */
/* XXX IMPLEMENT */
void (*bs_sr_1) __P((void *, bus_space_handle_t,
bus_size_t, u_int8_t, bus_size_t));
void (*bs_sr_2) __P((void *, bus_space_handle_t,
bus_size_t, u_int16_t, bus_size_t));
void (*bs_sr_4) __P((void *, bus_space_handle_t,
bus_size_t, u_int32_t, bus_size_t));
void (*bs_sr_8) __P((void *, bus_space_handle_t,
bus_size_t, u_int64_t, bus_size_t));
/* copy */
/* XXX IMPLEMENT */
void (*bs_c_1) __P((void *, bus_space_handle_t, bus_size_t,
bus_space_handle_t, bus_size_t, bus_size_t));
void (*bs_c_2) __P((void *, bus_space_handle_t, bus_size_t,
bus_space_handle_t, bus_size_t, bus_size_t));
void (*bs_c_4) __P((void *, bus_space_handle_t, bus_size_t,
bus_space_handle_t, bus_size_t, bus_size_t));
void (*bs_c_8) __P((void *, bus_space_handle_t, bus_size_t,
bus_space_handle_t, bus_size_t, bus_size_t));
/* barrier */
void (*bs_barrier) __P((void *, bus_space_handle_t,
bus_size_t, bus_size_t, int));
};
@ -147,10 +169,14 @@ struct bus_space {
#define __bs_rs(sz, t, h, o) \
(*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o)
#define __bs_ws(sz, t, h, o, v) \
#define __bs_ws(sz, t, h, o, v) \
(*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v)
#define __bs_nonsingle(type, sz, t, h, o, a, c) \
#define __bs_nonsingle(type, sz, t, h, o, a, c) \
(*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c)
#define __bs_set(type, sz, t, h, o, v, c) \
(*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c)
#define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \
(*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt)
/*
@ -173,6 +199,14 @@ struct bus_space {
#define bus_space_free(t, h, s) \
(*(t)->bs_free)((t)->bs_cookie, (h), (s))
/*
* Bus barrier operations.
*/
#define bus_space_barrier(t, h, o, l, f) \
(*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f))
#define BUS_BARRIER_READ 0x01
#define BUS_BARRIER_WRITE 0x02
/*
* Bus read (single) operations.
@ -247,30 +281,42 @@ struct bus_space {
/*
* Set multiple operations.
*/
/* XXX IMPLEMENT */
#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))
/*
* Set region operations.
*/
/* XXX IMPLEMENT */
#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))
/*
* Copy operations.
*/
/* XXX IMPLEMENT */
#define bus_space_copy_1(t, h1, o1, h2, o2, c) \
__bs_copy(1, t, h1, o1, h2, o2, c)
#define bus_space_copy_2(t, h1, o1, h2, o2, c) \
__bs_copy(2, t, h1, o1, h2, o2, c)
#define bus_space_copy_4(t, h1, o1, h2, o2, c) \
__bs_copy(4, t, h1, o1, h2, o2, c)
#define bus_space_copy_8(t, h1, o1, h2, o2, c) \
__bs_copy(8, t, h1, o1, h2, o2, c)
/*
* Bus barrier operations.
*/
#define bus_space_barrier(t, h, o, l, f) \
(*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f))
#define BUS_BARRIER_READ 0x01
#define BUS_BARRIER_WRITE 0x02
/*
* Macros to provide prototypes for all the functions used in the
* bus_space structure
@ -320,20 +366,20 @@ u_int64_t __bs_c(f,_r_8) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset));
#define bs_w_1_proto(f) \
void __bs_c(f,_w_1) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int8_t value));
void __bs_c(f,_w_1) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int8_t value));
#define bs_w_2_proto(f) \
void __bs_c(f,_w_2) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int16_t value));
void __bs_c(f,_w_2) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int16_t value));
#define bs_w_4_proto(f) \
void __bs_c(f,_w_4) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int32_t value));
void __bs_c(f,_w_4) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int32_t value));
#define bs_w_8_proto(f) \
void __bs_c(f,_w_8) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int64_t value));
void __bs_c(f,_w_8) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int64_t value));
#define bs_rm_1_proto(f) \
void __bs_c(f,_rm_1) __P((void *t, bus_space_handle_t bsh, \
@ -399,12 +445,65 @@ void __bs_c(f, _wr_4) __P((void *t, bus_space_handle_t bsh, \
void __bs_c(f, _wr_8) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, const u_int64_t *addr, bus_size_t count));
#define bs_sm_1_proto(f) \
void __bs_c(f,_sm_1) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int8_t value, bus_size_t count));
#define bs_sm_2_proto(f) \
void __bs_c(f,_sm_2) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int16_t value, bus_size_t count));
#define bs_sm_4_proto(f) \
void __bs_c(f,_sm_4) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int32_t value, bus_size_t count));
#define bs_sm_8_proto(f) \
void __bs_c(f,_sm_8) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int64_t value, bus_size_t count));
#define bs_sr_1_proto(f) \
void __bs_c(f,_sr_1) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int8_t value, bus_size_t count));
#define bs_sr_2_proto(f) \
void __bs_c(f,_sr_2) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int16_t value, bus_size_t count));
#define bs_sr_4_proto(f) \
void __bs_c(f,_sr_4) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int32_t value, bus_size_t count));
#define bs_sr_8_proto(f) \
void __bs_c(f,_sr_8) __P((void *t, bus_space_handle_t bsh, \
bus_size_t offset, u_int64_t value, bus_size_t count));
#define bs_c_1_proto(f) \
void __bs_c(f,_c_1) __P((void *t, bus_space_handle_t bsh1, \
bus_size_t offset1, bus_space_handle_t bsh2, \
bus_size_t offset2, bus_size_t count));
#define bs_c_2_proto(f) \
void __bs_c(f,_c_2) __P((void *t, bus_space_handle_t bsh1, \
bus_size_t offset1, bus_space_handle_t bsh2, \
bus_size_t offset2, bus_size_t count));
#define bs_c_4_proto(f) \
void __bs_c(f,_c_4) __P((void *t, bus_space_handle_t bsh1, \
bus_size_t offset1, bus_space_handle_t bsh2, \
bus_size_t offset2, bus_size_t count));
#define bs_c_8_proto(f) \
void __bs_c(f,_c_8) __P((void *t, bus_space_handle_t bsh1, \
bus_size_t offset1, bus_space_handle_t bsh2, \
bus_size_t offset2, bus_size_t count));
#define bs_protos(f) \
bs_map_proto(f); \
bs_unmap_proto(f); \
bs_subregion_proto(f); \
bs_alloc_proto(f); \
bs_free_proto(f); \
bs_barrier_proto(f); \
bs_r_1_proto(f); \
bs_r_2_proto(f); \
bs_r_4_proto(f); \
@ -429,6 +528,17 @@ bs_wr_1_proto(f); \
bs_wr_2_proto(f); \
bs_wr_4_proto(f); \
bs_wr_8_proto(f); \
bs_barrier_proto(f);
bs_sm_1_proto(f); \
bs_sm_2_proto(f); \
bs_sm_4_proto(f); \
bs_sm_8_proto(f); \
bs_sr_1_proto(f); \
bs_sr_2_proto(f); \
bs_sr_4_proto(f); \
bs_sr_8_proto(f); \
bs_c_1_proto(f); \
bs_c_2_proto(f); \
bs_c_4_proto(f); \
bs_c_8_proto(f);
#endif /* _ARM32_BUS_H_ */

View File

@ -1,4 +1,4 @@
/* $NetBSD: mainbus_io.c,v 1.1 1997/01/13 00:37:51 mark Exp $ */
/* $NetBSD: mainbus_io.c,v 1.2 1997/01/26 01:50:17 mark Exp $ */
/*
* Copyright (c) 1997 Mark Brinicombe.
@ -59,13 +59,16 @@ struct bus_space mainbus_bs_tag = {
mainbus_alloc,
mainbus_free,
/* barrier */
mainbus_barrier,
/* read (single) */
mainbus_r_1,
mainbus_r_2,
mainbus_r_4,
mainbus_r_8,
/* read multi */
/* read multiple */
mainbus_rm_1,
mainbus_rm_2,
mainbus_rm_4,
@ -83,7 +86,7 @@ struct bus_space mainbus_bs_tag = {
mainbus_w_4,
mainbus_w_8,
/* write multi */
/* write multiple */
mainbus_wm_1,
mainbus_wm_2,
mainbus_wm_4,
@ -95,17 +98,23 @@ struct bus_space mainbus_bs_tag = {
mainbus_wr_4,
mainbus_wr_8,
/* set multi */
/* XXX IMPLEMENT */
/* set multiple */
mainbus_sm_1,
mainbus_sm_2,
mainbus_sm_4,
mainbus_sm_8,
/* set region */
/* XXX IMPLEMENT */
mainbus_sr_1,
mainbus_sr_2,
mainbus_sr_4,
mainbus_sr_8,
/* copy */
/* XXX IMPLEMENT */
/* barrier */
mainbus_barrier
mainbus_c_1,
mainbus_c_2,
mainbus_c_4,
mainbus_c_8,
};
/* bus space functions */

View File

@ -1,4 +1,4 @@
/* $NetBSD: mainbus_io_asm.S,v 1.1 1997/01/13 00:37:53 mark Exp $ */
/* $NetBSD: mainbus_io_asm.S,v 1.2 1997/01/26 01:50:18 mark Exp $ */
/*
* Copyright (c) 1997 Mark Brinicombe.
@ -99,7 +99,7 @@ _mainbus_w_8:
b _panic
mainbus_w_8_text:
.asciz "mainbus_w_8(%x,%x): Not implemented\n"
.asciz "mainbus_w_8(%x,%x,%x): Not implemented\n"
.align 0
/*
@ -112,7 +112,7 @@ _mainbus_rm_1:
b _panic
mainbus_rm_1_text:
.asciz "mainbus_rm_1(%x,%x,%x): Not implemented\n"
.asciz "mainbus_rm_1(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_rm_2
@ -128,7 +128,7 @@ _mainbus_rm_4:
b _panic
mainbus_rm_4_text:
.asciz "mainbus_rm_4(%x,%x,%x): Not implemented\n"
.asciz "mainbus_rm_4(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_rm_8
@ -137,7 +137,7 @@ _mainbus_rm_8:
b _panic
mainbus_rm_8_text:
.asciz "mainbus_rm_8(%x,%x,%x): Not implemented\n"
.asciz "mainbus_rm_8(%x,%x,%x,%x): Not implemented\n"
.align 0
/*
@ -150,7 +150,7 @@ _mainbus_wm_1:
b _panic
mainbus_wm_1_text:
.asciz "mainbus_wm_1(%x,%x,%x): Not implemented\n"
.asciz "mainbus_wm_1(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_wm_2
@ -166,7 +166,7 @@ _mainbus_wm_4:
b _panic
mainbus_wm_4_text:
.asciz "mainbus_wm_4(%x,%x,%x): Not implemented\n"
.asciz "mainbus_wm_4(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_wm_8
@ -175,7 +175,7 @@ _mainbus_wm_8:
b _panic
mainbus_wm_8_text:
.asciz "mainbus_wm_8(%x,%x,%x): Not implemented\n"
.asciz "mainbus_wm_8(%x,%x,%x,%x): Not implemented\n"
.align 0
/*
@ -188,7 +188,7 @@ _mainbus_rr_1:
b _panic
mainbus_rr_1_text:
.asciz "mainbus_rr_1(%x,%x,%x): Not implemented\n"
.asciz "mainbus_rr_1(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_rr_2
@ -197,7 +197,7 @@ _mainbus_rr_2:
b _panic
mainbus_rr_2_text:
.asciz "mainbus_rr_2(%x,%x,%x): Not implemented\n"
.asciz "mainbus_rr_2(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_rr_4
@ -206,7 +206,7 @@ _mainbus_rr_4:
b _panic
mainbus_rr_4_text:
.asciz "mainbus_rr_4(%x,%x,%x): Not implemented\n"
.asciz "mainbus_rr_4(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_rr_8
@ -215,7 +215,7 @@ _mainbus_rr_8:
b _panic
mainbus_rr_8_text:
.asciz "mainbus_rr_8(%x,%x,%x): Not implemented\n"
.asciz "mainbus_rr_8(%x,%x,%x,%x): Not implemented\n"
.align 0
/*
@ -228,7 +228,7 @@ _mainbus_wr_1:
b _panic
mainbus_wr_1_text:
.asciz "mainbus_wr_1(%x,%x,%x): Not implemented\n"
.asciz "mainbus_wr_1(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_wr_2
@ -237,7 +237,7 @@ _mainbus_wr_2:
b _panic
mainbus_wr_2_text:
.asciz "mainbus_wr_2(%x,%x,%x): Not implemented\n"
.asciz "mainbus_wr_2(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_wr_4
@ -246,7 +246,7 @@ _mainbus_wr_4:
b _panic
mainbus_wr_4_text:
.asciz "mainbus_wr_4(%x,%x,%x): Not implemented\n"
.asciz "mainbus_wr_4(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_wr_8
@ -255,6 +255,125 @@ _mainbus_wr_8:
b _panic
mainbus_wr_8_text:
.asciz "mainbus_wr_8(%x,%x,%x): Not implemented\n"
.asciz "mainbus_wr_8(%x,%x,%x,%x): Not implemented\n"
.align 0
/*
* set multiple
*/
.global _mainbus_sm_1
_mainbus_sm_1:
adr r0, mainbus_sm_1_text
b _panic
mainbus_sm_1_text:
.asciz "mainbus_sm_1(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_sm_2
_mainbus_sm_2:
adr r0, mainbus_sm_2_text
b _panic
mainbus_sm_2_text:
.asciz "mainbus_sm_2(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_sm_4
_mainbus_sm_4:
adr r0, mainbus_sm_4_text
b _panic
mainbus_sm_4_text:
.asciz "mainbus_sm_4(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_sm_8
_mainbus_sm_8:
adr r0, mainbus_sm_8_text
b _panic
mainbus_sm_8_text:
.asciz "mainbus_sm_8(%x,%x,%x,%x): Not implemented\n"
.align 0
/*
* set region
*/
.global _mainbus_sr_1
_mainbus_sr_1:
adr r0, mainbus_sr_1_text
b _panic
mainbus_sr_1_text:
.asciz "mainbus_sr_1(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_sr_2
_mainbus_sr_2:
adr r0, mainbus_sr_2_text
b _panic
mainbus_sr_2_text:
.asciz "mainbus_sr_2(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_sr_4
_mainbus_sr_4:
adr r0, mainbus_sr_4_text
b _panic
mainbus_sr_4_text:
.asciz "mainbus_sr_4(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_sr_8
_mainbus_sr_8:
adr r0, mainbus_sr_8_text
b _panic
mainbus_sr_8_text:
.asciz "mainbus_sr_8(%x,%x,%x,%x): Not implemented\n"
.align 0
/*
* copy
*/
.global _mainbus_c_1
_mainbus_c_1:
adr r0, mainbus_c_1_text
b _panic
mainbus_c_1_text:
.asciz "mainbus_c_1(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_c_2
_mainbus_c_2:
adr r0, mainbus_c_2_text
b _panic
mainbus_c_2_text:
.asciz "mainbus_c_2(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_c_4
_mainbus_c_4:
adr r0, mainbus_c_4_text
b _panic
mainbus_c_4_text:
.asciz "mainbus_c_4(%x,%x,%x,%x): Not implemented\n"
.align 0
.global _mainbus_c_8
_mainbus_c_8:
adr r0, mainbus_c_8_text
b _panic
mainbus_c_8_text:
.asciz "mainbus_c_8(%x,%x,%x,%x): Not implemented\n"
.align 0