Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Feb 2025 14:17:19 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: e14fd50dd810 - stable/14 - new-bus: Introduce a simpler bus API for managing resources
Message-ID:  <202502271417.51REHJCl017153@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/14 has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=e14fd50dd810a0b5fcdda002755a1942e202aaeb

commit e14fd50dd810a0b5fcdda002755a1942e202aaeb
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2024-03-13 22:05:53 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2025-02-27 13:09:23 +0000

    new-bus: Introduce a simpler bus API for managing resources
    
    Remove the 'type' and 'rid' arguments from the wrapper bus API
    functions (e.g. bus_release_resource) that accept a struct resource.
    The "new" versions extract the 'type' and/or 'rid' from the passed in
    resource object via rman_get_type and rman_get_rid.
    
    This commit adds the new API as functions with a _new suffix.  Wrapper
    macros choose between the old and new functions based on the number of
    arguments provided to the macro.  This commit does not change the ABI
    but can be safely MFCd to older branches so long as older kernels use
    rman_set_type when allocating resources.
    
    Future commits will push the removal of these extraneous arguments
    through the bus implementation.
    
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D44124
    
    (cherry picked from commit 9edb8d0aedef2f1e13ed1f8134deb3f8291d2fe9)
---
 sys/kern/subr_bus.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 sys/sys/bus.h       | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+)

diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index ffad54c34925..5d1a13c08892 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -4618,6 +4618,13 @@ bus_adjust_resource(device_t dev, int type, struct resource *r, rman_res_t start
 	return (BUS_ADJUST_RESOURCE(dev->parent, dev, type, r, start, end));
 }
 
+int
+bus_adjust_resource_new(device_t dev, struct resource *r, rman_res_t start,
+    rman_res_t end)
+{
+	return (bus_adjust_resource(dev, rman_get_type(r), r, start, end));
+}
+
 /**
  * @brief Wrapper function for BUS_TRANSLATE_RESOURCE().
  *
@@ -4647,6 +4654,13 @@ bus_activate_resource(device_t dev, int type, int rid, struct resource *r)
 	return (BUS_ACTIVATE_RESOURCE(dev->parent, dev, type, rid, r));
 }
 
+int
+bus_activate_resource_new(device_t dev, struct resource *r)
+{
+	return (bus_activate_resource(dev, rman_get_type(r), rman_get_rid(r),
+	    r));
+}
+
 /**
  * @brief Wrapper function for BUS_DEACTIVATE_RESOURCE().
  *
@@ -4661,6 +4675,13 @@ bus_deactivate_resource(device_t dev, int type, int rid, struct resource *r)
 	return (BUS_DEACTIVATE_RESOURCE(dev->parent, dev, type, rid, r));
 }
 
+int
+bus_deactivate_resource_new(device_t dev, struct resource *r)
+{
+	return (bus_deactivate_resource(dev, rman_get_type(r), rman_get_rid(r),
+	    r));
+}
+
 /**
  * @brief Wrapper function for BUS_MAP_RESOURCE().
  *
@@ -4676,6 +4697,13 @@ bus_map_resource(device_t dev, int type, struct resource *r,
 	return (BUS_MAP_RESOURCE(dev->parent, dev, type, r, args, map));
 }
 
+int
+bus_map_resource_new(device_t dev, struct resource *r,
+    struct resource_map_request *args, struct resource_map *map)
+{
+	return (bus_map_resource(dev, rman_get_type(r), r, args, map));
+}
+
 /**
  * @brief Wrapper function for BUS_UNMAP_RESOURCE().
  *
@@ -4691,6 +4719,13 @@ bus_unmap_resource(device_t dev, int type, struct resource *r,
 	return (BUS_UNMAP_RESOURCE(dev->parent, dev, type, r, map));
 }
 
+int
+bus_unmap_resource_new(device_t dev, struct resource *r,
+    struct resource_map *map)
+{
+	return (bus_unmap_resource(dev, rman_get_type(r), r, map));
+}
+
 /**
  * @brief Wrapper function for BUS_RELEASE_RESOURCE().
  *
@@ -4708,6 +4743,13 @@ bus_release_resource(device_t dev, int type, int rid, struct resource *r)
 	return (rv);
 }
 
+int
+bus_release_resource_new(device_t dev, struct resource *r)
+{
+	return (bus_release_resource(dev, rman_get_type(r), rman_get_rid(r),
+	    r));
+}
+
 /**
  * @brief Wrapper function for BUS_SETUP_INTR().
  *
diff --git a/sys/sys/bus.h b/sys/sys/bus.h
index 5d5336591ea6..c1391c4a7284 100644
--- a/sys/sys/bus.h
+++ b/sys/sys/bus.h
@@ -613,6 +613,43 @@ bus_alloc_resource_anywhere(device_t dev, int type, int *rid,
 	return (bus_alloc_resource(dev, type, rid, 0, ~0, count, flags));
 }
 
+/* Compat shims for simpler bus resource API. */
+int	bus_adjust_resource_new(device_t child, struct resource *r,
+    rman_res_t start, rman_res_t end);
+int	bus_activate_resource_new(device_t dev, struct resource *r);
+int	bus_deactivate_resource_new(device_t dev, struct resource *r);
+int	bus_map_resource_new(device_t dev, struct resource *r,
+    struct resource_map_request *args, struct resource_map *map);
+int	bus_unmap_resource_new(device_t dev, struct resource *r,
+    struct resource_map *map);
+int	bus_release_resource_new(device_t dev, struct resource *r);
+
+#define	_BUS_API_MACRO(_1, _2, _3, _4, _5, NAME, ...)	NAME
+
+#define	bus_adjust_resource(...)					\
+	_BUS_API_MACRO(__VA_ARGS__, bus_adjust_resource,		\
+	    bus_adjust_resource_new)(__VA_ARGS__)
+
+#define	bus_activate_resource(...)					\
+	_BUS_API_MACRO(__VA_ARGS__, INVALID, bus_activate_resource,	\
+	    INVALID, bus_activate_resource_new)(__VA_ARGS__)
+
+#define	bus_deactivate_resource(...)					\
+	_BUS_API_MACRO(__VA_ARGS__, INVALID, bus_deactivate_resource,	\
+	    INVALID, bus_deactivate_resource_new)(__VA_ARGS__)
+
+#define	bus_map_resource(...)						\
+	_BUS_API_MACRO(__VA_ARGS__, bus_map_resource,			\
+	    bus_map_resource_new)(__VA_ARGS__)
+
+#define	bus_unmap_resource(...)						\
+	_BUS_API_MACRO(__VA_ARGS__, INVALID, bus_unmap_resource,	\
+	    bus_unmap_resource_new)(__VA_ARGS__)
+
+#define	bus_release_resource(...)					\
+	_BUS_API_MACRO(__VA_ARGS__, INVALID, bus_release_resource,	\
+	    INVALID, bus_release_resource_new)(__VA_ARGS__)
+
 /*
  * Access functions for device.
  */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202502271417.51REHJCl017153>