summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/alpha/include/bus.h425
-rw-r--r--sys/arch/i386/include/bus.h475
-rw-r--r--sys/dev/ic/midway.c4
-rw-r--r--sys/dev/ic/midwayreg.h4
4 files changed, 640 insertions, 268 deletions
diff --git a/sys/arch/alpha/include/bus.h b/sys/arch/alpha/include/bus.h
index 75e7d3fe992..3ff76eb6ee1 100644
--- a/sys/arch/alpha/include/bus.h
+++ b/sys/arch/alpha/include/bus.h
@@ -1,5 +1,5 @@
-/* $OpenBSD: bus.h,v 1.3 1996/10/30 22:38:55 niklas Exp $ */
-/* $NetBSD: bus.h,v 1.4 1996/06/11 21:16:21 cgd Exp $ */
+/* $OpenBSD: bus.h,v 1.4 1996/11/12 22:46:26 niklas Exp $ */
+/* $NetBSD: bus.h,v 1.6 1996/10/22 21:23:49 cgd Exp $ */
/*
* Copyright (c) 1996 Carnegie-Mellon University.
@@ -29,191 +29,244 @@
*/
#ifndef _ALPHA_BUS_H_
-#define _ALPHA_BUS_H_
-
-/*
- * I/O addresses (in bus space)
- */
-typedef u_long bus_io_addr_t;
-typedef u_long bus_io_size_t;
-
-/*
- * Memory addresses (in bus space)
- */
-typedef u_long bus_mem_addr_t;
-typedef u_long bus_mem_size_t;
-
-/*
- * Access methods for bus resources, I/O space, and memory space.
- */
-typedef struct alpha_bus_chipset *bus_chipset_tag_t;
-typedef u_long bus_io_handle_t;
-typedef u_long bus_mem_handle_t;
-
-struct alpha_bus_chipset {
- /* I/O-space cookie */
- void *bc_i_v;
-
- /* I/O-space control functions */
- int (*bc_i_map) __P((void *v, bus_io_addr_t port,
- bus_io_size_t size, bus_io_handle_t *iohp));
- void (*bc_i_unmap) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t size));
- int (*bc_i_subregion) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t offset, bus_io_size_t size,
- bus_io_handle_t *nioh));
-
- /* I/O-space read functions */
- u_int8_t (*bc_ir1) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off));
- u_int16_t (*bc_ir2) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off));
- u_int32_t (*bc_ir4) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off));
- u_int64_t (*bc_ir8) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off));
-
- /* I/O-space read-multiple functions */
- void (*bc_irm1) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, u_int8_t *addr,
- bus_io_size_t count));
- void (*bc_irm2) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, u_int16_t *addr,
- bus_io_size_t count));
- void (*bc_irm4) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, u_int32_t *addr,
- bus_io_size_t count));
- void (*bc_irm8) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, u_int64_t *addr,
- bus_io_size_t count));
-
- /* I/O-space write functions */
- void (*bc_iw1) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, u_int8_t val));
- void (*bc_iw2) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, u_int16_t val));
- void (*bc_iw4) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, u_int32_t val));
- void (*bc_iw8) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, u_int64_t val));
-
- /* I/O-space write-multiple functions */
- void (*bc_iwm1) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, const u_int8_t *addr,
- bus_io_size_t count));
- void (*bc_iwm2) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, const u_int16_t *addr,
- bus_io_size_t count));
- void (*bc_iwm4) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, const u_int32_t *addr,
- bus_io_size_t count));
- void (*bc_iwm8) __P((void *v, bus_io_handle_t ioh,
- bus_io_size_t off, const u_int64_t *addr,
- bus_io_size_t count));
-
- /* Mem-space cookie */
- void *bc_m_v;
-
- /* Mem-space control functions */
- int (*bc_m_map) __P((void *v, bus_mem_addr_t buspa,
- bus_mem_size_t size, int cacheable,
- bus_mem_handle_t *mhp));
- void (*bc_m_unmap) __P((void *v, bus_mem_handle_t mh,
- bus_mem_size_t size));
- int (*bc_m_subregion) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t offset, bus_mem_size_t size,
- bus_mem_handle_t *nmemh));
-
- /* Mem-space read functions */
- u_int8_t (*bc_mr1) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t off));
- u_int16_t (*bc_mr2) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t off));
- u_int32_t (*bc_mr4) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t off));
- u_int64_t (*bc_mr8) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t off));
-
- /* Mem-space write functions */
- void (*bc_mw1) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t off, u_int8_t val));
- void (*bc_mw2) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t off, u_int16_t val));
- void (*bc_mw4) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t off, u_int32_t val));
- void (*bc_mw8) __P((void *v, bus_mem_handle_t memh,
- bus_mem_size_t off, u_int64_t val));
-
- /* XXX THIS DOES NOT YET BELONG HERE */
- vm_offset_t (*bc_XXX_dmamap) __P((void *addr));
+#define _ALPHA_BUS_H_
+
+/*
+ * Addresses (in bus space).
+ */
+typedef u_long bus_addr_t;
+typedef u_long bus_size_t;
+
+/*
+ * Access methods for bus space.
+ */
+typedef struct alpha_bus_space *bus_space_tag_t;
+typedef u_long bus_space_handle_t;
+
+struct alpha_bus_space {
+ /* cookie */
+ void *abs_cookie;
+
+ /* mapping/unmapping */
+ int (*abs_map) __P((void *, bus_addr_t, bus_size_t,
+ int, bus_space_handle_t *));
+ void (*abs_unmap) __P((void *, bus_space_handle_t,
+ bus_size_t));
+ int (*abs_subregion) __P((void *, bus_space_handle_t,
+ bus_size_t, bus_size_t, bus_space_handle_t *));
+
+ /* allocation/deallocation */
+ int (*abs_alloc) __P((void *, bus_addr_t, bus_addr_t,
+ bus_size_t, bus_size_t, bus_size_t, int,
+ bus_addr_t *, bus_space_handle_t *));
+ void (*abs_free) __P((void *, bus_space_handle_t,
+ bus_size_t));
+
+ /* read (single) */
+ u_int8_t (*abs_r_1) __P((void *, bus_space_handle_t,
+ bus_size_t));
+ u_int16_t (*abs_r_2) __P((void *, bus_space_handle_t,
+ bus_size_t));
+ u_int32_t (*abs_r_4) __P((void *, bus_space_handle_t,
+ bus_size_t));
+ u_int64_t (*abs_r_8) __P((void *, bus_space_handle_t,
+ bus_size_t));
+
+ /* read multi */
+ void (*abs_rm_1) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int8_t *, bus_size_t));
+ void (*abs_rm_2) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int16_t *, bus_size_t));
+ void (*abs_rm_4) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int32_t *, bus_size_t));
+ void (*abs_rm_8) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int64_t *, bus_size_t));
+
+ /* read region */
+ void (*abs_rr_1) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int8_t *, bus_size_t));
+ void (*abs_rr_2) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int16_t *, bus_size_t));
+ void (*abs_rr_4) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int32_t *, bus_size_t));
+ void (*abs_rr_8) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int64_t *, bus_size_t));
+
+ /* write (single) */
+ void (*abs_w_1) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int8_t));
+ void (*abs_w_2) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int16_t));
+ void (*abs_w_4) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int32_t));
+ void (*abs_w_8) __P((void *, bus_space_handle_t,
+ bus_size_t, u_int64_t));
+
+ /* write multi */
+ void (*abs_wm_1) __P((void *, bus_space_handle_t,
+ bus_size_t, const u_int8_t *, bus_size_t));
+ void (*abs_wm_2) __P((void *, bus_space_handle_t,
+ bus_size_t, const u_int16_t *, bus_size_t));
+ void (*abs_wm_4) __P((void *, bus_space_handle_t,
+ bus_size_t, const u_int32_t *, bus_size_t));
+ void (*abs_wm_8) __P((void *, bus_space_handle_t,
+ bus_size_t, const u_int64_t *, bus_size_t));
+
+ /* write region */
+ void (*abs_wr_1) __P((void *, bus_space_handle_t,
+ bus_size_t, const u_int8_t *, bus_size_t));
+ void (*abs_wr_2) __P((void *, bus_space_handle_t,
+ bus_size_t, const u_int16_t *, bus_size_t));
+ void (*abs_wr_4) __P((void *, bus_space_handle_t,
+ bus_size_t, const u_int32_t *, bus_size_t));
+ void (*abs_wr_8) __P((void *, bus_space_handle_t,
+ bus_size_t, const u_int64_t *, bus_size_t));
+
+ /* set multi */
+ /* XXX IMPLEMENT */
+
+ /* set region */
+ /* XXX IMPLEMENT */
+
+ /* copy */
+ /* XXX IMPLEMENT */
+
+ /* barrier */
+ void (*abs_barrier) __P((void *, bus_space_handle_t,
+ bus_size_t, bus_size_t, int));
};
-#define __bc_CONCAT(A,B) __CONCAT(A,B)
-#define __bc_ABC(A,B,C) __bc_CONCAT(A,__bc_CONCAT(B,C))
-#define __bc_ABCD(A,B,C,D) __bc_CONCAT(__bc_ABC(A,B,C),D)
-
-#define __bc_rd(t, h, o, sz, sp) \
- (*(t)->__bc_ABCD(bc_,sp,r,sz))((t)->__bc_ABC(bc_,sp,_v), h, o)
-
-#define __bc_wr(t, h, o, v, sz, sp) \
- (*(t)->__bc_ABCD(bc_,sp,w,sz))((t)->__bc_ABC(bc_,sp,_v), h, o, v)
-
-#define bus_io_map(t, port, size, iohp) \
- (*(t)->bc_i_map)((t)->bc_i_v, (port), (size), (iohp))
-#define bus_io_unmap(t, ioh, size) \
- (*(t)->bc_i_unmap)((t)->bc_i_v, (ioh), (size))
-#define bus_io_subregion(t, ioh, offset, size, nioh) \
- (*(t)->bc_i_unmap)((t)->bc_i_v, (ioh), (offset), (size), (nioh))
-
-#define __bc_io_multi(t, h, o, a, s, dir, sz) \
- (*(t)->__bc_ABCD(bc_i,dir,m,sz))((t)->bc_i_v, h, o, a, s)
-
-#define bus_io_read_1(t, h, o) __bc_rd((t),(h),(o),1,i)
-#define bus_io_read_2(t, h, o) __bc_rd((t),(h),(o),2,i)
-#define bus_io_read_4(t, h, o) __bc_rd((t),(h),(o),4,i)
-#define bus_io_read_8(t, h, o) __bc_rd((t),(h),(o),8,i)
-
-#define bus_io_read_multi_1(t, h, o, a, s) \
- __bc_io_multi((t),(h),(o),(a),(s),r,1)
-#define bus_io_read_multi_2(t, h, o, a, s) \
- __bc_io_multi((t),(h),(o),(a),(s),r,2)
-#define bus_io_read_multi_4(t, h, o, a, s) \
- __bc_io_multi((t),(h),(o),(a),(s),r,4)
-#define bus_io_read_multi_8(t, h, o, a, s) \
- __bc_io_multi((t),(h),(o),(a),(s),r,8)
-
-#define bus_io_write_1(t, h, o, v) __bc_wr((t),(h),(o),(v),1,i)
-#define bus_io_write_2(t, h, o, v) __bc_wr((t),(h),(o),(v),2,i)
-#define bus_io_write_4(t, h, o, v) __bc_wr((t),(h),(o),(v),4,i)
-#define bus_io_write_8(t, h, o, v) __bc_wr((t),(h),(o),(v),8,i)
-
-#define bus_io_write_multi_1(t, h, o, a, s) \
- __bc_io_multi((t),(h),(o),(a),(s),w,1)
-#define bus_io_write_multi_2(t, h, o, a, s) \
- __bc_io_multi((t),(h),(o),(a),(s),w,2)
-#define bus_io_write_multi_4(t, h, o, a, s) \
- __bc_io_multi((t),(h),(o),(a),(s),w,4)
-#define bus_io_write_multi_8(t, h, o, a, s) \
- __bc_io_multi((t),(h),(o),(a),(s),w,8)
-
-#define bus_mem_map(t, bpa, size, cacheable, mhp) \
- (*(t)->bc_m_map)((t)->bc_m_v, (bpa), (size), (cacheable), (mhp))
-#define bus_mem_unmap(t, memh, size) \
- (*(t)->bc_m_unmap)((t)->bc_m_v, (memh), (size))
-#define bus_mem_subregion(t, memh, offset, size, nmemh) \
- (*(t)->bc_m_unmap)((t)->bc_i_v, (memh), (offset), (size), (nmemh))
-
-#define bus_mem_read_1(t, h, o) __bc_rd((t),(h),(o),1,m)
-#define bus_mem_read_2(t, h, o) __bc_rd((t),(h),(o),2,m)
-#define bus_mem_read_4(t, h, o) __bc_rd((t),(h),(o),4,m)
-#define bus_mem_read_8(t, h, o) __bc_rd((t),(h),(o),8,m)
-
-#define bus_mem_write_1(t, h, o, v) __bc_wr((t),(h),(o),(v),1,m)
-#define bus_mem_write_2(t, h, o, v) __bc_wr((t),(h),(o),(v),2,m)
-#define bus_mem_write_4(t, h, o, v) __bc_wr((t),(h),(o),(v),4,m)
-#define bus_mem_write_8(t, h, o, v) __bc_wr((t),(h),(o),(v),8,m)
-
-/* XXX THIS DOES NOT BELONG HERE YET. */
-#define __alpha_bus_XXX_dmamap(t, va) (*(t)->bc_XXX_dmamap)((va))
+
+/*
+ * Utility macros; INTERNAL USE ONLY.
+ */
+#define __abs_c(a,b) __CONCAT(a,b)
+#define __abs_opname(op,size) __abs_c(__abs_c(__abs_c(abs_,op),_),size)
+
+#define __abs_rs(sz, t, h, o) \
+ (*(t)->__abs_opname(r,sz))((t)->abs_cookie, h, o)
+#define __abs_ws(sz, t, h, o, v) \
+ (*(t)->__abs_opname(w,sz))((t)->abs_cookie, h, o, v)
+#define __abs_nonsingle(type, sz, t, h, o, a, c) \
+ (*(t)->__abs_opname(type,sz))((t)->abs_cookie, h, o, a, c)
+
+
+/*
+ * Mapping and unmapping operations.
+ */
+#define bus_space_map(t, a, s, c, hp) \
+ (*(t)->abs_map)((t)->abs_cookie, (a), (s), (c), (hp))
+#define bus_space_unmap(t, h, s) \
+ (*(t)->abs_unmap)((t)->abs_cookie, (h), (s))
+#define bus_space_subregion(t, h, o, s, hp) \
+ (*(t)->abs_subregion)((t)->abs_cookie, (h), (o), (s), (hp))
+
+
+/*
+ * Allocation and deallocation operations.
+ */
+#define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \
+ (*(t)->abs_alloc)((t)->abs_cookie, (rs), (re), (s), (a), (b), \
+ (c), (ap), (hp))
+#define bus_space_free(t, h, s) \
+ (*(t)->abs_free)((t)->abs_cookie, (h), (s))
+
+
+/*
+ * Bus read (single) operations.
+ */
+#define bus_space_read_1(t, h, o) __abs_rs(1,(t),(h),(o))
+#define bus_space_read_2(t, h, o) __abs_rs(2,(t),(h),(o))
+#define bus_space_read_4(t, h, o) __abs_rs(4,(t),(h),(o))
+#define bus_space_read_8(t, h, o) __abs_rs(8,(t),(h),(o))
+
+
+/*
+ * Bus read multiple operations.
+ */
+#define bus_space_read_multi_1(t, h, o, a, c) \
+ __abs_nonsingle(rm,1,(t),(h),(o),(a),(c))
+#define bus_space_read_multi_2(t, h, o, a, c) \
+ __abs_nonsingle(rm,2,(t),(h),(o),(a),(c))
+#define bus_space_read_multi_4(t, h, o, a, c) \
+ __abs_nonsingle(rm,4,(t),(h),(o),(a),(c))
+#define bus_space_read_multi_8(t, h, o, a, c) \
+ __abs_nonsingle(rm,8,(t),(h),(o),(a),(c))
+
+
+/*
+ * Bus read region operations.
+ */
+#define bus_space_read_region_1(t, h, o, a, c) \
+ __abs_nonsingle(rr,1,(t),(h),(o),(a),(c))
+#define bus_space_read_region_2(t, h, o, a, c) \
+ __abs_nonsingle(rr,2,(t),(h),(o),(a),(c))
+#define bus_space_read_region_4(t, h, o, a, c) \
+ __abs_nonsingle(rr,4,(t),(h),(o),(a),(c))
+#define bus_space_read_region_8(t, h, o, a, c) \
+ __abs_nonsingle(rr,8,(t),(h),(o),(a),(c))
+
+
+/*
+ * Bus write (single) operations.
+ */
+#define bus_space_write_1(t, h, o, v) __abs_ws(1,(t),(h),(o),(v))
+#define bus_space_write_2(t, h, o, v) __abs_ws(2,(t),(h),(o),(v))
+#define bus_space_write_4(t, h, o, v) __abs_ws(4,(t),(h),(o),(v))
+#define bus_space_write_8(t, h, o, v) __abs_ws(8,(t),(h),(o),(v))
+
+
+/*
+ * Bus write multiple operations.
+ */
+#define bus_space_write_multi_1(t, h, o, a, c) \
+ __abs_nonsingle(wm,1,(t),(h),(o),(a),(c))
+#define bus_space_write_multi_2(t, h, o, a, c) \
+ __abs_nonsingle(wm,2,(t),(h),(o),(a),(c))
+#define bus_space_write_multi_4(t, h, o, a, c) \
+ __abs_nonsingle(wm,4,(t),(h),(o),(a),(c))
+#define bus_space_write_multi_8(t, h, o, a, c) \
+ __abs_nonsingle(wm,8,(t),(h),(o),(a),(c))
+
+
+/*
+ * Bus write region operations.
+ */
+#define bus_space_write_region_1(t, h, o, a, c) \
+ __abs_nonsingle(wr,1,(t),(h),(o),(a),(c))
+#define bus_space_write_region_2(t, h, o, a, c) \
+ __abs_nonsingle(wr,2,(t),(h),(o),(a),(c))
+#define bus_space_write_region_4(t, h, o, a, c) \
+ __abs_nonsingle(wr,4,(t),(h),(o),(a),(c))
+#define bus_space_write_region_8(t, h, o, a, c) \
+ __abs_nonsingle(wr,8,(t),(h),(o),(a),(c))
+
+
+/*
+ * Set multiple operations.
+ */
+/* XXX IMPLEMENT */
+
+
+/*
+ * Set region operations.
+ */
+/* XXX IMPLEMENT */
+
+
+/*
+ * Copy operations.
+ */
+/* XXX IMPLEMENT */
+
+
+/*
+ * Bus barrier operations.
+ */
+#define bus_space_barrier(t, h, o, l, f) \
+ (*(t)->abs_barrier)((t)->abs_cookie, (h), (o), (l), (f))
+
+#define BUS_BARRIER_READ 0x01
+#define BUS_BARRIER_WRITE 0x02
#endif /* _ALPHA_BUS_H_ */
diff --git a/sys/arch/i386/include/bus.h b/sys/arch/i386/include/bus.h
index b5cfac6e3cb..17cbbcc784c 100644
--- a/sys/arch/i386/include/bus.h
+++ b/sys/arch/i386/include/bus.h
@@ -1,7 +1,9 @@
-/* $OpenBSD: bus.h,v 1.5 1996/07/31 01:45:53 niklas Exp $ */
-/* $NetBSD: bus.h,v 1.3 1996/05/03 19:22:18 christos Exp $ */
+/* $OpenBSD: bus.h,v 1.6 1996/11/12 22:46:27 niklas Exp $ */
+/* $NetBSD: bus.h,v 1.5 1996/10/21 22:26:19 thorpej Exp $ */
/*
+ * Copyright (c) 1996 Charles M. Hannum. All rights reserved.
+ * Copyright (c) 1996 Jason R. Thorpe. All rights reserved.
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -37,99 +39,416 @@
#include <machine/pio.h>
/*
- * I/O addresses (in bus space)
+ * Values for the i386 bus space tag, not to be used directly by MI code.
*/
-typedef u_long bus_io_addr_t;
-typedef u_long bus_io_size_t;
+#define I386_BUS_SPACE_IO 0 /* space is i/o space */
+#define I386_BUS_SPACE_MEM 1 /* space is mem space */
/*
- * Memory addresses (in bus space)
+ * Bus address and size types
*/
-typedef u_long bus_mem_addr_t;
-typedef u_long bus_mem_size_t;
+typedef u_long bus_addr_t;
+typedef u_long bus_size_t;
/*
- * Access methods for bus resources, I/O space, and memory space.
+ * Access methods for bus resources and address space.
*/
-typedef void *bus_chipset_tag_t;
-typedef u_long bus_io_handle_t;
-typedef caddr_t bus_mem_handle_t;
-
-#define bus_io_map(t, port, size, iohp) \
- ((void) t, *iohp = port, 0)
-#define bus_io_unmap(t, ioh, size)
-
-#define bus_io_read_1(t, h, o) ((void) t, inb((h) + (o)))
-#define bus_io_read_2(t, h, o) ((void) t, inw((h) + (o)))
-#define bus_io_read_4(t, h, o) ((void) t, inl((h) + (o)))
-#if 0 /* Cause a link error for bus_io_read_8 */
-#define bus_io_read_8(t, h, o) !!! bus_io_read_8 unimplemented !!!
+typedef int bus_space_tag_t;
+typedef u_long bus_space_handle_t;
+
+int bus_space_map __P((bus_space_tag_t t, bus_addr_t addr,
+ bus_size_t size, int cacheable, bus_space_handle_t *bshp));
+void bus_space_unmap __P((bus_space_tag_t t, bus_space_handle_t bsh,
+ bus_size_t size));
+int bus_space_subregion __P((bus_space_tag_t t, bus_space_handle_t bsh,
+ bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp));
+
+int bus_space_alloc __P((bus_space_tag_t t, bus_addr_t rstart,
+ bus_addr_t rend, bus_size_t size, bus_size_t align,
+ bus_addr_t boundary, int cacheable, bus_addr_t *addrp,
+ bus_space_handle_t *bshp));
+void bus_space_free __P((bus_space_tag_t t, bus_space_handle_t bsh,
+ bus_size_t size));
+
+/*
+ * u_intN_t bus_space_read_N __P((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.
+ */
+
+#define bus_space_read_1(t, h, o) \
+ ((t) == I386_BUS_SPACE_IO ? (inb((h) + (o))) : \
+ (*(volatile u_int8_t *)((h) + (o))))
+
+#define bus_space_read_2(t, h, o) \
+ ((t) == I386_BUS_SPACE_IO ? (inw((h) + (o))) : \
+ (*(volatile u_int16_t *)((h) + (o))))
+
+#define bus_space_read_4(t, h, o) \
+ ((t) == I386_BUS_SPACE_IO ? (inl((h) + (o))) : \
+ (*(volatile u_int32_t *)((h) + (o))))
+
+#if 0 /* Cause a link error for bus_space_read_8 */
+#define bus_space_read_8(t, h, o) !!! bus_space_read_8 unimplemented !!!
#endif
-#define bus_io_read_multi_1(t, h, o, a, c) \
- ((void) t, insb((h) + (o), (a), (c)))
-#define bus_io_read_multi_2(t, h, o, a, c) \
- ((void) t, insw((h) + (o), (a), (c)))
-#define bus_io_read_multi_4(t, h, o, a, c) \
- ((void) t, insl((h) + (o), (a), (c)))
-#if 0 /* Cause a link error for bus_io_read_multi_8 */
-#define bus_io_read_multi_8(t, h, o, a, c) \
- !!! bus_io_read_multi_8 unimplemented !!!
+/*
+ * void bus_space_read_multi_N __P((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.
+ */
+
+#define bus_space_read_multi_1(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ insb((h) + (o), (a), (c)); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ 1: movb (%0),%%al ; \
+ stosb ; \
+ loop 1b" : \
+ : \
+ "r" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%edi", "%ecx", "%eax", "memory"); \
+ } \
+} while (0)
+
+#define bus_space_read_multi_2(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ insw((h) + (o), (a), (c)); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ 1: movw (%0),%%ax ; \
+ stosw ; \
+ loop 1b" : \
+ : \
+ "r" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%edi", "%ecx", "%eax", "memory"); \
+ } \
+} while (0)
+
+#define bus_space_read_multi_4(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ insl((h) + (o), (a), (c)); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ 1: movl (%0),%%eax ; \
+ stosl ; \
+ loop 1b" : \
+ : \
+ "r" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%edi", "%ecx", "%eax", "memory"); \
+ } \
+} while (0)
+
+#if 0 /* Cause a link error for bus_space_read_multi_8 */
+#define bus_space_read_multi_8 !!! bus_space_read_multi_8 unimplemented !!!
#endif
-#define bus_io_write_1(t, h, o, v) ((void) t, outb((h) + (o), (v)))
-#define bus_io_write_2(t, h, o, v) ((void) t, outw((h) + (o), (v)))
-#define bus_io_write_4(t, h, o, v) ((void) t, outl((h) + (o), (v)))
-#if 0 /* Cause a link error for bus_io_write_8 */
-#define bus_io_write_8(t, h, o, v) !!! bus_io_write_8 unimplemented !!!
+/*
+ * void bus_space_read_region_N __P((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.
+ */
+
+#define bus_space_read_region_1(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ __asm __volatile(" \
+ cld ; \
+ 1: inb %w0,%%al ; \
+ stosb ; \
+ incl %0 ; \
+ loop 1b" : \
+ : \
+ "d" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%edx", "%edi", "%ecx", "%eax", "memory"); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ repne ; \
+ movsb" : \
+ : \
+ "S" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%esi", "%edi", "%ecx", "memory"); \
+ } \
+} while (0)
+
+#define bus_space_read_region_2(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ __asm __volatile(" \
+ cld ; \
+ 1: inw %w0,%%ax ; \
+ stosw ; \
+ addl $2,%0 ; \
+ loop 1b" : \
+ : \
+ "d" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%edx", "%edi", "%ecx", "%eax", "memory"); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ repne ; \
+ movsw" : \
+ : \
+ "S" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%esi", "%edi", "%ecx", "memory"); \
+ } \
+} while (0)
+
+#define bus_space_read_region_4(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ __asm __volatile(" \
+ cld ; \
+ 1: inl %w0,%%eax ; \
+ stosl ; \
+ addl $4,%0 ; \
+ loop 1b" : \
+ : \
+ "d" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%edx", "%edi", "%ecx", "%eax", "memory"); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ repne ; \
+ movsl" : \
+ : \
+ "S" ((h) + (o)), "D" ((a)), "c" ((c)) : \
+ "%esi", "%edi", "%ecx", "memory"); \
+ } \
+} while (0)
+
+#if 0 /* Cause a link error for bus_space_read_region_8 */
+#define bus_space_read_region_8 !!! bus_space_read_region_8 unimplemented !!!
#endif
-#define bus_io_write_multi_1(t, h, o, a, c) \
- ((void) t, outsb((h) + (o), (a), (c)))
-#define bus_io_write_multi_2(t, h, o, a, c) \
- ((void) t, outsw((h) + (o), (a), (c)))
-#define bus_io_write_multi_4(t, h, o, a, c) \
- ((void) t, outsl((h) + (o), (a), (c)))
-#if 0 /* Cause a link error for bus_io_write_multi_8 */
-#define bus_io_write_multi_8(t, h, o, a, c) \
- !!! bus_io_write_multi_8 unimplimented !!!
+/*
+ * void bus_space_write_N __P((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.
+ */
+
+#define bus_space_write_1(t, h, o, v) do { \
+ if ((t) == I386_BUS_SPACE_IO) \
+ outb((h) + (o), (v)); \
+ else \
+ ((void)(*(volatile u_int8_t *)((h) + (o)) = (v))); \
+} while (0)
+
+#define bus_space_write_2(t, h, o, v) do { \
+ if ((t) == I386_BUS_SPACE_IO) \
+ outw((h) + (o), (v)); \
+ else \
+ ((void)(*(volatile u_int16_t *)((h) + (o)) = (v))); \
+} while (0)
+
+#define bus_space_write_4(t, h, o, v) do { \
+ if ((t) == I386_BUS_SPACE_IO) \
+ outl((h) + (o), (v)); \
+ else \
+ ((void)(*(volatile u_int32_t *)((h) + (o)) = (v))); \
+} while (0)
+
+#if 0 /* Cause a link error for bus_space_write_8 */
+#define bus_space_write_8 !!! bus_space_write_8 not implemented !!!
#endif
-int bus_mem_map __P((bus_chipset_tag_t t, bus_mem_addr_t bpa,
- bus_mem_size_t size, int cacheable, bus_mem_handle_t *mhp));
-void bus_mem_unmap __P((bus_chipset_tag_t t, bus_mem_handle_t memh,
- bus_mem_size_t size));
-
-#define bus_mem_read_1(t, h, o) ((void) t, (*(volatile u_int8_t *)((h) + (o))))
-#define bus_mem_read_2(t, h, o) ((void) t, (*(volatile u_int16_t *)((h) + (o))))
-#define bus_mem_read_4(t, h, o) ((void) t, (*(volatile u_int32_t *)((h) + (o))))
-#define bus_mem_read_8(t, h, o) ((void) t, (*(volatile u_int64_t *)((h) + (o))))
-
-#define bus_mem_write_1(t, h, o, v) \
- ((void) t, ((void)(*(volatile u_int8_t *)((h) + (o)) = (v))))
-#define bus_mem_write_2(t, h, o, v) \
- ((void) t, ((void)(*(volatile u_int16_t *)((h) + (o)) = (v))))
-#define bus_mem_write_4(t, h, o, v) \
- ((void) t, ((void)(*(volatile u_int32_t *)((h) + (o)) = (v))))
-#define bus_mem_write_8(t, h, o, v) \
- ((void) t, ((void)(*(volatile u_int64_t *)((h) + (o)) = (v))))
-
-#define bus_io_read_raw_multi_2(t, h, o, a, c) \
- ((void) t, insw((h) + (o), (a), (c) >> 1))
-#define bus_io_read_raw_multi_4(t, h, o, a, c) \
- ((void) t, insl((h) + (o), (a), (c) >> 2))
-#if 0 /* Cause a link error for bus_io_read_raw_multi_8 */
-#define bus_io_read_raw_multi_8(t, h, o, a, c) \
- !!! bus_io_read_multi_8 unimplemented !!!
+/*
+ * void bus_space_write_multi_N __P((bus_space_tag_t tag,
+ * bus_space_handle_t bsh, bus_size_t offset,
+ * 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.
+ */
+
+#define bus_space_write_multi_1(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ outsb((h) + (o), (a), (c)); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ 1: lodsb ; \
+ movb %%al,(%0) ; \
+ loop 1b" : \
+ : \
+ "r" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%esi", "%ecx", "%eax"); \
+ } \
+} while (0)
+
+#define bus_space_write_multi_2(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ outsw((h) + (o), (a), (c)); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ 1: lodsw ; \
+ movw %%ax,(%0) ; \
+ loop 1b" : \
+ : \
+ "r" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%esi", "%ecx", "%eax"); \
+ } \
+} while (0)
+
+#define bus_space_write_multi_4(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ outsl((h) + (o), (a), (c)); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ 1: lodsl ; \
+ movl %%eax,(%0) ; \
+ loop 1b" : \
+ : \
+ "r" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%esi", "%ecx", "%eax"); \
+ } \
+} while (0)
+
+#if 0 /* Cause a link error for bus_space_write_multi_8 */
+#define bus_space_write_multi_8(t, h, o, a, c) \
+ !!! bus_space_write_multi_8 unimplimented !!!
#endif
-#define bus_io_write_raw_multi_2(t, h, o, a, c) \
- ((void) t, outsw((h) + (o), (a), (c) >> 1))
-#define bus_io_write_raw_multi_4(t, h, o, a, c) \
- ((void) t, outsl((h) + (o), (a), (c) >> 2))
-#if 0 /* Cause a link error for bus_io_write_raw_multi_8 */
-#define bus_io_write_raw_multi_8(t, h, o, a, c) \
- !!! bus_io_write_multi_8 unimplimented !!!
+/*
+ * void bus_space_write_region_N __P((bus_space_tag_t tag,
+ * bus_space_handle_t bsh, bus_size_t offset,
+ * 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'.
+ */
+
+#define bus_space_write_region_1(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ __asm __volatile(" \
+ cld ; \
+ 1: lodsb ; \
+ outb %%al,%w0 ; \
+ incl %0 ; \
+ loop 1b" : \
+ : \
+ "d" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%edx", "%esi", "%ecx", "%eax", "memory"); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ repne ; \
+ movsb" : \
+ : \
+ "D" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%edi", "%esi", "%ecx", "memory"); \
+ } \
+} while (0)
+
+#define bus_space_write_region_2(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ __asm __volatile(" \
+ cld ; \
+ 1: lodsw ; \
+ outw %%ax,%w0 ; \
+ addl $2,%0 ; \
+ loop 1b" : \
+ : \
+ "d" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%edx", "%esi", "%ecx", "%eax", "memory"); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ repne ; \
+ movsw" : \
+ : \
+ "D" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%edi", "%esi", "%ecx", "memory"); \
+ } \
+} while (0)
+
+#define bus_space_write_region_4(t, h, o, a, c) do { \
+ if ((t) == I386_BUS_SPACE_IO) { \
+ __asm __volatile(" \
+ cld ; \
+ 1: lodsl ; \
+ outl %%eax,%w0 ; \
+ addl $4,%0 ; \
+ loop 1b" : \
+ : \
+ "d" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%edx", "%esi", "%ecx", "%eax", "memory"); \
+ } else { \
+ __asm __volatile(" \
+ cld ; \
+ repne ; \
+ movsl" : \
+ : \
+ "D" ((h) + (o)), "S" ((a)), "c" ((c)) : \
+ "%edi", "%esi", "%ecx", "memory"); \
+ } \
+} while (0)
+
+#if 0 /* Cause a link error for bus_space_write_region_8 */
+#define bus_space_write_region_8 \
+ !!! bus_space_write_region_8 unimplemented !!!
#endif
+/*
+ * void bus_space_set_multi_N __P((bus_space_tag_t tag,
+ * bus_space_handle_t bsh, 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.
+ */
+
+ /* XXX IMPLEMENT bus_space_set_multi_N() XXX */
+
+/*
+ * void bus_space_set_region_N __P((bus_space_tag_t tag,
+ * bus_space_handle_t bsh, 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'.
+ */
+
+ /* XXX IMPLEMENT bus_space_set_region_N() XXX */
+
+/*
+ * void bus_space_copy_N __P((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.
+ */
+
+ /* XXX IMPLEMENT bus_space_copy_N() XXX */
+
+/*
+ * Bus read/write barrier methods.
+ *
+ * void bus_space_barrier __P((bus_space_tag_t tag,
+ * bus_space_handle_t bsh, bus_size_t offset,
+ * bus_size_t len, int flags));
+ *
+ * Note: the i386 does not currently require barriers, but we must
+ * provide the flags to MI code.
+ */
+#define bus_space_barrier(t, h, o, l, f)
+#define BUS_BARRIER_READ 0x01 /* force read barrier */
+#define BUS_BARRIER_WRITE 0x02 /* force write barrier */
+
#endif /* _I386_BUS_H_ */
diff --git a/sys/dev/ic/midway.c b/sys/dev/ic/midway.c
index 61fe659c81a..a8e3ca18d87 100644
--- a/sys/dev/ic/midway.c
+++ b/sys/dev/ic/midway.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: midway.c,v 1.15 1996/11/12 20:30:20 niklas Exp $ */
+/* $OpenBSD: midway.c,v 1.16 1996/11/12 22:46:23 niklas Exp $ */
/* (sync'd to midway.c 1.63) */
/*
@@ -114,7 +114,7 @@
#if !defined(sparc) && !defined(__FreeBSD__)
-#include <machine/bus.old.h>
+#include <machine/bus.h>
#endif
#if defined(__NetBSD__) || defined(__OpenBSD__)
diff --git a/sys/dev/ic/midwayreg.h b/sys/dev/ic/midwayreg.h
index 54bf1f75596..27fc0b20283 100644
--- a/sys/dev/ic/midwayreg.h
+++ b/sys/dev/ic/midwayreg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: midwayreg.h,v 1.5 1996/11/12 20:30:21 niklas Exp $ */
+/* $OpenBSD: midwayreg.h,v 1.6 1996/11/12 22:46:25 niklas Exp $ */
/*
* m i d w a y r e g . h
@@ -9,7 +9,7 @@
*/
#if defined(sparc) || defined(__FreeBSD__)
-/* XXX: gross. netbsd/sparc doesn't have machine/bus.old.h yet. */
+/* XXX: gross. netbsd/sparc doesn't have machine/bus.h yet. */
typedef void * bus_chipset_tag_t;
typedef u_int32_t pci_chipset_tag_t;
typedef caddr_t bus_mem_handle_t;