git: 9dbf5b0e6876 - main - new-bus: Remove the 'rid' and 'type' arguments from BUS_RELEASE_RESOURCE

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Wed, 13 Mar 2024 22:13:43 UTC
The branch main has been updated by jhb:

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

commit 9dbf5b0e6876d8c93890754bcc9c748339de79c0
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2024-03-13 22:05:54 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2024-03-13 22:05:54 +0000

    new-bus: Remove the 'rid' and 'type' arguments from BUS_RELEASE_RESOURCE
    
    The public bus_release_resource() API still accepts both forms, but
    the internal kobj method no longer passes the arguments.
    Implementations which need the rid or type now use rman_get_rid() or
    rman_get_type() to fetch the value from the allocated resource.
    
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D44131
---
 share/man/man9/bus_release_resource.9 | 24 +++--------------
 sys/arm/mv/mv_pci.c                   | 16 +++++------
 sys/arm64/cavium/thunder_pcie_fdt.c   | 12 ++++-----
 sys/arm64/cavium/thunder_pcie_pem.c   | 16 +++++------
 sys/dev/acpica/acpi.c                 |  7 +++--
 sys/dev/acpica/acpi_pcib_acpi.c       | 13 +++++----
 sys/dev/agp/agp_i810.c                |  4 +--
 sys/dev/ahci/ahci.c                   |  7 +++--
 sys/dev/ahci/ahci.h                   |  3 +--
 sys/dev/ata/ata-pci.c                 | 16 +++++------
 sys/dev/ata/ata-pci.h                 |  2 +-
 sys/dev/atkbdc/atkbdc_isa.c           |  9 +++----
 sys/dev/bhnd/bhnd_subr.c              |  4 +--
 sys/dev/bhnd/bhndb/bhndb.c            |  9 +++----
 sys/dev/bhnd/cores/chipc/chipc.c      | 13 +++++----
 sys/dev/bhnd/cores/usb/bhnd_usb.c     | 14 +++++-----
 sys/dev/dpaa/fman.c                   | 12 ++++-----
 sys/dev/dpaa/fman.h                   |  3 +--
 sys/dev/dpaa2/dpaa2_mc.c              | 10 +++----
 sys/dev/dpaa2/dpaa2_mc.h              |  4 +--
 sys/dev/dpaa2/dpaa2_rc.c              |  7 +++--
 sys/dev/fdt/simplebus.c               | 14 +---------
 sys/dev/hyperv/pcib/vmbus_pcib.c      | 17 ++++++------
 sys/dev/mvs/mvs_pci.c                 |  7 +++--
 sys/dev/mvs/mvs_soc.c                 |  5 ++--
 sys/dev/ofw/ofw_pcib.c                | 17 +++++-------
 sys/dev/ofw/ofwbus.c                  |  7 +++--
 sys/dev/pccbb/pccbb.c                 | 27 +++++++++----------
 sys/dev/pccbb/pccbb_pci.c             |  9 +++----
 sys/dev/pccbb/pccbbvar.h              |  2 +-
 sys/dev/pci/hostb_pci.c               |  5 ++--
 sys/dev/pci/isa_pci.c                 | 16 +++++------
 sys/dev/pci/pci.c                     | 21 +++++++--------
 sys/dev/pci/pci_host_generic.c        | 14 +++++-----
 sys/dev/pci/pci_host_generic.h        |  2 +-
 sys/dev/pci/pci_iov.c                 | 16 +++++------
 sys/dev/pci/pci_pci.c                 |  7 +++--
 sys/dev/pci/pci_private.h             |  6 ++---
 sys/dev/pci/pci_subr.c                |  2 +-
 sys/dev/pci/pcib_private.h            |  2 +-
 sys/dev/pci/vga_pci.c                 | 24 +++++++----------
 sys/dev/ppc/ppc.c                     | 16 +++--------
 sys/dev/ppc/ppcvar.h                  |  3 +--
 sys/dev/puc/puc.c                     | 14 +++-------
 sys/dev/puc/puc_bfe.h                 |  2 +-
 sys/dev/quicc/quicc_bfe.h             |  2 +-
 sys/dev/quicc/quicc_core.c            |  6 ++---
 sys/dev/scc/scc_bfe.h                 |  2 +-
 sys/dev/scc/scc_core.c                |  6 ++---
 sys/dev/siis/siis.c                   |  7 +++--
 sys/dev/sound/pci/csa.c               |  6 ++---
 sys/dev/sound/pci/fm801.c             |  3 +--
 sys/dev/vmd/vmd.c                     | 10 +++----
 sys/isa/isa_common.c                  |  2 --
 sys/isa/isa_common.h                  |  2 +-
 sys/kern/bus_if.m                     |  4 ---
 sys/kern/subr_bus.c                   | 51 +++++++++++++++--------------------
 sys/powerpc/mpc85xx/isa.c             |  5 ++--
 sys/powerpc/mpc85xx/lbc.c             | 16 ++++-------
 sys/powerpc/powermac/macio.c          | 14 ++++------
 sys/powerpc/powermac/uninorth.c       | 14 ++++------
 sys/powerpc/psim/ata_iobus.c          |  6 ++---
 sys/powerpc/psim/iobus.c              | 13 ++++-----
 sys/sys/bus.h                         | 18 ++++++-------
 sys/x86/include/legacyvar.h           |  4 +--
 sys/x86/isa/isa.c                     |  5 ++--
 sys/x86/pci/pci_bus.c                 |  9 +++----
 67 files changed, 260 insertions(+), 405 deletions(-)

diff --git a/share/man/man9/bus_release_resource.9 b/share/man/man9/bus_release_resource.9
index 9abc9fca1e6f..5203295a7488 100644
--- a/share/man/man9/bus_release_resource.9
+++ b/share/man/man9/bus_release_resource.9
@@ -26,7 +26,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd May 18, 2000
+.Dd March 13, 2024
 .Dt BUS_RELEASE_RESOURCE 9
 .Os
 .Sh NAME
@@ -40,7 +40,7 @@
 .In sys/rman.h
 .In machine/resource.h
 .Ft int
-.Fn bus_release_resource "device_t dev" "int type" "int rid" "struct resource *r"
+.Fn bus_release_resource "device_t dev" "struct resource *r"
 .Sh DESCRIPTION
 Free a resource allocated by
 .Xr bus_alloc_resource 9 .
@@ -53,20 +53,6 @@ for IRQs).
 .Fa dev
 is the device that owns the resource.
 .It
-.Fa type
-is the type of resource that is released.
-It must be of the same type you allocated it as before.
-See
-.Xr bus_alloc_resource 9
-for valid types.
-.It
-.Fa rid
-is the resource ID of the resource.
-The
-.Fa rid
-value must be the same as the one returned by
-.Xr bus_alloc_resource 9 .
-.It
 .Fa r
 is the pointer to
 .Va struct resource ,
@@ -88,12 +74,10 @@ The kernel will panic, if it cannot release the resource.
 	bus_teardown_intr(dev, foosoftc->irqres, foosoftc->irqid);
 
 	/* release IRQ resource */
-	bus_release_resource(dev, SYS_RES_IRQ, foosoftc->irqid,
-		foosoftc->irqres);
+	bus_release_resource(dev, foosoftc->irqres);
 
 	/* release I/O port resource */
-	bus_release_resource(dev, SYS_RES_IOPORT, foosoftc->portid,
-		foosoftc->portres);
+	bus_release_resource(dev, foosoftc->portres);
 .Ed
 .Sh SEE ALSO
 .Xr bus_alloc_resource 9 ,
diff --git a/sys/arm/mv/mv_pci.c b/sys/arm/mv/mv_pci.c
index a24a71cd4ecf..eb1af5a4e237 100644
--- a/sys/arm/mv/mv_pci.c
+++ b/sys/arm/mv/mv_pci.c
@@ -347,8 +347,7 @@ static struct resource *mv_pcib_alloc_resource(device_t, device_t, int, int *,
     rman_res_t, rman_res_t, rman_res_t, u_int);
 static int mv_pcib_adjust_resource(device_t, device_t, struct resource *,
     rman_res_t, rman_res_t);
-static int mv_pcib_release_resource(device_t, device_t, int, int,
-    struct resource *);
+static int mv_pcib_release_resource(device_t, device_t, struct resource *);
 static int mv_pcib_activate_resource(device_t, device_t, struct resource *);
 static int mv_pcib_deactivate_resource(device_t, device_t, struct resource *);
 static int mv_pcib_map_resource(device_t, device_t, struct resource *,
@@ -962,25 +961,22 @@ mv_pcib_adjust_resource(device_t dev, device_t child,
 }
 
 static int
-mv_pcib_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *res)
+mv_pcib_release_resource(device_t dev, device_t child, struct resource *res)
 {
 #ifdef PCI_RES_BUS
 	struct mv_pcib_softc *sc = device_get_softc(dev);
 #endif
 
-	switch (type) {
+	switch (rman_get_type(res)) {
 	case SYS_RES_IOPORT:
 	case SYS_RES_MEMORY:
-		return (bus_generic_rman_release_resource(dev, child, type,
-		    rid, res));
+		return (bus_generic_rman_release_resource(dev, child, res));
 #ifdef PCI_RES_BUS
 	case PCI_RES_BUS:
-		return (pci_domain_release_bus(sc->ap_segment, child, rid, res));
+		return (pci_domain_release_bus(sc->ap_segment, child, res));
 #endif
 	default:
-		return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
-		    type, rid, res));
+		return (bus_generic_release_resource(dev, child, res));
 	}
 }
 
diff --git a/sys/arm64/cavium/thunder_pcie_fdt.c b/sys/arm64/cavium/thunder_pcie_fdt.c
index bf00688fb041..f173a28b637d 100644
--- a/sys/arm64/cavium/thunder_pcie_fdt.c
+++ b/sys/arm64/cavium/thunder_pcie_fdt.c
@@ -57,7 +57,7 @@
 static struct resource * thunder_pcie_fdt_alloc_resource(device_t, device_t,
     int, int *, rman_res_t, rman_res_t, rman_res_t, u_int);
 static int thunder_pcie_fdt_release_resource(device_t, device_t,
-    int, int, struct resource*);
+    struct resource*);
 #endif
 static int thunder_pcie_fdt_attach(device_t);
 static int thunder_pcie_fdt_probe(device_t);
@@ -288,14 +288,14 @@ thunder_pcie_fdt_alloc_resource(device_t dev, device_t child, int type,
 }
 
 static int
-thunder_pcie_fdt_release_resource(device_t dev, device_t child, int type,
-    int rid, struct resource *res)
+thunder_pcie_fdt_release_resource(device_t dev, device_t child,
+    struct resource *res)
 {
 
 	if ((int)ofw_bus_get_node(child) <= 0)
-		return (pci_host_generic_core_release_resource(dev, child, type,
-		    rid, res));
+		return (pci_host_generic_core_release_resource(dev, child,
+		    res));
 
-	return (bus_generic_release_resource(dev, child, type, rid, res));
+	return (bus_generic_release_resource(dev, child, res));
 }
 #endif
diff --git a/sys/arm64/cavium/thunder_pcie_pem.c b/sys/arm64/cavium/thunder_pcie_pem.c
index f7c3c5ee1c0a..dd6ef14f1a6e 100644
--- a/sys/arm64/cavium/thunder_pcie_pem.c
+++ b/sys/arm64/cavium/thunder_pcie_pem.c
@@ -149,8 +149,7 @@ static uint32_t thunder_pem_read_config(device_t, u_int, u_int, u_int, u_int,
     int);
 static int thunder_pem_read_ivar(device_t, device_t, int, uintptr_t *);
 static void thunder_pem_release_all(device_t);
-static int thunder_pem_release_resource(device_t, device_t, int, int,
-    struct resource *);
+static int thunder_pem_release_resource(device_t, device_t, struct resource *);
 static struct rman * thunder_pem_get_rman(device_t, int, u_int);
 static void thunder_pem_slix_s2m_regx_acc_modify(struct thunder_pem_softc *,
     int, int);
@@ -716,28 +715,25 @@ thunder_pem_alloc_resource(device_t dev, device_t child, int type, int *rid,
 }
 
 static int
-thunder_pem_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *res)
+thunder_pem_release_resource(device_t dev, device_t child, struct resource *res)
 {
 	device_t parent_dev;
 #if defined(NEW_PCIB) && defined(PCI_RES_BUS)
 	struct thunder_pem_softc *sc = device_get_softc(dev);
 #endif
 
-	switch (type) {
+	switch (rman_get_type(res)) {
 #if defined(NEW_PCIB) && defined(PCI_RES_BUS)
 	case PCI_RES_BUS:
-		return (pci_domain_release_bus(sc->id, child, rid, res));
+		return (pci_domain_release_bus(sc->id, child, res));
 #endif
 	case SYS_RES_MEMORY:
 	case SYS_RES_IOPORT:
-		return (bus_generic_rman_release_resource(dev, child, type,
-		    rid, res));
+		return (bus_generic_rman_release_resource(dev, child, res));
 	default:
 		/* Find parent device. On ThunderX we know an exact path. */
 		parent_dev = device_get_parent(device_get_parent(dev));
-		return (BUS_RELEASE_RESOURCE(parent_dev, child,
-		    type, rid, res));
+		return (BUS_RELEASE_RESOURCE(parent_dev, child, res));
 	}
 }
 
diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c
index df2017e69a86..ad1af9373fb7 100644
--- a/sys/dev/acpica/acpi.c
+++ b/sys/dev/acpica/acpi.c
@@ -1580,17 +1580,16 @@ acpi_adjust_resource(device_t bus, device_t child, struct resource *r,
 }
 
 static int
-acpi_release_resource(device_t bus, device_t child, int type, int rid,
-    struct resource *r)
+acpi_release_resource(device_t bus, device_t child, struct resource *r)
 {
     /*
      * If this resource belongs to one of our internal managers,
      * deactivate it and release it to the local pool.
      */
     if (acpi_is_resource_managed(bus, r))
-	return (bus_generic_rman_release_resource(bus, child, type, rid, r));
+	return (bus_generic_rman_release_resource(bus, child, r));
 
-    return (bus_generic_rl_release_resource(bus, child, type, rid, r));
+    return (bus_generic_rl_release_resource(bus, child, r));
 }
 
 static void
diff --git a/sys/dev/acpica/acpi_pcib_acpi.c b/sys/dev/acpica/acpi_pcib_acpi.c
index fdf8e84d14e0..4c3d62a66d58 100644
--- a/sys/dev/acpica/acpi_pcib_acpi.c
+++ b/sys/dev/acpica/acpi_pcib_acpi.c
@@ -101,8 +101,7 @@ static int		acpi_pcib_acpi_adjust_resource(device_t dev,
 			    rman_res_t start, rman_res_t end);
 #ifdef PCI_RES_BUS
 static int		acpi_pcib_acpi_release_resource(device_t dev,
-			    device_t child, int type, int rid,
-			    struct resource *r);
+			    device_t child, struct resource *r);
 static int		acpi_pcib_acpi_activate_resource(device_t dev,
 			    device_t child, struct resource *r);
 static int		acpi_pcib_acpi_deactivate_resource(device_t dev,
@@ -516,7 +515,7 @@ acpi_pcib_acpi_attach(device_t dev)
 			    return (ENXIO);
 		    }
 		    sc->ap_bus = rman_get_start(bus_res);
-		    pci_domain_release_bus(sc->ap_segment, dev, rid, bus_res);
+		    pci_domain_release_bus(sc->ap_segment, dev, bus_res);
 	    }
     } else {
 	    /*
@@ -759,15 +758,15 @@ acpi_pcib_acpi_adjust_resource(device_t dev, device_t child,
 
 #ifdef PCI_RES_BUS
 int
-acpi_pcib_acpi_release_resource(device_t dev, device_t child, int type, int rid,
+acpi_pcib_acpi_release_resource(device_t dev, device_t child,
     struct resource *r)
 {
 	struct acpi_hpcib_softc *sc;
 
 	sc = device_get_softc(dev);
-	if (type == PCI_RES_BUS)
-		return (pci_domain_release_bus(sc->ap_segment, child, rid, r));
-	return (bus_generic_release_resource(dev, child, type, rid, r));
+	if (rman_get_type(r) == PCI_RES_BUS)
+		return (pci_domain_release_bus(sc->ap_segment, child, r));
+	return (bus_generic_release_resource(dev, child, r));
 }
 
 int
diff --git a/sys/dev/agp/agp_i810.c b/sys/dev/agp/agp_i810.c
index a83189ca7bc8..df977889a9c0 100644
--- a/sys/dev/agp/agp_i810.c
+++ b/sys/dev/agp/agp_i810.c
@@ -2053,8 +2053,8 @@ agp_i915_chipset_flush_free_page(device_t dev)
 		return;
 	BUS_DEACTIVATE_RESOURCE(device_get_parent(vga), dev,
 	    sc->sc_flush_page_res);
-	BUS_RELEASE_RESOURCE(device_get_parent(vga), dev, SYS_RES_MEMORY,
-	    sc->sc_flush_page_rid, sc->sc_flush_page_res);
+	BUS_RELEASE_RESOURCE(device_get_parent(vga), dev,
+	    sc->sc_flush_page_res);
 }
 
 static int
diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c
index 27860f9ee570..b1f9c85141bb 100644
--- a/sys/dev/ahci/ahci.c
+++ b/sys/dev/ahci/ahci.c
@@ -640,16 +640,15 @@ ahci_alloc_resource(device_t dev, device_t child, int type, int *rid,
 }
 
 int
-ahci_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r)
+ahci_release_resource(device_t dev, device_t child, struct resource *r)
 {
 
-	switch (type) {
+	switch (rman_get_type(r)) {
 	case SYS_RES_MEMORY:
 		rman_release_resource(r);
 		return (0);
 	case SYS_RES_IRQ:
-		if (rid != ATA_IRQ_RID)
+		if (rman_get_rid(r) != ATA_IRQ_RID)
 			return (ENOENT);
 		return (0);
 	}
diff --git a/sys/dev/ahci/ahci.h b/sys/dev/ahci/ahci.h
index 04d0cccc31f9..8b51b1e0b3ae 100644
--- a/sys/dev/ahci/ahci.h
+++ b/sys/dev/ahci/ahci.h
@@ -656,8 +656,7 @@ int ahci_setup_interrupt(device_t dev);
 int ahci_print_child(device_t dev, device_t child);
 struct resource *ahci_alloc_resource(device_t dev, device_t child, int type, int *rid,
     rman_res_t start, rman_res_t end, rman_res_t count, u_int flags);
-int ahci_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r);
+int ahci_release_resource(device_t dev, device_t child, struct resource *r);
 int ahci_setup_intr(device_t dev, device_t child, struct resource *irq, 
     int flags, driver_filter_t *filter, driver_intr_t *function, 
     void *argument, void **cookiep);
diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c
index 3a2a0f640f62..9cc815150665 100644
--- a/sys/dev/ata/ata-pci.c
+++ b/sys/dev/ata/ata-pci.c
@@ -273,24 +273,20 @@ ata_pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
 }
 
 int
-ata_pci_release_resource(device_t dev, device_t child, int type, int rid,
-			 struct resource *r)
+ata_pci_release_resource(device_t dev, device_t child, struct resource *r)
 {
+	int rid = rman_get_rid(r);
+	int type = rman_get_type(r);
 
 	if (device_get_devclass(child) == ata_devclass) {
 		struct ata_pci_controller *controller = device_get_softc(dev);
-		int unit = ((struct ata_channel *)device_get_softc(child))->unit;
 
 	        if (type == SYS_RES_IOPORT) {
 	    		switch (rid) {
 			case ATA_IOADDR_RID:
-		    	    return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev,
-				SYS_RES_IOPORT,
-				PCIR_BAR(0) + (unit << 3), r);
 			case ATA_CTLADDR_RID:
 			    return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev,
-				SYS_RES_IOPORT,
-				PCIR_BAR(1) + (unit << 3), r);
+				r);
 			default:
 			    return ENOENT;
 			}
@@ -300,7 +296,7 @@ ata_pci_release_resource(device_t dev, device_t child, int type, int rid,
 				return ENOENT;
 			if (controller->legacy) {
 				return BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
-				    SYS_RES_IRQ, rid, r);
+				    r);
 			} else  
 				return 0;
 		}
@@ -311,7 +307,7 @@ ata_pci_release_resource(device_t dev, device_t child, int type, int rid,
 			return (0);
 		} else {
 			return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
-			    type, rid, r));
+			    r));
 		}
 	}
 	return (EINVAL);
diff --git a/sys/dev/ata/ata-pci.h b/sys/dev/ata/ata-pci.h
index 95e7dd113fec..cad9441a21ae 100644
--- a/sys/dev/ata/ata-pci.h
+++ b/sys/dev/ata/ata-pci.h
@@ -538,7 +538,7 @@ void ata_pci_write_config(device_t dev, device_t child, int reg,
 int ata_pci_print_child(device_t dev, device_t child);
 int ata_pci_child_location(device_t dev, device_t child, struct sbuf *sb);
 struct resource * ata_pci_alloc_resource(device_t dev, device_t child, int type, int *rid, rman_res_t start, rman_res_t end, rman_res_t count, u_int flags);
-int ata_pci_release_resource(device_t dev, device_t child, int type, int rid, struct resource *r);
+int ata_pci_release_resource(device_t dev, device_t child, struct resource *r);
 int ata_pci_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, driver_filter_t *filter, driver_intr_t *function, void *argument, void **cookiep);
  int ata_pci_teardown_intr(device_t dev, device_t child, struct resource *irq, void *cookie);
 int ata_pci_ch_attach(device_t dev);
diff --git a/sys/dev/atkbdc/atkbdc_isa.c b/sys/dev/atkbdc/atkbdc_isa.c
index cb42c8bda40c..2f7b9eceda94 100644
--- a/sys/dev/atkbdc/atkbdc_isa.c
+++ b/sys/dev/atkbdc/atkbdc_isa.c
@@ -53,7 +53,7 @@ static struct resource *atkbdc_isa_alloc_resource(device_t dev, device_t child,
 		    int type, int *rid, rman_res_t start, rman_res_t end,
 		    rman_res_t count, u_int flags);
 static int	atkbdc_isa_release_resource(device_t dev, device_t child,
-		    int type, int rid, struct resource *r);
+		    struct resource *r);
 
 static device_method_t atkbdc_isa_methods[] = {
 	DEVMETHOD(device_probe,		atkbdc_isa_probe),
@@ -306,15 +306,14 @@ atkbdc_isa_alloc_resource(device_t dev, device_t child, int type, int *rid,
 }
 
 static int
-atkbdc_isa_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r)
+atkbdc_isa_release_resource(device_t dev, device_t child, struct resource *r)
 {
 	atkbdc_softc_t	*sc;
 
 	sc = *(atkbdc_softc_t **)device_get_softc(dev);
-	if (type == SYS_RES_IRQ && rid == KBDC_RID_KBD && r == sc->irq)
+	if (r == sc->irq)
 		return (0);
-	return (bus_generic_rl_release_resource(dev, child, type, rid, r));
+	return (bus_generic_rl_release_resource(dev, child, r));
 }
 
 DRIVER_MODULE(atkbdc, isa, atkbdc_isa_driver, 0, 0);
diff --git a/sys/dev/bhnd/bhnd_subr.c b/sys/dev/bhnd/bhnd_subr.c
index 44f8ae9cc0a2..0d38c1ca8a24 100644
--- a/sys/dev/bhnd/bhnd_subr.c
+++ b/sys/dev/bhnd/bhnd_subr.c
@@ -2241,7 +2241,7 @@ bhnd_bus_generic_alloc_resource(device_t dev, device_t child, int type,
 
 failed:
 	if (res != NULL)
-		BUS_RELEASE_RESOURCE(dev, child, type, *rid, res);
+		BUS_RELEASE_RESOURCE(dev, child, res);
 
 	free(br, M_BHND);
 	return (NULL);
@@ -2259,7 +2259,7 @@ bhnd_bus_generic_release_resource(device_t dev, device_t child, int type,
 {
 	int error;
 
-	if ((error = BUS_RELEASE_RESOURCE(dev, child, type, rid, r->res)))
+	if ((error = BUS_RELEASE_RESOURCE(dev, child, r->res)))
 		return (error);
 
 	free(r, M_BHND);
diff --git a/sys/dev/bhnd/bhndb/bhndb.c b/sys/dev/bhnd/bhndb/bhndb.c
index 5148c1c8452b..af62057690ac 100644
--- a/sys/dev/bhnd/bhndb/bhndb.c
+++ b/sys/dev/bhnd/bhndb/bhndb.c
@@ -1034,8 +1034,7 @@ bhndb_alloc_resource(device_t dev, device_t child, int type,
  * Default bhndb(4) implementation of BUS_RELEASE_RESOURCE().
  */
 static int
-bhndb_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r)
+bhndb_release_resource(device_t dev, device_t child, struct resource *r)
 {
 	struct bhndb_softc		*sc;
 	struct resource_list_entry	*rle;
@@ -1047,9 +1046,9 @@ bhndb_release_resource(device_t dev, device_t child, int type, int rid,
 
 	/* Delegate to our parent device's bus if the requested resource type
 	 * isn't handled locally. */
-	if (bhndb_get_rman(sc, child, type) == NULL) {
+	if (bhndb_get_rman(sc, child, rman_get_type(r)) == NULL) {
 		return (BUS_RELEASE_RESOURCE(device_get_parent(sc->parent_dev),
-		    child, type, rid, r));
+		    child, r));
 	}
 
 	/* Deactivate resources */
@@ -1065,7 +1064,7 @@ bhndb_release_resource(device_t dev, device_t child, int type, int rid,
 	if (!passthrough) {
 		/* Clean resource list entry */
 		rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child),
-		    type, rid);
+		    rman_get_type(r), rman_get_rid(r));
 		if (rle != NULL)
 			rle->res = NULL;
 	}
diff --git a/sys/dev/bhnd/cores/chipc/chipc.c b/sys/dev/bhnd/cores/chipc/chipc.c
index bdba61a2b942..60cb04400cb0 100644
--- a/sys/dev/bhnd/cores/chipc/chipc.c
+++ b/sys/dev/bhnd/cores/chipc/chipc.c
@@ -873,8 +873,7 @@ chipc_alloc_resource(device_t dev, device_t child, int type,
 }
 
 static int
-chipc_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r)
+chipc_release_resource(device_t dev, device_t child, struct resource *r)
 {
 	struct chipc_softc		*sc;
 	struct chipc_region		*cr;
@@ -885,10 +884,9 @@ chipc_release_resource(device_t dev, device_t child, int type, int rid,
 	sc = device_get_softc(dev);
 
 	/* Handled by parent bus? */
-	rm = chipc_get_rman(dev, type, rman_get_flags(r));
+	rm = chipc_get_rman(dev, rman_get_type(r), rman_get_flags(r));
 	if (rm == NULL || !rman_is_region_manager(r, rm)) {
-		return (bus_generic_rl_release_resource(dev, child, type, rid,
-		    r));
+		return (bus_generic_rl_release_resource(dev, child, r));
 	}
 
 	/* Locate the mapping region */
@@ -897,7 +895,7 @@ chipc_release_resource(device_t dev, device_t child, int type, int rid,
 		return (EINVAL);
 
 	/* Deactivate resources */
-	error = bus_generic_rman_release_resource(dev, child, type, rid, r);
+	error = bus_generic_rman_release_resource(dev, child, r);
 	if (error != 0)
 		return (error);
 
@@ -905,7 +903,8 @@ chipc_release_resource(device_t dev, device_t child, int type, int rid,
 	chipc_release_region(sc, cr, RF_ALLOCATED);
 
 	/* Clear reference from the resource list entry if exists */
-	rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child), type, rid);
+	rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child),
+	    rman_get_type(r), rman_get_rid(r));
 	if (rle != NULL)
 		rle->res = NULL;
 
diff --git a/sys/dev/bhnd/cores/usb/bhnd_usb.c b/sys/dev/bhnd/cores/usb/bhnd_usb.c
index fa9e6d7ec31a..7a86db79731f 100644
--- a/sys/dev/bhnd/cores/usb/bhnd_usb.c
+++ b/sys/dev/bhnd/cores/usb/bhnd_usb.c
@@ -69,8 +69,7 @@ static struct resource *	bhnd_usb_alloc_resource(device_t bus,
 				    rman_res_t start, rman_res_t end,
 				    rman_res_t count, u_int flags);
 static int			bhnd_usb_release_resource(device_t dev,
-				    device_t child, int type, int rid,
-				    struct resource *r);
+				    device_t child, struct resource *r);
 
 static struct resource_list *	bhnd_usb_get_reslist(device_t dev,
 				    device_t child);
@@ -311,8 +310,8 @@ bhnd_usb_get_reslist(device_t dev, device_t child)
 }
 
 static int
-bhnd_usb_release_resource(device_t dev, device_t child, int type,
-    int rid, struct resource *r)
+bhnd_usb_release_resource(device_t dev, device_t child,
+    struct resource *r)
 {
 	struct bhnd_usb_softc		*sc;
 	struct resource_list_entry	*rle;
@@ -325,18 +324,17 @@ bhnd_usb_release_resource(device_t dev, device_t child, int type,
 	/* Delegate to our parent device's bus if the requested resource type
 	 * isn't handled locally. */
 	if (type != SYS_RES_MEMORY) {
-		return (bus_generic_rl_release_resource(dev, child, type, rid,
-		    r));
+		return (bus_generic_rl_release_resource(dev, child, r));
 	}
 
-	error = bus_generic_rman_release_resource(dev, child, type, rid, r);
+	error = bus_generic_rman_release_resource(dev, child, r);
 	if (error != 0)
 		return (error);
 
 	if (!passthrough) {
 		/* Clean resource list entry */
 		rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child),
-		    type, rid);
+		    rman_get_type(r), rman_get_rid(r));
 		if (rle != NULL)
 			rle->res = NULL;
 	}
diff --git a/sys/dev/dpaa/fman.c b/sys/dev/dpaa/fman.c
index 2364df0be801..9dc4ac151789 100644
--- a/sys/dev/dpaa/fman.c
+++ b/sys/dev/dpaa/fman.c
@@ -116,8 +116,7 @@ fman_activate_resource(device_t bus, device_t child, struct resource *res)
 }
 
 int
-fman_release_resource(device_t bus, device_t child, int type, int rid,
-    struct resource *res)
+fman_release_resource(device_t bus, device_t child, struct resource *res)
 {
 	struct resource_list *rl;
 	struct resource_list_entry *rle;
@@ -125,9 +124,9 @@ fman_release_resource(device_t bus, device_t child, int type, int rid,
 
 	passthrough = (device_get_parent(child) != bus);
 	rl = BUS_GET_RESOURCE_LIST(bus, child);
-	if (type != SYS_RES_IRQ) {
+	if (rman_get_type(res) != SYS_RES_IRQ) {
 		if ((rman_get_flags(res) & RF_ACTIVE) != 0 ){
-			rv = bus_deactivate_resource(child, type, rid, res);
+			rv = bus_deactivate_resource(child, res);
 			if (rv != 0)
 				return (rv);
 		}
@@ -135,7 +134,8 @@ fman_release_resource(device_t bus, device_t child, int type, int rid,
 		if (rv != 0)
 			return (rv);
 		if (!passthrough) {
-			rle = resource_list_find(rl, type, rid);
+			rle = resource_list_find(rl, rman_get_type(res),
+			    rman_get_rid(res));
 			KASSERT(rle != NULL,
 			    ("%s: resource entry not found!", __func__));
 			KASSERT(rle->res != NULL,
@@ -144,7 +144,7 @@ fman_release_resource(device_t bus, device_t child, int type, int rid,
 		}
 		return (0);
 	}
-	return (resource_list_release(rl, bus, child, type, rid, res));
+	return (resource_list_release(rl, bus, child, res));
 }
 
 struct resource *
diff --git a/sys/dev/dpaa/fman.h b/sys/dev/dpaa/fman.h
index b201b9fd9355..4c30a633ae3e 100644
--- a/sys/dev/dpaa/fman.h
+++ b/sys/dev/dpaa/fman.h
@@ -57,8 +57,7 @@ struct resource * fman_alloc_resource(device_t bus, device_t child, int type,
     int *rid, rman_res_t start, rman_res_t end, rman_res_t count, u_int flags);
 int fman_activate_resource(device_t bus, device_t child,
     struct resource *res);
-int fman_release_resource(device_t bus, device_t child, int type, int rid,
-    struct resource *res);
+int fman_release_resource(device_t bus, device_t child, struct resource *res);
 int	fman_attach(device_t dev);
 int	fman_detach(device_t dev);
 int	fman_suspend(device_t dev);
diff --git a/sys/dev/dpaa2/dpaa2_mc.c b/sys/dev/dpaa2/dpaa2_mc.c
index 3e0920cbf8a5..66867a18068c 100644
--- a/sys/dev/dpaa2/dpaa2_mc.c
+++ b/sys/dev/dpaa2/dpaa2_mc.c
@@ -356,16 +356,14 @@ dpaa2_mc_adjust_resource(device_t mcdev, device_t child,
 }
 
 int
-dpaa2_mc_release_resource(device_t mcdev, device_t child, int type, int rid,
-    struct resource *r)
+dpaa2_mc_release_resource(device_t mcdev, device_t child, struct resource *r)
 {
 	struct rman *rm;
 
-	rm = dpaa2_mc_rman(mcdev, type, rman_get_flags(r));
+	rm = dpaa2_mc_rman(mcdev, rman_get_type(r), rman_get_flags(r));
 	if (rm)
-		return (bus_generic_rman_release_resource(mcdev, child, type,
-		    rid, r));
-	return (bus_generic_release_resource(mcdev, child, type, rid, r));
+		return (bus_generic_rman_release_resource(mcdev, child, r));
+	return (bus_generic_release_resource(mcdev, child, r));
 }
 
 int
diff --git a/sys/dev/dpaa2/dpaa2_mc.h b/sys/dev/dpaa2/dpaa2_mc.h
index 7af3b2a4eb24..5ddac7aa2720 100644
--- a/sys/dev/dpaa2/dpaa2_mc.h
+++ b/sys/dev/dpaa2/dpaa2_mc.h
@@ -185,8 +185,8 @@ struct resource * dpaa2_mc_alloc_resource(device_t mcdev, device_t child,
     u_int flags);
 int dpaa2_mc_adjust_resource(device_t mcdev, device_t child,
     struct resource *r, rman_res_t start, rman_res_t end);
-int dpaa2_mc_release_resource(device_t mcdev, device_t child, int type,
-    int rid, struct resource *r);
+int dpaa2_mc_release_resource(device_t mcdev, device_t child,
+    struct resource *r);
 int dpaa2_mc_activate_resource(device_t mcdev, device_t child,
     struct resource *r);
 int dpaa2_mc_deactivate_resource(device_t mcdev, device_t child,
diff --git a/sys/dev/dpaa2/dpaa2_rc.c b/sys/dev/dpaa2/dpaa2_rc.c
index d14187e0c58f..49ed8944b64b 100644
--- a/sys/dev/dpaa2/dpaa2_rc.c
+++ b/sys/dev/dpaa2/dpaa2_rc.c
@@ -263,19 +263,18 @@ dpaa2_rc_alloc_resource(device_t rcdev, device_t child, int type, int *rid,
 }
 
 static int
-dpaa2_rc_release_resource(device_t rcdev, device_t child, int type, int rid,
-    struct resource *r)
+dpaa2_rc_release_resource(device_t rcdev, device_t child, struct resource *r)
 {
 	struct resource_list *rl;
 	struct dpaa2_devinfo *dinfo;
 
 	if (device_get_parent(child) != rcdev)
 		return (BUS_RELEASE_RESOURCE(device_get_parent(rcdev), child,
-		    type, rid, r));
+		    r));
 
 	dinfo = device_get_ivars(child);
 	rl = &dinfo->resources;
-	return (resource_list_release(rl, rcdev, child, type, rid, r));
+	return (resource_list_release(rl, rcdev, child, r));
 }
 
 static void
diff --git a/sys/dev/fdt/simplebus.c b/sys/dev/fdt/simplebus.c
index 8069d3af69cf..37db238f2108 100644
--- a/sys/dev/fdt/simplebus.c
+++ b/sys/dev/fdt/simplebus.c
@@ -46,8 +46,6 @@
 static int		simplebus_probe(device_t dev);
 static struct resource *simplebus_alloc_resource(device_t, device_t, int,
     int *, rman_res_t, rman_res_t, rman_res_t, u_int);
-static int		simplebus_release_resource(device_t bus, device_t child,
-    int type, int rid, struct resource *r);
 static void		simplebus_probe_nomatch(device_t bus, device_t child);
 static int		simplebus_print_child(device_t bus, device_t child);
 static device_t		simplebus_add_child(device_t dev, u_int order,
@@ -85,7 +83,7 @@ static device_method_t	simplebus_methods[] = {
 	DEVMETHOD(bus_setup_intr,	bus_generic_setup_intr),
 	DEVMETHOD(bus_teardown_intr,	bus_generic_teardown_intr),
 	DEVMETHOD(bus_alloc_resource,	simplebus_alloc_resource),
-	DEVMETHOD(bus_release_resource,	simplebus_release_resource),
+	DEVMETHOD(bus_release_resource,	bus_generic_release_resource),
 	DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
 	DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
 	DEVMETHOD(bus_adjust_resource,	bus_generic_adjust_resource),
@@ -485,16 +483,6 @@ simplebus_alloc_resource(device_t bus, device_t child, int type, int *rid,
 	    count, flags));
 }
 
-static int
-simplebus_release_resource(device_t bus, device_t child, int type, int rid,
-    struct resource *r)
-{
-
-	if (type == SYS_RES_IOPORT)
-		type = SYS_RES_MEMORY;
-	return (bus_generic_release_resource(bus, child, type, rid, r));
-}
-
 static int
 simplebus_print_res(struct simplebus_devinfo *di)
 {
diff --git a/sys/dev/hyperv/pcib/vmbus_pcib.c b/sys/dev/hyperv/pcib/vmbus_pcib.c
index fd8a7feae984..f6237535cce3 100644
--- a/sys/dev/hyperv/pcib/vmbus_pcib.c
+++ b/sys/dev/hyperv/pcib/vmbus_pcib.c
@@ -1725,19 +1725,18 @@ vmbus_pcib_adjust_resource(device_t dev, device_t child,
 }
 
 static int
-vmbus_pcib_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r)
+vmbus_pcib_release_resource(device_t dev, device_t child, struct resource *r)
 {
 	struct vmbus_pcib_softc *sc = device_get_softc(dev);
 
-	if (type == PCI_RES_BUS)
-		return (pci_domain_release_bus(sc->hbus->pci_domain, child,
-		    rid, r));
-
-	if (type == SYS_RES_IOPORT)
+	switch (rman_get_type(r)) {
+	case PCI_RES_BUS:
+		return (pci_domain_release_bus(sc->hbus->pci_domain, child, r));
+	case SYS_RES_IOPORT:
 		return (EINVAL);
-
-	return (bus_generic_release_resource(dev, child, type, rid, r));
+	default:
+		return (bus_generic_release_resource(dev, child, r));
+	}
 }
 
 static int
diff --git a/sys/dev/mvs/mvs_pci.c b/sys/dev/mvs/mvs_pci.c
index 9578c5ea5e7e..be9351403a0d 100644
--- a/sys/dev/mvs/mvs_pci.c
+++ b/sys/dev/mvs/mvs_pci.c
@@ -422,16 +422,15 @@ mvs_alloc_resource(device_t dev, device_t child, int type, int *rid,
 }
 
 static int
-mvs_release_resource(device_t dev, device_t child, int type, int rid,
-			 struct resource *r)
+mvs_release_resource(device_t dev, device_t child, struct resource *r)
 {
 
-	switch (type) {
+	switch (rman_get_type(r)) {
 	case SYS_RES_MEMORY:
 		rman_release_resource(r);
 		return (0);
 	case SYS_RES_IRQ:
-		if (rid != ATA_IRQ_RID)
+		if (rman_get_rid(r) != ATA_IRQ_RID)
 			return ENOENT;
 		return (0);
 	}
diff --git a/sys/dev/mvs/mvs_soc.c b/sys/dev/mvs/mvs_soc.c
index 36b3f5222cdc..696b65d54359 100644
--- a/sys/dev/mvs/mvs_soc.c
+++ b/sys/dev/mvs/mvs_soc.c
@@ -366,11 +366,10 @@ mvs_alloc_resource(device_t dev, device_t child, int type, int *rid,
 }
 
 static int
-mvs_release_resource(device_t dev, device_t child, int type, int rid,
-			 struct resource *r)
+mvs_release_resource(device_t dev, device_t child, struct resource *r)
 {
 
-	switch (type) {
+	switch (rman_get_type(r)) {
 	case SYS_RES_MEMORY:
 		rman_release_resource(r);
 		return (0);
diff --git a/sys/dev/ofw/ofw_pcib.c b/sys/dev/ofw/ofw_pcib.c
index f9f17b21cdc2..ebc09fccd93e 100644
--- a/sys/dev/ofw/ofw_pcib.c
+++ b/sys/dev/ofw/ofw_pcib.c
@@ -67,8 +67,7 @@
 static struct rman *ofw_pcib_get_rman(device_t, int, u_int);
 static struct resource * ofw_pcib_alloc_resource(device_t, device_t,
     int, int *, rman_res_t, rman_res_t, rman_res_t, u_int);
-static int ofw_pcib_release_resource(device_t, device_t, int, int,
-    struct resource *);
+static int ofw_pcib_release_resource(device_t, device_t, struct resource *);
 static int ofw_pcib_activate_resource(device_t, device_t, struct resource *);
 static int ofw_pcib_deactivate_resource(device_t, device_t, struct resource *);
 static int ofw_pcib_adjust_resource(device_t, device_t,
@@ -444,27 +443,23 @@ ofw_pcib_alloc_resource(device_t bus, device_t child, int type, int *rid,
 }
 
 static int
-ofw_pcib_release_resource(device_t bus, device_t child, int type, int rid,
-    struct resource *res)
+ofw_pcib_release_resource(device_t bus, device_t child, struct resource *res)
 {
 #if defined(NEW_PCIB) && defined(PCI_RES_BUS)
 	struct ofw_pci_softc *sc;
 
 	sc = device_get_softc(bus);
 #endif
-	switch (type) {
+	switch (rman_get_type(res)) {
 #if defined(NEW_PCIB) && defined(PCI_RES_BUS)
 	case PCI_RES_BUS:
-		return (pci_domain_release_bus(sc->sc_pci_domain, child, rid,
-		    res));
+		return (pci_domain_release_bus(sc->sc_pci_domain, child, res));
 #endif
 	case SYS_RES_MEMORY:
 	case SYS_RES_IOPORT:
-		return (bus_generic_rman_release_resource(bus, child, type, rid,
-		    res));
+		return (bus_generic_rman_release_resource(bus, child, res));
 	default:
-		return (bus_generic_release_resource(bus, child, type, rid,
-		    res));
+		return (bus_generic_release_resource(bus, child, res));
 	}
 }
 
diff --git a/sys/dev/ofw/ofwbus.c b/sys/dev/ofw/ofwbus.c
index 48e865b5b52d..51e6072ad4ba 100644
--- a/sys/dev/ofw/ofwbus.c
+++ b/sys/dev/ofw/ofwbus.c
@@ -170,8 +170,7 @@ ofwbus_alloc_resource(device_t bus, device_t child, int type, int *rid,
 }
 
 static int
-ofwbus_release_resource(device_t bus, device_t child, int type,
-    int rid, struct resource *r)
+ofwbus_release_resource(device_t bus, device_t child, struct resource *r)
 {
 	struct resource_list_entry *rle;
 	bool passthrough;
@@ -180,11 +179,11 @@ ofwbus_release_resource(device_t bus, device_t child, int type,
 	if (!passthrough) {
 		/* Clean resource list entry */
 		rle = resource_list_find(BUS_GET_RESOURCE_LIST(bus, child),
-		    type, rid);
+		    rman_get_type(r), rman_get_rid(r));
 		if (rle != NULL)
 			rle->res = NULL;
 	}
 
 	/* Let nexus handle the release. */
-	return (bus_generic_release_resource(bus, child, type, rid, r));
+	return (bus_generic_release_resource(bus, child, r));
 }
diff --git a/sys/dev/pccbb/pccbb.c b/sys/dev/pccbb/pccbb.c
index 302b9d75c864..c40261be4724 100644
--- a/sys/dev/pccbb/pccbb.c
+++ b/sys/dev/pccbb/pccbb.c
@@ -162,7 +162,7 @@ static struct resource	*cbb_cardbus_alloc_resource(device_t brdev,
 		    device_t child, int type, int *rid, rman_res_t start,
 		    rman_res_t end, rman_res_t count, u_int flags);
 static int	cbb_cardbus_release_resource(device_t brdev, device_t child,
-		    int type, int rid, struct resource *res);
+		    struct resource *res);
 static int	cbb_cardbus_power_enable_socket(device_t brdev,
 		    device_t child);
 static int	cbb_cardbus_power_disable_socket(device_t brdev,
@@ -1263,20 +1263,20 @@ cbb_cardbus_alloc_resource(device_t brdev, device_t child, int type,
 }
 
 static int
-cbb_cardbus_release_resource(device_t brdev, device_t child, int type,
-    int rid, struct resource *res)
+cbb_cardbus_release_resource(device_t brdev, device_t child,
+    struct resource *res)
 {
 	struct cbb_softc *sc = device_get_softc(brdev);
 	int error;
 
 	if (rman_get_flags(res) & RF_ACTIVE) {
-		error = bus_deactivate_resource(child, type, rid, res);
+		error = bus_deactivate_resource(child, res);
 		if (error != 0)
 			return (error);
 	}
 	cbb_remove_res(sc, res);
*** 1285 LINES SKIPPED ***