Module Name: src Committed By: thorpej Date: Sat Jan 22 11:49:18 UTC 2022
Modified Files: src/sys/arch/macppc/dev: gpio.c mediabay.c obio.c smu.c uni-n.c src/sys/arch/macppc/macppc: mainbus.c src/sys/arch/sparc/dev: bootbus.c ebus.c sbus.c src/sys/arch/sparc/include: promlib.h src/sys/arch/sparc/sparc: autoconf.c iommu.c promlib.c src/sys/arch/sparc64/dev: cbus.c central.c ebus.c ebus_mainbus.c fhc.c sbus.c upa.c vbus.c src/sys/arch/sparc64/sparc64: autoconf.c src/sys/arch/x86/x86: mpacpi.c src/sys/dev/acpi: acpi.c acpi_pci.c acpi_util.c acpi_util.h src/sys/dev/fdt: fdtbus.c src/sys/dev/i2c: i2c.c src/sys/dev/ofisa: ofisa.c src/sys/dev/ofw: ofbus.c ofw_pci_subr.c ofw_subr.c openfirm.h src/sys/dev/sbus: dma_sbus.c lebuffer.c qec.c Log Message: Change the devhandle_from_*() functions to also take a "super handle", from which the newly created handle will inherit it's implementation. The root implementation for a new handle type is used if an invalid "super handle" is passed. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/arch/macppc/dev/gpio.c \ src/sys/arch/macppc/dev/smu.c cvs rdiff -u -r1.26 -r1.27 src/sys/arch/macppc/dev/mediabay.c cvs rdiff -u -r1.50 -r1.51 src/sys/arch/macppc/dev/obio.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/macppc/dev/uni-n.c cvs rdiff -u -r1.24 -r1.25 src/sys/arch/macppc/macppc/mainbus.c cvs rdiff -u -r1.23 -r1.24 src/sys/arch/sparc/dev/bootbus.c cvs rdiff -u -r1.41 -r1.42 src/sys/arch/sparc/dev/ebus.c cvs rdiff -u -r1.83 -r1.84 src/sys/arch/sparc/dev/sbus.c cvs rdiff -u -r1.26 -r1.27 src/sys/arch/sparc/include/promlib.h cvs rdiff -u -r1.269 -r1.270 src/sys/arch/sparc/sparc/autoconf.c cvs rdiff -u -r1.100 -r1.101 src/sys/arch/sparc/sparc/iommu.c cvs rdiff -u -r1.51 -r1.52 src/sys/arch/sparc/sparc/promlib.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/sparc64/dev/cbus.c cvs rdiff -u -r1.8 -r1.9 src/sys/arch/sparc64/dev/central.c \ src/sys/arch/sparc64/dev/vbus.c cvs rdiff -u -r1.68 -r1.69 src/sys/arch/sparc64/dev/ebus.c cvs rdiff -u -r1.21 -r1.22 src/sys/arch/sparc64/dev/ebus_mainbus.c cvs rdiff -u -r1.10 -r1.11 src/sys/arch/sparc64/dev/fhc.c cvs rdiff -u -r1.103 -r1.104 src/sys/arch/sparc64/dev/sbus.c cvs rdiff -u -r1.23 -r1.24 src/sys/arch/sparc64/dev/upa.c cvs rdiff -u -r1.237 -r1.238 src/sys/arch/sparc64/sparc64/autoconf.c cvs rdiff -u -r1.108 -r1.109 src/sys/arch/x86/x86/mpacpi.c cvs rdiff -u -r1.295 -r1.296 src/sys/dev/acpi/acpi.c cvs rdiff -u -r1.33 -r1.34 src/sys/dev/acpi/acpi_pci.c cvs rdiff -u -r1.31 -r1.32 src/sys/dev/acpi/acpi_util.c cvs rdiff -u -r1.13 -r1.14 src/sys/dev/acpi/acpi_util.h cvs rdiff -u -r1.44 -r1.45 src/sys/dev/fdt/fdtbus.c cvs rdiff -u -r1.82 -r1.83 src/sys/dev/i2c/i2c.c cvs rdiff -u -r1.34 -r1.35 src/sys/dev/ofisa/ofisa.c cvs rdiff -u -r1.30 -r1.31 src/sys/dev/ofw/ofbus.c cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ofw/ofw_pci_subr.c cvs rdiff -u -r1.59 -r1.60 src/sys/dev/ofw/ofw_subr.c cvs rdiff -u -r1.47 -r1.48 src/sys/dev/ofw/openfirm.h cvs rdiff -u -r1.38 -r1.39 src/sys/dev/sbus/dma_sbus.c cvs rdiff -u -r1.39 -r1.40 src/sys/dev/sbus/lebuffer.c cvs rdiff -u -r1.53 -r1.54 src/sys/dev/sbus/qec.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/macppc/dev/gpio.c diff -u src/sys/arch/macppc/dev/gpio.c:1.15 src/sys/arch/macppc/dev/gpio.c:1.16 --- src/sys/arch/macppc/dev/gpio.c:1.15 Sat Aug 7 16:18:57 2021 +++ src/sys/arch/macppc/dev/gpio.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: gpio.c,v 1.15 2021/08/07 16:18:57 thorpej Exp $ */ +/* $NetBSD: gpio.c,v 1.16 2022/01/22 11:49:16 thorpej Exp $ */ /*- * Copyright (C) 1998 Internet Research Institute, Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: gpio.c,v 1.15 2021/08/07 16:18:57 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: gpio.c,v 1.16 2022/01/22 11:49:16 thorpej Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -97,6 +97,7 @@ gpio_obio_attach(device_t parent, device sc->sc_port = mapiodev(ca->ca_baseaddr + ca->ca_reg[0], ca->ca_reg[1], false); + devhandle_t selfh = device_handle(self); ca2.ca_baseaddr = ca->ca_baseaddr; for (child = OF_child(ca->ca_node); child; child = OF_peer(child)) { namelen = OF_getprop(child, "name", name, sizeof(name)); @@ -120,7 +121,7 @@ gpio_obio_attach(device_t parent, device ca2.ca_intr = intr; config_found(self, &ca2, gpio_obio_print, - CFARGS(.devhandle = devhandle_from_of(child))); + CFARGS(.devhandle = devhandle_from_of(selfh, child))); } } Index: src/sys/arch/macppc/dev/smu.c diff -u src/sys/arch/macppc/dev/smu.c:1.15 src/sys/arch/macppc/dev/smu.c:1.16 --- src/sys/arch/macppc/dev/smu.c:1.15 Fri Sep 3 17:18:40 2021 +++ src/sys/arch/macppc/dev/smu.c Sat Jan 22 11:49:16 2022 @@ -365,6 +365,7 @@ smu_setup_iicbus(struct smu_softc *sc) int node; char name[32]; + devhandle_t selfh = device_handle(sc->sc_dev); node = of_getnode_byname(sc->sc_node, "smu-i2c-control"); if (node == 0) node = sc->sc_node; for (node = OF_child(node); @@ -393,7 +394,7 @@ smu_setup_iicbus(struct smu_softc *sc) ca.ca_node = node; ca.ca_tag = i2c; config_found(sc->sc_dev, &ca, smu_iicbus_print, - CFARGS(.devhandle = devhandle_from_of(node))); + CFARGS(.devhandle = devhandle_from_of(selfh, node))); sc->sc_num_iicbus++; } Index: src/sys/arch/macppc/dev/mediabay.c diff -u src/sys/arch/macppc/dev/mediabay.c:1.26 src/sys/arch/macppc/dev/mediabay.c:1.27 --- src/sys/arch/macppc/dev/mediabay.c:1.26 Sat Aug 7 16:18:57 2021 +++ src/sys/arch/macppc/dev/mediabay.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: mediabay.c,v 1.26 2021/08/07 16:18:57 thorpej Exp $ */ +/* $NetBSD: mediabay.c,v 1.27 2022/01/22 11:49:16 thorpej Exp $ */ /*- * Copyright (C) 1999 Tsubai Masanari. All rights reserved. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mediabay.c,v 1.26 2021/08/07 16:18:57 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mediabay.c,v 1.27 2022/01/22 11:49:16 thorpej Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -225,6 +225,7 @@ mediabay_attach_content(struct mediabay_ printf(" done.\n"); } + devhandle_t selfh = device_handle(sc->sc_dev); for (child = OF_child(sc->sc_node); child; child = OF_peer(child)) { memset(name, 0, sizeof(name)); if (OF_getprop(child, "name", name, sizeof(name)) == -1) @@ -244,7 +245,7 @@ mediabay_attach_content(struct mediabay_ ca.ca_intr = intr; content = config_found(sc->sc_dev, &ca, mediabay_print, - CFARGS(.devhandle = devhandle_from_of(child))); + CFARGS(.devhandle = devhandle_from_of(selfh, child))); if (content) { sc->sc_content = content; return; Index: src/sys/arch/macppc/dev/obio.c diff -u src/sys/arch/macppc/dev/obio.c:1.50 src/sys/arch/macppc/dev/obio.c:1.51 --- src/sys/arch/macppc/dev/obio.c:1.50 Sat Aug 7 16:18:57 2021 +++ src/sys/arch/macppc/dev/obio.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: obio.c,v 1.50 2021/08/07 16:18:57 thorpej Exp $ */ +/* $NetBSD: obio.c,v 1.51 2022/01/22 11:49:16 thorpej Exp $ */ /*- * Copyright (C) 1998 Internet Research Institute, Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: obio.c,v 1.50 2021/08/07 16:18:57 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: obio.c,v 1.51 2022/01/22 11:49:16 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -236,6 +236,7 @@ obio_attach(device_t parent, device_t se bus_space_write_1(ca.ca_tag, bsh, 0x37, 0x03); } + devhandle_t selfh = device_handle(self); for (child = OF_child(node); child; child = OF_peer(child)) { namelen = OF_getprop(child, "name", name, sizeof(name)); if (namelen < 0) @@ -272,7 +273,7 @@ obio_attach(device_t parent, device_t se ca.ca_intr = intr; config_found(self, &ca, obio_print, - CFARGS(.devhandle = devhandle_from_of(child))); + CFARGS(.devhandle = devhandle_from_of(selfh, child))); } } Index: src/sys/arch/macppc/dev/uni-n.c diff -u src/sys/arch/macppc/dev/uni-n.c:1.11 src/sys/arch/macppc/dev/uni-n.c:1.12 --- src/sys/arch/macppc/dev/uni-n.c:1.11 Sat Aug 7 16:18:58 2021 +++ src/sys/arch/macppc/dev/uni-n.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: uni-n.c,v 1.11 2021/08/07 16:18:58 thorpej Exp $ */ +/* $NetBSD: uni-n.c,v 1.12 2022/01/22 11:49:16 thorpej Exp $ */ /*- * Copyright (C) 2005 Michael Lorenz. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uni-n.c,v 1.11 2021/08/07 16:18:58 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uni-n.c,v 1.12 2022/01/22 11:49:16 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -129,6 +129,7 @@ uni_n_attach(device_t parent, device_t s panic("Can't init uni-n mem tag"); } + devhandle_t selfh = device_handle(self); for (child = OF_child(node); child; child = OF_peer(child)) { namelen = OF_getprop(child, "name", name, sizeof(name)); if (namelen < 0) @@ -150,7 +151,7 @@ uni_n_attach(device_t parent, device_t s ca.ca_reg = reg; ca.ca_intr = intr; config_found(self, &ca, uni_n_print, - CFARGS(.devhandle = devhandle_from_of(child))); + CFARGS(.devhandle = devhandle_from_of(selfh, child))); } } Index: src/sys/arch/macppc/macppc/mainbus.c diff -u src/sys/arch/macppc/macppc/mainbus.c:1.24 src/sys/arch/macppc/macppc/mainbus.c:1.25 --- src/sys/arch/macppc/macppc/mainbus.c:1.24 Sat Aug 7 16:18:58 2021 +++ src/sys/arch/macppc/macppc/mainbus.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: mainbus.c,v 1.24 2021/08/07 16:18:58 thorpej Exp $ */ +/* $NetBSD: mainbus.c,v 1.25 2022/01/22 11:49:16 thorpej Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.24 2021/08/07 16:18:58 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.25 2022/01/22 11:49:16 thorpej Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -73,6 +73,8 @@ mainbus_attach(device_t parent, device_t printf("\n"); + devhandle_t selfh = device_handle(self); + cpus = OF_finddevice("/cpus"); if (cpus != 0) { node = OF_child(cpus); @@ -81,7 +83,8 @@ mainbus_attach(device_t parent, device_t ca.ca_reg = reg; ca.ca_nreg = OF_getprop(node, "reg", reg, sizeof(reg)); config_found(self, &ca, NULL, - CFARGS(.devhandle = devhandle_from_of(node))); + CFARGS(.devhandle = devhandle_from_of(selfh, + node))); node = OF_peer(node); } } else { @@ -100,7 +103,7 @@ mainbus_attach(device_t parent, device_t oba.oba_busname = "ofw"; oba.oba_phandle = node; config_found(self, &oba, NULL, - CFARGS(.devhandle = devhandle_from_of(node))); + CFARGS(.devhandle = devhandle_from_of(selfh, node))); } for (node = OF_child(OF_finddevice("/")); node; node = OF_peer(node)) { @@ -113,7 +116,7 @@ mainbus_attach(device_t parent, device_t ca.ca_nreg = OF_getprop(node, "reg", reg, sizeof(reg)); ca.ca_reg = reg; config_found(self, &ca, NULL, - CFARGS(.devhandle = devhandle_from_of(node))); + CFARGS(.devhandle = devhandle_from_of(selfh, node))); } #ifdef MAMBO Index: src/sys/arch/sparc/dev/bootbus.c diff -u src/sys/arch/sparc/dev/bootbus.c:1.23 src/sys/arch/sparc/dev/bootbus.c:1.24 --- src/sys/arch/sparc/dev/bootbus.c:1.23 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc/dev/bootbus.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: bootbus.c,v 1.23 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: bootbus.c,v 1.24 2022/01/22 11:49:16 thorpej Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bootbus.c,v 1.23 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bootbus.c,v 1.24 2022/01/22 11:49:16 thorpej Exp $"); #include <sys/param.h> #include <sys/malloc.h> @@ -115,6 +115,7 @@ bootbus_attach(device_t parent, device_t } /* Attach the CPU (and possibly bootbus) child nodes. */ + devhandle_t selfh = device_handle(self); for (node = firstchild(sc->sc_node); node != 0; node = nextsibling(node)) { struct bootbus_attach_args baa; @@ -123,7 +124,7 @@ bootbus_attach(device_t parent, device_t panic("bootbus_attach: failed to set up attach args"); config_found(self, &baa, bootbus_print, - CFARGS(.devhandle = prom_node_to_devhandle(node), + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node), .submatch = bootbus_submatch)); bootbus_destroy_attach_args(&baa); Index: src/sys/arch/sparc/dev/ebus.c diff -u src/sys/arch/sparc/dev/ebus.c:1.41 src/sys/arch/sparc/dev/ebus.c:1.42 --- src/sys/arch/sparc/dev/ebus.c:1.41 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc/dev/ebus.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ebus.c,v 1.41 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: ebus.c,v 1.42 2022/01/22 11:49:16 thorpej Exp $ */ /* * Copyright (c) 1999, 2000 Matthew R. Green @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ebus.c,v 1.41 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ebus.c,v 1.42 2022/01/22 11:49:16 thorpej Exp $"); #if defined(DEBUG) && !defined(EBUS_DEBUG) #define EBUS_DEBUG @@ -307,6 +307,7 @@ ebus_attach(device_t parent, device_t se * now attach all our children */ DPRINTF(EDB_CHILD, ("ebus node %08x, searching children...\n", node)); + devhandle_t selfh = device_handle(self); for (node = firstchild(node); node; node = nextsibling(node)) { char *name = prom_getpropstring(node, "name"); @@ -317,7 +318,7 @@ ebus_attach(device_t parent, device_t se DPRINTF(EDB_CHILD, ("- found child `%s', attaching\n", ea.ea_name)); (void)config_found(self, &ea, ebus_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); ebus_destroy_attach_args(&ea); } } Index: src/sys/arch/sparc/dev/sbus.c diff -u src/sys/arch/sparc/dev/sbus.c:1.83 src/sys/arch/sparc/dev/sbus.c:1.84 --- src/sys/arch/sparc/dev/sbus.c:1.83 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc/dev/sbus.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: sbus.c,v 1.83 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: sbus.c,v 1.84 2022/01/22 11:49:16 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -74,7 +74,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sbus.c,v 1.83 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sbus.c,v 1.84 2022/01/22 11:49:16 thorpej Exp $"); #include <sys/param.h> #include <sys/malloc.h> @@ -352,6 +352,7 @@ sbus_attach_common(struct sbus_softc *sc const char *const *ssp; bus_space_tag_t sbt; struct sbus_attach_args sa; + devhandle_t selfh = device_handle(sc->sc_dev); if ((sbt = bus_space_tag_alloc(sc->sc_bustag, sc)) == NULL) { printf("%s: attach: out of memory\n", @@ -413,7 +414,7 @@ sbus_attach_common(struct sbus_softc *sc panic("sbus_attach: %s: incomplete", sp); } (void) config_found(sc->sc_dev, (void *)&sa, sbus_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); sbus_destroy_attach_args(&sa); } @@ -435,7 +436,7 @@ sbus_attach_common(struct sbus_softc *sc continue; } (void) config_found(sc->sc_dev, (void *)&sa, sbus_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); sbus_destroy_attach_args(&sa); } } Index: src/sys/arch/sparc/include/promlib.h diff -u src/sys/arch/sparc/include/promlib.h:1.26 src/sys/arch/sparc/include/promlib.h:1.27 --- src/sys/arch/sparc/include/promlib.h:1.26 Mon May 10 13:59:30 2021 +++ src/sys/arch/sparc/include/promlib.h Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: promlib.h,v 1.26 2021/05/10 13:59:30 thorpej Exp $ */ +/* $NetBSD: promlib.h,v 1.27 2022/01/22 11:49:16 thorpej Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -113,7 +113,7 @@ struct promops { int (*po_finddevice)(const char *); /* devhandle_t interface */ - devhandle_t (*po_node_to_devhandle)(int); + devhandle_t (*po_node_to_devhandle)(devhandle_t, int); int (*po_devhandle_to_node)(devhandle_t); }; @@ -217,8 +217,8 @@ void prom_boot(char *) __attribute__((__ #define prom_getproplen(node,name) prom_proplen(node, name) /* devhandle_t interface */ -#define prom_node_to_devhandle(n) ((*promops.po_node_to_devhandle)(n)) -#define prom_devhandle_to_node(dh) ((*promops.po_devhandle_to_node)(dh)) +#define prom_node_to_devhandle(s, n) ((*promops.po_node_to_devhandle)((s), (n))) +#define prom_devhandle_to_node(dh) ((*promops.po_devhandle_to_node)(dh)) /* MP stuff - not currently used */ #define prom_cpustart(m,a,c,pc) ((*promops.po_cpustart)(m,a,c,pc)) Index: src/sys/arch/sparc/sparc/autoconf.c diff -u src/sys/arch/sparc/sparc/autoconf.c:1.269 src/sys/arch/sparc/sparc/autoconf.c:1.270 --- src/sys/arch/sparc/sparc/autoconf.c:1.269 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc/sparc/autoconf.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: autoconf.c,v 1.269 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: autoconf.c,v 1.270 2022/01/22 11:49:16 thorpej Exp $ */ /* * Copyright (c) 1996 @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.269 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.270 2022/01/22 11:49:16 thorpej Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -1243,6 +1243,7 @@ mainbus_attach(device_t parent, device_t * The rest of this routine is for OBP machines exclusively. */ #if defined(SUN4C) || defined(SUN4M) || defined(SUN4D) + devhandle_t selfh = device_handle(dev); if (CPU_ISSUN4D) openboot_special = openboot_special4d; @@ -1286,7 +1287,8 @@ mainbus_attach(device_t parent, device_t ma.ma_node = node; ma.ma_name = "cpu"; config_found(dev, (void *)&ma, mbprint, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, + node))); if (node == bootnode && bootmid != 0) { /* Re-enter loop to find all remaining CPUs */ goto rescan; @@ -1299,7 +1301,8 @@ mainbus_attach(device_t parent, device_t ma.ma_node = findroot(); ma.ma_name = "cpu"; config_found(dev, (void *)&ma, mbprint, - CFARGS(.devhandle = prom_node_to_devhandle(ma.ma_node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, + ma.ma_node))); } for (ssp = openboot_special; (sp = ssp->dev) != NULL; ssp++) { @@ -1331,7 +1334,8 @@ mainbus_attach(device_t parent, device_t if (config_found(dev, (void *)&ma, mbprint, CFARGS(.devhandle = - prom_node_to_devhandle(node))) == NULL) { + prom_node_to_devhandle(selfh, + node))) == NULL) { if (ssp->flags & BS_OPTIONAL) continue; panic("%s", sp); } @@ -1391,7 +1395,8 @@ mainbus_attach(device_t parent, device_t ma.ma_promvaddr = 0; config_found(dev, (void *)&ma, mbprint, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, + node))); continue; } #endif /* SUN4M */ @@ -1409,7 +1414,7 @@ mainbus_attach(device_t parent, device_t continue; config_found(dev, (void *)&ma, mbprint, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); } #endif /* SUN4C || SUN4M || SUN4D */ } Index: src/sys/arch/sparc/sparc/iommu.c diff -u src/sys/arch/sparc/sparc/iommu.c:1.100 src/sys/arch/sparc/sparc/iommu.c:1.101 --- src/sys/arch/sparc/sparc/iommu.c:1.100 Mon Aug 9 21:08:06 2021 +++ src/sys/arch/sparc/sparc/iommu.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: iommu.c,v 1.100 2021/08/09 21:08:06 andvar Exp $ */ +/* $NetBSD: iommu.c,v 1.101 2022/01/22 11:49:16 thorpej Exp $ */ /* * Copyright (c) 1996 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: iommu.c,v 1.100 2021/08/09 21:08:06 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: iommu.c,v 1.101 2022/01/22 11:49:16 thorpej Exp $"); #include "opt_sparc_arch.h" @@ -278,6 +278,8 @@ iommu_attach(device_t parent, device_t s IOMMU_DVMA_BASE, IOMMU_DVMA_END, 0, 0, EX_WAITOK); + devhandle_t selfh = device_handle(self); + /* * If we are attaching implicit iommu on JS1/OF we do not have * an iommu node to traverse, instead mainbus_attach passed us @@ -299,7 +301,7 @@ iommu_attach(device_t parent, device_t s ia.iom_nreg = 1; config_found(self, (void *)&ia, iommu_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); return; } @@ -323,7 +325,7 @@ iommu_attach(device_t parent, device_t s &ia.iom_nreg, &ia.iom_reg); config_found(self, (void *)&ia, iommu_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); if (ia.iom_reg != NULL) free(ia.iom_reg, M_DEVBUF); } Index: src/sys/arch/sparc/sparc/promlib.c diff -u src/sys/arch/sparc/sparc/promlib.c:1.51 src/sys/arch/sparc/sparc/promlib.c:1.52 --- src/sys/arch/sparc/sparc/promlib.c:1.51 Fri Jan 21 15:55:36 2022 +++ src/sys/arch/sparc/sparc/promlib.c Sat Jan 22 11:49:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: promlib.c,v 1.51 2022/01/21 15:55:36 thorpej Exp $ */ +/* $NetBSD: promlib.c,v 1.52 2022/01/22 11:49:16 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: promlib.c,v 1.51 2022/01/21 15:55:36 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: promlib.c,v 1.52 2022/01/22 11:49:16 thorpej Exp $"); #if defined(_KERNEL_OPT) #include "opt_sparc_arch.h" @@ -239,12 +239,18 @@ static const struct devhandle_impl obp_d }; static devhandle_t -devhandle_from_obp(int node) +devhandle_from_obp(devhandle_t super_handle, int node) { - devhandle_t handle = { - .impl = &obp_devhandle_impl, - .integer = node, - }; + devhandle_type_t super_type = devhandle_type(super_handle); + devhandle_t handle = { 0 }; + + if (super_type == DEVHANDLE_TYPE_OPENBOOT) { + handle.impl = super_handle.impl; + } else { + KASSERT(super_type == DEVHANDLE_TYPE_INVALID); + handle.impl = &obp_devhandle_impl; + } + handle.integer = node; return handle; } @@ -265,7 +271,7 @@ obp_device_enumerate_children(device_t d for (node = prom_firstchild(node); node != 0; node = prom_nextsibling(node)) { - if (!args->callback(dev, devhandle_from_obp(node), + if (!args->callback(dev, devhandle_from_obp(call_handle, node), args->callback_arg)) { break; } Index: src/sys/arch/sparc64/dev/cbus.c diff -u src/sys/arch/sparc64/dev/cbus.c:1.7 src/sys/arch/sparc64/dev/cbus.c:1.8 --- src/sys/arch/sparc64/dev/cbus.c:1.7 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc64/dev/cbus.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: cbus.c,v 1.7 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: cbus.c,v 1.8 2022/01/22 11:49:17 thorpej Exp $ */ /* $OpenBSD: cbus.c,v 1.15 2015/09/27 11:29:20 kettenis Exp $ */ /* * Copyright (c) 2008 Mark Kettenis @@ -101,6 +101,7 @@ cbus_attach(device_t parent, device_t se return; } + devhandle_t selfh = device_handle(self); for (node = OF_child(va->va_node); node; node = OF_peer(node)) { struct cbus_attach_args ca; char buf[32]; @@ -122,7 +123,7 @@ cbus_attach(device_t parent, device_t se } config_found(self, &ca, cbus_print, - CFARGS(.devhandle = devhandle_from_of(ca.ca_node))); + CFARGS(.devhandle = devhandle_from_of(selfh, ca.ca_node))); } } Index: src/sys/arch/sparc64/dev/central.c diff -u src/sys/arch/sparc64/dev/central.c:1.8 src/sys/arch/sparc64/dev/central.c:1.9 --- src/sys/arch/sparc64/dev/central.c:1.8 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc64/dev/central.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: central.c,v 1.8 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: central.c,v 1.9 2022/01/22 11:49:17 thorpej Exp $ */ /* $OpenBSD: central.c,v 1.7 2010/11/11 17:58:23 miod Exp $ */ /* @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: central.c,v 1.8 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: central.c,v 1.9 2022/01/22 11:49:17 thorpej Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -97,6 +97,7 @@ central_attach(device_t parent, device_t printf("\n"); + devhandle_t selfh = device_handle(self); node0 = firstchild(sc->sc_node); for (node = node0; node; node = nextsibling(node)) { struct central_attach_args ca; @@ -113,7 +114,8 @@ central_attach(device_t parent, device_t &ca.ca_nreg, (void **)&ca.ca_reg); (void)config_found(self, (void *)&ca, central_print, - CFARGS(.devhandle = prom_node_to_devhandle(ca.ca_node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, + ca.ca_node))); if (ca.ca_name != NULL) free(ca.ca_name, M_DEVBUF); Index: src/sys/arch/sparc64/dev/vbus.c diff -u src/sys/arch/sparc64/dev/vbus.c:1.8 src/sys/arch/sparc64/dev/vbus.c:1.9 --- src/sys/arch/sparc64/dev/vbus.c:1.8 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc64/dev/vbus.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: vbus.c,v 1.8 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: vbus.c,v 1.9 2022/01/22 11:49:17 thorpej Exp $ */ /* $OpenBSD: vbus.c,v 1.8 2015/09/27 11:29:20 kettenis Exp $ */ /* * Copyright (c) 2008 Mark Kettenis @@ -81,6 +81,7 @@ vbus_attach(device_t parent, device_t se sc->sc_dmatag = ma->ma_dmatag; printf("\n"); + devhandle_t selfh = device_handle(self); for (node = OF_child(ma->ma_node); node; node = OF_peer(node)) { struct vbus_attach_args va; char buf[32]; @@ -97,7 +98,8 @@ vbus_attach(device_t parent, device_t se prom_getprop(node, "interrupts", sizeof(*va.va_intr), &va.va_nintr, (void **)&va.va_intr); config_found(self, &va, vbus_print, - CFARGS(.devhandle = prom_node_to_devhandle(va.va_node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, + va.va_node))); } struct vbus_attach_args va; Index: src/sys/arch/sparc64/dev/ebus.c diff -u src/sys/arch/sparc64/dev/ebus.c:1.68 src/sys/arch/sparc64/dev/ebus.c:1.69 --- src/sys/arch/sparc64/dev/ebus.c:1.68 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc64/dev/ebus.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ebus.c,v 1.68 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: ebus.c,v 1.69 2022/01/22 11:49:17 thorpej Exp $ */ /* * Copyright (c) 1999, 2000, 2001 Matthew R. Green @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ebus.c,v 1.68 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ebus.c,v 1.69 2022/01/22 11:49:17 thorpej Exp $"); #include "opt_ddb.h" @@ -204,6 +204,7 @@ ebus_attach(device_t parent, device_t se * now attach all our children */ DPRINTF(EDB_CHILD, ("ebus node %08x, searching children...\n", node)); + devhandle_t selfh = device_handle(self); for (node = firstchild(node); node; node = nextsibling(node)) { char *name = prom_getpropstring(node, "name"); @@ -214,7 +215,8 @@ ebus_attach(device_t parent, device_t se DPRINTF(EDB_CHILD, ("- found child `%s', attaching\n", eba.ea_name)); (void)config_found(self, &eba, ebus_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, + node))); } ebus_destroy_attach_args(&eba); } Index: src/sys/arch/sparc64/dev/ebus_mainbus.c diff -u src/sys/arch/sparc64/dev/ebus_mainbus.c:1.21 src/sys/arch/sparc64/dev/ebus_mainbus.c:1.22 --- src/sys/arch/sparc64/dev/ebus_mainbus.c:1.21 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc64/dev/ebus_mainbus.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ebus_mainbus.c,v 1.21 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: ebus_mainbus.c,v 1.22 2022/01/22 11:49:17 thorpej Exp $ */ /* $OpenBSD: ebus_mainbus.c,v 1.7 2010/11/11 17:58:23 miod Exp $ */ /* @@ -18,7 +18,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ebus_mainbus.c,v 1.21 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ebus_mainbus.c,v 1.22 2022/01/22 11:49:17 thorpej Exp $"); #ifdef DEBUG #define EDB_PROM 0x01 @@ -164,6 +164,7 @@ ebus_mainbus_attach(device_t parent, dev * now attach all our children */ DPRINTF(EDB_CHILD, ("ebus node %08x, searching children...\n", node)); + devhandle_t selfh = device_handle(self); for (node = firstchild(node); node; node = nextsibling(node)) { if (ebus_setup_attach_args(sc, node, &eba) != 0) { DPRINTF(EDB_CHILD, @@ -174,7 +175,8 @@ ebus_mainbus_attach(device_t parent, dev DPRINTF(EDB_CHILD, ("- found child `%s', attaching\n", eba.ea_name)); (void)config_found(self, &eba, ebus_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, + node))); } ebus_destroy_attach_args(&eba); } Index: src/sys/arch/sparc64/dev/fhc.c diff -u src/sys/arch/sparc64/dev/fhc.c:1.10 src/sys/arch/sparc64/dev/fhc.c:1.11 --- src/sys/arch/sparc64/dev/fhc.c:1.10 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc64/dev/fhc.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: fhc.c,v 1.10 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: fhc.c,v 1.11 2022/01/22 11:49:17 thorpej Exp $ */ /* $OpenBSD: fhc.c,v 1.17 2010/11/11 17:58:23 miod Exp $ */ /* @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fhc.c,v 1.10 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fhc.c,v 1.11 2022/01/22 11:49:17 thorpej Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -91,6 +91,7 @@ fhc_attach(struct fhc_softc *sc) prom_getprop(sc->sc_node, "ranges", sizeof(struct fhc_range), &sc->sc_nrange, (void **)&sc->sc_range); + devhandle_t selfh = device_handle(sc->sc_dev); node0 = firstchild(sc->sc_node); for (node = node0; node; node = nextsibling(node)) { struct fhc_attach_args fa; @@ -117,7 +118,7 @@ fhc_attach(struct fhc_softc *sc) &fa.fa_npromvaddrs, (void **)&fa.fa_promvaddrs); (void)config_found(sc->sc_dev, (void *)&fa, fhc_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); if (fa.fa_name != NULL) free(fa.fa_name, M_DEVBUF); Index: src/sys/arch/sparc64/dev/sbus.c diff -u src/sys/arch/sparc64/dev/sbus.c:1.103 src/sys/arch/sparc64/dev/sbus.c:1.104 --- src/sys/arch/sparc64/dev/sbus.c:1.103 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc64/dev/sbus.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: sbus.c,v 1.103 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: sbus.c,v 1.104 2022/01/22 11:49:17 thorpej Exp $ */ /* * Copyright (c) 1999-2002 Eduardo Horvath @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sbus.c,v 1.103 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sbus.c,v 1.104 2022/01/22 11:49:17 thorpej Exp $"); #include "opt_ddb.h" @@ -284,6 +284,7 @@ sbus_attach(device_t parent, device_t se * `specials' is an array of device names that are treated * specially: */ + devhandle_t selfh = device_handle(self); node0 = OF_child(node); for (node = node0; node; node = OF_peer(node)) { char *name1 = prom_getpropstring(node, "name"); @@ -294,7 +295,7 @@ sbus_attach(device_t parent, device_t se continue; } (void) config_found(self, &sa, sbus_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); sbus_destroy_attach_args(&sa); } } Index: src/sys/arch/sparc64/dev/upa.c diff -u src/sys/arch/sparc64/dev/upa.c:1.23 src/sys/arch/sparc64/dev/upa.c:1.24 --- src/sys/arch/sparc64/dev/upa.c:1.23 Sat Aug 7 16:19:05 2021 +++ src/sys/arch/sparc64/dev/upa.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: upa.c,v 1.23 2021/08/07 16:19:05 thorpej Exp $ */ +/* $NetBSD: upa.c,v 1.24 2022/01/22 11:49:17 thorpej Exp $ */ /* $OpenBSD: upa.c,v 1.8 2008/01/17 22:53:18 kettenis Exp $ */ /* @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: upa.c,v 1.23 2021/08/07 16:19:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: upa.c,v 1.24 2022/01/22 11:49:17 thorpej Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -116,6 +116,7 @@ upa_attach(device_t parent, device_t sel sc->sc_cbt = upa_alloc_bus_tag(sc); + devhandle_t selfh = device_handle(sc->sc_dev); for (node = OF_child(sc->sc_node); node; node = OF_peer(node)) { char buf[32]; struct mainbus_attach_args map; @@ -133,7 +134,7 @@ upa_attach(device_t parent, device_t sel map.ma_bustag = sc->sc_cbt; map.ma_dmatag = ma->ma_dmatag; config_found(sc->sc_dev, &map, upa_print, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); } } Index: src/sys/arch/sparc64/sparc64/autoconf.c diff -u src/sys/arch/sparc64/sparc64/autoconf.c:1.237 src/sys/arch/sparc64/sparc64/autoconf.c:1.238 --- src/sys/arch/sparc64/sparc64/autoconf.c:1.237 Mon Oct 4 21:02:39 2021 +++ src/sys/arch/sparc64/sparc64/autoconf.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: autoconf.c,v 1.237 2021/10/04 21:02:39 andvar Exp $ */ +/* $NetBSD: autoconf.c,v 1.238 2022/01/22 11:49:17 thorpej Exp $ */ /* * Copyright (c) 1996 @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.237 2021/10/04 21:02:39 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.238 2022/01/22 11:49:17 thorpej Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -701,6 +701,8 @@ extern struct sparc_bus_space_tag mainbu aprint_normal(": %s: hostid %lx\n", machine_model, hostid); aprint_naive("\n"); + devhandle_t selfh = device_handle(dev); + /* * Locate and configure the ``early'' devices. These must be * configured before we can do the rest. For instance, the @@ -730,7 +732,7 @@ extern struct sparc_bus_space_tag mainbu ma.ma_node = node; ma.ma_name = "cpu"; config_found(dev, &ma, mbprint, - CFARGS(.devhandle = devhandle_from_of(ma.ma_node))); + CFARGS(.devhandle = devhandle_from_of(selfh, ma.ma_node))); } node = findroot(); /* re-init root node */ @@ -814,7 +816,8 @@ extern struct sparc_bus_space_tag mainbu } #endif (void) config_found(dev, (void *)&ma, mbprint, - CFARGS(.devhandle = prom_node_to_devhandle(ma.ma_node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, + ma.ma_node))); free(ma.ma_reg, M_DEVBUF); if (ma.ma_ninterrupts) free(ma.ma_interrupts, M_DEVBUF); Index: src/sys/arch/x86/x86/mpacpi.c diff -u src/sys/arch/x86/x86/mpacpi.c:1.108 src/sys/arch/x86/x86/mpacpi.c:1.109 --- src/sys/arch/x86/x86/mpacpi.c:1.108 Thu Oct 7 12:52:27 2021 +++ src/sys/arch/x86/x86/mpacpi.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: mpacpi.c,v 1.108 2021/10/07 12:52:27 msaitoh Exp $ */ +/* $NetBSD: mpacpi.c,v 1.109 2022/01/22 11:49:17 thorpej Exp $ */ /* * Copyright (c) 2003 Wasabi Systems, Inc. @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mpacpi.c,v 1.108 2021/10/07 12:52:27 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mpacpi.c,v 1.109 2022/01/22 11:49:17 thorpej Exp $"); #include "acpica.h" #include "opt_acpi.h" @@ -506,7 +506,8 @@ mpacpi_pci_foundbus(struct acpi_devnode } mpr = kmem_zalloc(sizeof(struct mpacpi_pcibus), KM_SLEEP); - mpr->mpr_devhandle = devhandle_from_acpi(ad->ad_handle); + mpr->mpr_devhandle = + devhandle_from_acpi(devhandle_invalid(), ad->ad_handle); mpr->mpr_buf = buf; mpr->mpr_seg = ad->ad_pciinfo->ap_segment; mpr->mpr_bus = ad->ad_pciinfo->ap_downbus; Index: src/sys/dev/acpi/acpi.c diff -u src/sys/dev/acpi/acpi.c:1.295 src/sys/dev/acpi/acpi.c:1.296 --- src/sys/dev/acpi/acpi.c:1.295 Fri Dec 31 14:22:42 2021 +++ src/sys/dev/acpi/acpi.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi.c,v 1.295 2021/12/31 14:22:42 riastradh Exp $ */ +/* $NetBSD: acpi.c,v 1.296 2022/01/22 11:49:17 thorpej Exp $ */ /*- * Copyright (c) 2003, 2007 The NetBSD Foundation, Inc. @@ -100,7 +100,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.295 2021/12/31 14:22:42 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.296 2022/01/22 11:49:17 thorpej Exp $"); #include "pci.h" #include "opt_acpi.h" @@ -962,7 +962,8 @@ acpi_rescan_early(struct acpi_softc *sc) ad->ad_device = config_found(sc->sc_dev, &aa, acpi_print, CFARGS(.iattr = "acpinodebus", - .devhandle = devhandle_from_acpi(ad->ad_handle))); + .devhandle = devhandle_from_acpi(devhandle_invalid(), + ad->ad_handle))); } } @@ -1029,7 +1030,8 @@ acpi_rescan_nodes(struct acpi_softc *sc) ad->ad_device = config_found(sc->sc_dev, &aa, acpi_print, CFARGS(.iattr = "acpinodebus", - .devhandle = devhandle_from_acpi(ad->ad_handle))); + .devhandle = devhandle_from_acpi(devhandle_invalid(), + ad->ad_handle))); } } Index: src/sys/dev/acpi/acpi_pci.c diff -u src/sys/dev/acpi/acpi_pci.c:1.33 src/sys/dev/acpi/acpi_pci.c:1.34 --- src/sys/dev/acpi/acpi_pci.c:1.33 Mon Dec 20 11:17:40 2021 +++ src/sys/dev/acpi/acpi_pci.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_pci.c,v 1.33 2021/12/20 11:17:40 skrll Exp $ */ +/* $NetBSD: acpi_pci.c,v 1.34 2022/01/22 11:49:17 thorpej Exp $ */ /* * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_pci.c,v 1.33 2021/12/20 11:17:40 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_pci.c,v 1.34 2022/01/22 11:49:17 thorpej Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -572,7 +572,7 @@ acpi_pci_bus_get_child_devhandle(device_ if (ad != NULL && (hdl = ad->ad_handle) != NULL) { /* Found it! */ - args->devhandle = devhandle_from_acpi(hdl); + args->devhandle = devhandle_from_acpi(call_handle, hdl); return 0; } Index: src/sys/dev/acpi/acpi_util.c diff -u src/sys/dev/acpi/acpi_util.c:1.31 src/sys/dev/acpi/acpi_util.c:1.32 --- src/sys/dev/acpi/acpi_util.c:1.31 Sat Jan 15 14:40:22 2022 +++ src/sys/dev/acpi/acpi_util.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_util.c,v 1.31 2022/01/15 14:40:22 jmcneill Exp $ */ +/* $NetBSD: acpi_util.c,v 1.32 2022/01/22 11:49:17 thorpej Exp $ */ /*- * Copyright (c) 2003, 2007, 2021 The NetBSD Foundation, Inc. @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_util.c,v 1.31 2022/01/15 14:40:22 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_util.c,v 1.32 2022/01/22 11:49:17 thorpej Exp $"); #include <sys/param.h> #include <sys/kmem.h> @@ -121,12 +121,18 @@ static const struct devhandle_impl acpi_ }; devhandle_t -devhandle_from_acpi(ACPI_HANDLE const hdl) +devhandle_from_acpi(devhandle_t super_handle, ACPI_HANDLE const hdl) { - devhandle_t handle = { - .impl = &acpi_devhandle_impl, - .pointer = hdl, - }; + devhandle_type_t super_type = devhandle_type(super_handle); + devhandle_t handle = { 0 }; + + if (super_type == DEVHANDLE_TYPE_ACPI) { + handle.impl = super_handle.impl; + } else { + KASSERT(super_type == DEVHANDLE_TYPE_INVALID); + handle.impl = &acpi_devhandle_impl; + } + handle.pointer = hdl; return handle; } @@ -154,7 +160,8 @@ acpi_device_enumerate_children(device_t !acpi_device_present(ad->ad_handle)) { continue; } - if (!args->callback(dev, devhandle_from_acpi(ad->ad_handle), + if (!args->callback(dev, devhandle_from_acpi(call_handle, + ad->ad_handle), args->callback_arg)) { break; } Index: src/sys/dev/acpi/acpi_util.h diff -u src/sys/dev/acpi/acpi_util.h:1.13 src/sys/dev/acpi/acpi_util.h:1.14 --- src/sys/dev/acpi/acpi_util.h:1.13 Sat Jan 15 14:40:33 2022 +++ src/sys/dev/acpi/acpi_util.h Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_util.h,v 1.13 2022/01/15 14:40:33 jmcneill Exp $ */ +/* $NetBSD: acpi_util.h,v 1.14 2022/01/22 11:49:17 thorpej Exp $ */ /*- * Copyright (c) 2003, 2007 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #ifndef _SYS_DEV_ACPI_ACPI_UTIL_H #define _SYS_DEV_ACPI_ACPI_UTIL_H -devhandle_t devhandle_from_acpi(ACPI_HANDLE); +devhandle_t devhandle_from_acpi(devhandle_t, ACPI_HANDLE); ACPI_HANDLE devhandle_to_acpi(devhandle_t); #define ACPI_DEVICE_CALL_REGISTER(_n_, _c_) \ Index: src/sys/dev/fdt/fdtbus.c diff -u src/sys/dev/fdt/fdtbus.c:1.44 src/sys/dev/fdt/fdtbus.c:1.45 --- src/sys/dev/fdt/fdtbus.c:1.44 Sun Nov 7 17:12:15 2021 +++ src/sys/dev/fdt/fdtbus.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: fdtbus.c,v 1.44 2021/11/07 17:12:15 jmcneill Exp $ */ +/* $NetBSD: fdtbus.c,v 1.45 2022/01/22 11:49:17 thorpej Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1.44 2021/11/07 17:12:15 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1.45 2022/01/22 11:49:17 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -423,12 +423,15 @@ fdt_scan(struct fdt_softc *sc, int pass) */ fdt_pre_attach(node); + devhandle_t nodeh = device_handle(node->n_bus); + if (quiet) { node->n_dev = config_attach(node->n_bus, node->n_cf, &faa, fdtbus_print, CFARGS(.locators = locs, .devhandle = - devhandle_from_of(node->n_phandle))); + devhandle_from_of(nodeh, + node->n_phandle))); } else { /* * Default pass. @@ -439,7 +442,8 @@ fdt_scan(struct fdt_softc *sc, int pass) .iattr = "fdt", .locators = locs, .devhandle = - devhandle_from_of(node->n_phandle))); + devhandle_from_of(nodeh, + node->n_phandle))); } if (node->n_dev != NULL) Index: src/sys/dev/i2c/i2c.c diff -u src/sys/dev/i2c/i2c.c:1.82 src/sys/dev/i2c/i2c.c:1.83 --- src/sys/dev/i2c/i2c.c:1.82 Fri Jan 21 15:55:36 2022 +++ src/sys/dev/i2c/i2c.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: i2c.c,v 1.82 2022/01/21 15:55:36 thorpej Exp $ */ +/* $NetBSD: i2c.c,v 1.83 2022/01/22 11:49:17 thorpej Exp $ */ /* * Copyright (c) 2003 Wasabi Systems, Inc. @@ -53,7 +53,7 @@ #endif /* _KERNEL_OPT */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.82 2022/01/21 15:55:36 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.83 2022/01/22 11:49:17 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -498,13 +498,15 @@ iic_attach(device_t parent, device_t sel devhandle = devhandle_invalid(); #ifdef I2C_USE_FDT if (cookietype == I2C_COOKIE_OF) { - devhandle = devhandle_from_of((int)cookie); + devhandle = devhandle_from_of(devhandle, + (int)cookie); } #endif /* I2C_USE_FDT */ #ifdef I2C_USE_ACPI if (cookietype == I2C_COOKIE_ACPI) { devhandle = - devhandle_from_acpi((ACPI_HANDLE)cookie); + devhandle_from_acpi(devhandle, + (ACPI_HANDLE)cookie); } #endif /* I2C_USE_ACPI */ Index: src/sys/dev/ofisa/ofisa.c diff -u src/sys/dev/ofisa/ofisa.c:1.34 src/sys/dev/ofisa/ofisa.c:1.35 --- src/sys/dev/ofisa/ofisa.c:1.34 Sat Aug 7 16:19:13 2021 +++ src/sys/dev/ofisa/ofisa.c Sat Jan 22 11:49:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ofisa.c,v 1.34 2021/08/07 16:19:13 thorpej Exp $ */ +/* $NetBSD: ofisa.c,v 1.35 2022/01/22 11:49:17 thorpej Exp $ */ /* * Copyright 1997, 1998 @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ofisa.c,v 1.34 2021/08/07 16:19:13 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofisa.c,v 1.35 2022/01/22 11:49:17 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -127,6 +127,7 @@ ofisaattach(device_t parent, device_t se isa_dmainit(iba.iba_ic, iba.iba_iot, iba.iba_dmat, self); #endif + devhandle_t selfh = device_handle(self); for (child = OF_child(oba->oba_phandle); child; child = OF_peer(child)) { if (ofisa_ignore_child(oba->oba_phandle, child)) @@ -142,7 +143,7 @@ ofisaattach(device_t parent, device_t se aa.ic = iba.iba_ic; config_found(self, &aa, ofisaprint, - CFARGS(.devhandle = devhandle_from_of(child))); + CFARGS(.devhandle = devhandle_from_of(selfh, child))); } } Index: src/sys/dev/ofw/ofbus.c diff -u src/sys/dev/ofw/ofbus.c:1.30 src/sys/dev/ofw/ofbus.c:1.31 --- src/sys/dev/ofw/ofbus.c:1.30 Sat Aug 7 16:19:14 2021 +++ src/sys/dev/ofw/ofbus.c Sat Jan 22 11:49:18 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ofbus.c,v 1.30 2021/08/07 16:19:14 thorpej Exp $ */ +/* $NetBSD: ofbus.c,v 1.31 2022/01/22 11:49:18 thorpej Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ofbus.c,v 1.30 2021/08/07 16:19:14 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofbus.c,v 1.31 2022/01/22 11:49:18 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -159,6 +159,8 @@ ofbus_attach(device_t parent, device_t d units = 2; } + devhandle_t selfh = device_handle(dev); + /* attach displays first */ for (child = OF_child(oba->oba_phandle); child != 0; child = OF_peer(child)) { @@ -181,7 +183,8 @@ ofbus_attach(device_t parent, device_t d sizeof(oba2.oba_ofname)); } config_found(dev, &oba2, ofbus_print, - CFARGS(.devhandle = devhandle_from_of(child))); + CFARGS(.devhandle = devhandle_from_of(selfh, + child))); } } @@ -211,7 +214,8 @@ ofbus_attach(device_t parent, device_t d sizeof(oba2.oba_ofname)); } config_found(dev, &oba2, ofbus_print, - CFARGS(.devhandle = devhandle_from_of(child))); + CFARGS(.devhandle = devhandle_from_of(selfh, + child))); } } } Index: src/sys/dev/ofw/ofw_pci_subr.c diff -u src/sys/dev/ofw/ofw_pci_subr.c:1.2 src/sys/dev/ofw/ofw_pci_subr.c:1.3 --- src/sys/dev/ofw/ofw_pci_subr.c:1.2 Wed Sep 15 17:33:08 2021 +++ src/sys/dev/ofw/ofw_pci_subr.c Sat Jan 22 11:49:18 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_pci_subr.c,v 1.2 2021/09/15 17:33:08 thorpej Exp $ */ +/* $NetBSD: ofw_pci_subr.c,v 1.3 2022/01/22 11:49:18 thorpej Exp $ */ /*- * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ofw_pci_subr.c,v 1.2 2021/09/15 17:33:08 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofw_pci_subr.c,v 1.3 2022/01/22 11:49:18 thorpej Exp $"); #include <sys/types.h> #include <sys/device.h> @@ -77,7 +77,7 @@ ofw_pci_bus_get_child_devhandle(device_t } /* Found it! */ - args->devhandle = devhandle_from_of(phandle); + args->devhandle = devhandle_from_of(call_handle, phandle); return 0; } Index: src/sys/dev/ofw/ofw_subr.c diff -u src/sys/dev/ofw/ofw_subr.c:1.59 src/sys/dev/ofw/ofw_subr.c:1.60 --- src/sys/dev/ofw/ofw_subr.c:1.59 Wed Sep 15 17:33:08 2021 +++ src/sys/dev/ofw/ofw_subr.c Sat Jan 22 11:49:18 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_subr.c,v 1.59 2021/09/15 17:33:08 thorpej Exp $ */ +/* $NetBSD: ofw_subr.c,v 1.60 2022/01/22 11:49:18 thorpej Exp $ */ /* * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -60,7 +60,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ofw_subr.c,v 1.59 2021/09/15 17:33:08 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofw_subr.c,v 1.60 2022/01/22 11:49:18 thorpej Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -99,12 +99,18 @@ static const struct devhandle_impl of_de }; devhandle_t -devhandle_from_of(int phandle) +devhandle_from_of(devhandle_t super_handle, int phandle) { - devhandle_t handle = { - .impl = &of_devhandle_impl, - .integer = phandle, - }; + devhandle_type_t super_type = devhandle_type(super_handle); + devhandle_t handle = { 0 }; + + if (super_type == DEVHANDLE_TYPE_OF) { + handle.impl = super_handle.impl; + } else { + KASSERT(super_type == DEVHANDLE_TYPE_INVALID); + handle.impl = &of_devhandle_impl; + } + handle.integer = phandle; return handle; } @@ -125,7 +131,7 @@ of_device_enumerate_children(device_t de int child; for (child = OF_child(phandle); child != 0; child = OF_peer(child)) { - if (!args->callback(dev, devhandle_from_of(child), + if (!args->callback(dev, devhandle_from_of(call_handle, child), args->callback_arg)) { break; } Index: src/sys/dev/ofw/openfirm.h diff -u src/sys/dev/ofw/openfirm.h:1.47 src/sys/dev/ofw/openfirm.h:1.48 --- src/sys/dev/ofw/openfirm.h:1.47 Sat Apr 24 23:36:57 2021 +++ src/sys/dev/ofw/openfirm.h Sat Jan 22 11:49:18 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: openfirm.h,v 1.47 2021/04/24 23:36:57 thorpej Exp $ */ +/* $NetBSD: openfirm.h,v 1.48 2022/01/22 11:49:18 thorpej Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -107,7 +107,7 @@ int openfirmware(void *); #ifdef _KERNEL struct device_compatible_entry; -devhandle_t devhandle_from_of(int); +devhandle_t devhandle_from_of(devhandle_t, int); int devhandle_to_of(devhandle_t); #define OF_DEVICE_CALL_REGISTER(_n_, _c_) \ Index: src/sys/dev/sbus/dma_sbus.c diff -u src/sys/dev/sbus/dma_sbus.c:1.38 src/sys/dev/sbus/dma_sbus.c:1.39 --- src/sys/dev/sbus/dma_sbus.c:1.38 Sat Aug 7 16:19:15 2021 +++ src/sys/dev/sbus/dma_sbus.c Sat Jan 22 11:49:18 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: dma_sbus.c,v 1.38 2021/08/07 16:19:15 thorpej Exp $ */ +/* $NetBSD: dma_sbus.c,v 1.39 2022/01/22 11:49:18 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -59,7 +59,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dma_sbus.c,v 1.38 2021/08/07 16:19:15 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dma_sbus.c,v 1.39 2022/01/22 11:49:18 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -207,11 +207,12 @@ dmaattach_sbus(device_t parent, device_t lsi64854_attach(sc); /* Attach children */ + devhandle_t selfh = device_handle(self); for (node = firstchild(sa->sa_node); node; node = nextsibling(node)) { struct sbus_attach_args sax; sbus_setup_attach_args(sbsc, sbt, sc->sc_dmatag, node, &sax); (void)config_found(self, (void *)&sax, dmaprint_sbus, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); sbus_destroy_attach_args(&sax); } } Index: src/sys/dev/sbus/lebuffer.c diff -u src/sys/dev/sbus/lebuffer.c:1.39 src/sys/dev/sbus/lebuffer.c:1.40 --- src/sys/dev/sbus/lebuffer.c:1.39 Sat Aug 7 16:19:15 2021 +++ src/sys/dev/sbus/lebuffer.c Sat Jan 22 11:49:18 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: lebuffer.c,v 1.39 2021/08/07 16:19:15 thorpej Exp $ */ +/* $NetBSD: lebuffer.c,v 1.40 2022/01/22 11:49:18 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lebuffer.c,v 1.39 2021/08/07 16:19:15 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lebuffer.c,v 1.40 2022/01/22 11:49:18 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -120,12 +120,13 @@ lebufattach(device_t parent, device_t se printf(": %dK memory\n", sc->sc_bufsiz / 1024); /* search through children */ + devhandle_t selfh = device_handle(self); for (node = firstchild(node); node; node = nextsibling(node)) { struct sbus_attach_args sax; sbus_setup_attach_args(sbsc, bt, dt, node, &sax); (void)config_found(self, (void *)&sax, lebufprint, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); sbus_destroy_attach_args(&sax); } } Index: src/sys/dev/sbus/qec.c diff -u src/sys/dev/sbus/qec.c:1.53 src/sys/dev/sbus/qec.c:1.54 --- src/sys/dev/sbus/qec.c:1.53 Sat Aug 7 16:19:15 2021 +++ src/sys/dev/sbus/qec.c Sat Jan 22 11:49:18 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: qec.c,v 1.53 2021/08/07 16:19:15 thorpej Exp $ */ +/* $NetBSD: qec.c,v 1.54 2022/01/22 11:49:18 thorpej Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: qec.c,v 1.53 2021/08/07 16:19:15 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: qec.c,v 1.54 2022/01/22 11:49:18 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -203,12 +203,13 @@ qecattach(device_t parent, device_t self qec_init(sc); /* search through children */ + devhandle_t selfh = device_handle(self); for (node = firstchild(node); node; node = nextsibling(node)) { struct sbus_attach_args sax; sbus_setup_attach_args(sbsc, sbt, sc->sc_dmatag, node, &sax); (void)config_found(self, (void *)&sax, qecprint, - CFARGS(.devhandle = prom_node_to_devhandle(node))); + CFARGS(.devhandle = prom_node_to_devhandle(selfh, node))); sbus_destroy_attach_args(&sax); } }