Module Name:    src
Committed By:   dyoung
Date:           Wed Jul  6 18:11:45 UTC 2011

Modified Files:
        src/sys/sys: bus.h

Log Message:
If __HAVE_NEW_STYLE_BUS_H is #defined, make <sys/bus.h> declare the
new MI API for reserving bus space without mapping it, #include
<machine/bus_defs.h>, <machine/bus_funcs.h>, and <sys/bus_proto.h>.

Refine the bus_space_tag_create() API.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/sys/bus.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/sys/bus.h
diff -u src/sys/sys/bus.h:1.3 src/sys/sys/bus.h:1.4
--- src/sys/sys/bus.h:1.3	Mon Apr 19 18:24:27 2010
+++ src/sys/sys/bus.h	Wed Jul  6 18:11:45 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus.h,v 1.3 2010/04/19 18:24:27 dyoung Exp $	*/
+/*	$NetBSD: bus.h,v 1.4 2011/07/06 18:11:45 dyoung Exp $	*/
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -29,52 +29,98 @@
 #ifndef _SYS_BUS_H_
 #define	_SYS_BUS_H_
 
-#include <machine/bus.h>
+#include <sys/types.h>
+
+#ifdef __HAVE_NEW_STYLE_BUS_H
+
+#include <machine/bus_defs.h>
 
-struct bus_space_reservation;
+struct bus_space_reservation {
+	bus_addr_t _bsr_start;
+	bus_size_t _bsr_size;
+};
+
+typedef struct bus_space_reservation bus_space_reservation_t;
 
-typedef struct bus_space_reservation /* {
-	bus_addr_t	sr_addr;
-	bus_size_t	sr_size;
-} */ bus_space_reservation_t;
+static inline bus_size_t
+bus_space_reservation_size(bus_space_reservation_t *bsr)
+{
+	return bsr->_bsr_size;
+}
+
+static inline bus_space_reservation_t *
+bus_space_reservation_init(bus_space_reservation_t *bsr,
+    bus_addr_t addr, bus_size_t size)
+{
+	bsr->_bsr_start = addr;
+	bsr->_bsr_size = size;
+	return bsr;
+}
+
+static inline bus_addr_t
+bus_space_reservation_addr(bus_space_reservation_t *bsr)
+{
+	return bsr->_bsr_start;
+}
 
 enum bus_space_override_idx {
-	  BUS_SPACE_OVERRIDE_SPACE_MAP		= __BIT(0)
-	, BUS_SPACE_OVERRIDE_SPACE_UNMAP	= __BIT(1)
-	, BUS_SPACE_OVERRIDE_SPACE_ALLOC	= __BIT(2)
-	, BUS_SPACE_OVERRIDE_SPACE_FREE		= __BIT(3)
-	, BUS_SPACE_OVERRIDE_SPACE_EXTEND	= __BIT(4)
-	, BUS_SPACE_OVERRIDE_SPACE_TRIM		= __BIT(5)
+	  BUS_SPACE_OVERRIDE_MAP		= __BIT(0)
+	, BUS_SPACE_OVERRIDE_UNMAP		= __BIT(1)
+	, BUS_SPACE_OVERRIDE_ALLOC		= __BIT(2)
+	, BUS_SPACE_OVERRIDE_FREE		= __BIT(3)
+	, BUS_SPACE_OVERRIDE_RESERVE		= __BIT(4)
+	, BUS_SPACE_OVERRIDE_RELEASE		= __BIT(5)
+	, BUS_SPACE_OVERRIDE_RESERVATION_MAP	= __BIT(6)
+	, BUS_SPACE_OVERRIDE_RESERVATION_UNMAP	= __BIT(7)
+	, BUS_SPACE_OVERRIDE_RESERVE_SUBREGION	= __BIT(8)
+#if 0
+	, BUS_SPACE_OVERRIDE_EXTEND	= __BIT(9)
+	, BUS_SPACE_OVERRIDE_TRIM	= __BIT(10)
+#endif
 };
 
 /* Only add new members at the end of this struct! */
 struct bus_space_overrides {
-	int (*bs_space_map)(void *, bus_space_tag_t, bus_addr_t, bus_size_t,
+	int (*ov_space_map)(void *, bus_space_tag_t, bus_addr_t, bus_size_t,
 	    int, bus_space_handle_t *);
 
-	void (*bs_space_unmap)(void *, bus_space_tag_t, bus_space_handle_t,
+	void (*ov_space_unmap)(void *, bus_space_tag_t, bus_space_handle_t,
 	    bus_size_t);
 
-	int (*bs_space_alloc)(void *, bus_space_tag_t, bus_addr_t, bus_addr_t,
+	int (*ov_space_alloc)(void *, bus_space_tag_t, 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_space_free)(void *, bus_space_tag_t, bus_space_handle_t,
+	void (*ov_space_free)(void *, bus_space_tag_t, bus_space_handle_t,
 	    bus_size_t);
 
-	int (*bs_space_reserve)(void *, bus_space_tag_t, bus_addr_t, bus_size_t,
+	int (*ov_space_reserve)(void *, bus_space_tag_t, bus_addr_t, bus_size_t,
+	    int, bus_space_reservation_t *);
+
+	void (*ov_space_release)(void *, bus_space_tag_t,
 	    bus_space_reservation_t *);
 
-	void (*bus_space_release)(void *, bus_space_tag_t,
-	    bus_space_reservation_t);
+	int (*ov_space_reservation_map)(void *, bus_space_tag_t,
+	    bus_space_reservation_t *, int, bus_space_handle_t *);
 
-	int (*bs_space_extend)(void *, bus_space_tag_t, bus_space_reservation_t,
-	    bus_size_t, bus_size_t);
+	void (*ov_space_reservation_unmap)(void *, bus_space_tag_t,
+	    bus_space_handle_t, bus_size_t);
 
-	void (*bs_space_trim)(void *, bus_space_tag_t, bus_space_reservation_t,
-	    bus_size_t, bus_size_t);
+	int (*ov_space_reserve_subregion)(void *, bus_space_tag_t,
+	    bus_addr_t, bus_addr_t, bus_size_t, bus_size_t, bus_size_t,
+	    int, bus_space_reservation_t *);
+
+#if 0
+	int (*ov_space_extend)(void *, bus_space_tag_t,
+	    bus_space_reservation_t *, bus_size_t, bus_size_t);
+
+	void (*ov_space_trim)(void *, bus_space_tag_t,
+	    bus_space_reservation_t *, bus_size_t, bus_size_t);
+#endif
 };
 
+bool	bus_space_handle_is_equal(bus_space_tag_t, bus_space_handle_t,
+    bus_space_handle_t);
 bool	bus_space_is_equal(bus_space_tag_t, bus_space_tag_t);
 int	bus_space_tag_create(bus_space_tag_t, uint64_t,
 	                     const struct bus_space_overrides *, void *,
@@ -84,20 +130,40 @@
 /* Reserve a region of bus space.  Reserved bus space cannot be allocated
  * with bus_space_alloc().  Reserved space has not been bus_space_map()'d.
  */
-int	bus_space_reserve(bus_space_tag_t, bus_addr_t, bus_size_t,
+int	bus_space_reserve(bus_space_tag_t, bus_addr_t, bus_size_t, int,
 	                  bus_space_reservation_t *);
 
+int
+bus_space_reserve_subregion(bus_space_tag_t,
+    bus_addr_t, bus_addr_t, bus_size_t, bus_size_t, bus_size_t,
+    int, bus_space_reservation_t *);
+
 /* Cancel a reservation. */
-void	bus_space_release(bus_space_tag_t, bus_space_reservation_t);
+void	bus_space_release(bus_space_tag_t, bus_space_reservation_t *);
+
+int bus_space_reservation_map(bus_space_tag_t, bus_space_reservation_t *,
+    int, bus_space_handle_t *);
+
+void bus_space_reservation_unmap(bus_space_tag_t, bus_space_handle_t,
+    bus_size_t);
 
+#if 0
 /* Extend a reservation to the left and/or to the right.  The extension
  * has not been bus_space_map()'d.
  */
-int	bus_space_extend(bus_space_tag_t, bus_space_reservation_t, bus_size_t,
+int	bus_space_extend(bus_space_tag_t, bus_space_reservation_t *, bus_size_t,
 	                 bus_size_t);
 
 /* Trim bus space from a reservation on the left and/or on the right. */
-void	bus_space_trim(bus_space_tag_t, bus_space_reservation_t, bus_size_t,
+void	bus_space_trim(bus_space_tag_t, bus_space_reservation_t *, bus_size_t,
 	               bus_size_t);
+#endif
+
+#include <sys/bus_proto.h>
+
+#include <machine/bus_funcs.h>
+#else
+#include <machine/bus.h>
+#endif
 
 #endif	/* _SYS_BUS_H_ */

Reply via email to