Module Name: src Committed By: thorpej Date: Wed Sep 15 17:33:08 UTC 2021
Modified Files: src/sys/arch/sparc/sparc: promlib.c src/sys/dev/acpi: acpi_pci.c acpi_util.c src/sys/dev/ofw: ofw_pci_subr.c ofw_subr.c src/sys/dev/pci: Makefile pci.c pcivar.h src/sys/kern: subr_device.c src/sys/sys: Makefile device.h Added Files: src/sys/dev/pci: pci_calls.h src/sys/sys: device_calls.h Log Message: Adjust the device_call() calling convention so as to provide type checking of the arguments passed to the call, using auto-generated argument structures and binding macros. To generate a diff of this commit: cvs rdiff -u -r1.48 -r1.49 src/sys/arch/sparc/sparc/promlib.c cvs rdiff -u -r1.31 -r1.32 src/sys/dev/acpi/acpi_pci.c cvs rdiff -u -r1.25 -r1.26 src/sys/dev/acpi/acpi_util.c cvs rdiff -u -r1.1 -r1.2 src/sys/dev/ofw/ofw_pci_subr.c cvs rdiff -u -r1.58 -r1.59 src/sys/dev/ofw/ofw_subr.c cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/Makefile cvs rdiff -u -r1.161 -r1.162 src/sys/dev/pci/pci.c cvs rdiff -u -r0 -r1.1 src/sys/dev/pci/pci_calls.h cvs rdiff -u -r1.115 -r1.116 src/sys/dev/pci/pcivar.h cvs rdiff -u -r1.8 -r1.9 src/sys/kern/subr_device.c cvs rdiff -u -r1.176 -r1.177 src/sys/sys/Makefile cvs rdiff -u -r1.174 -r1.175 src/sys/sys/device.h cvs rdiff -u -r0 -r1.1 src/sys/sys/device_calls.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sparc/sparc/promlib.c diff -u src/sys/arch/sparc/sparc/promlib.c:1.48 src/sys/arch/sparc/sparc/promlib.c:1.49 --- src/sys/arch/sparc/sparc/promlib.c:1.48 Mon May 10 13:59:30 2021 +++ src/sys/arch/sparc/sparc/promlib.c Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: promlib.c,v 1.48 2021/05/10 13:59:30 thorpej Exp $ */ +/* $NetBSD: promlib.c,v 1.49 2021/09/15 17:33:08 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.48 2021/05/10 13:59:30 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: promlib.c,v 1.49 2021/09/15 17:33:08 thorpej Exp $"); #if defined(_KERNEL_OPT) #include "opt_sparc_arch.h" @@ -45,6 +45,8 @@ __KERNEL_RCSID(0, "$NetBSD: promlib.c,v #include <sys/kernel.h> #include <sys/device.h> +#include <sys/device_calls.h> + #ifdef _STANDALONE #include <lib/libsa/stand.h> #define malloc(s,t,f) alloc(s) @@ -276,7 +278,7 @@ obp_device_enumerate_children(device_t d return 0; } -OBP_DEVICE_CALL_REGISTER("device-enumerate-children", +OBP_DEVICE_CALL_REGISTER(DEVICE_ENUMERATE_CHILDREN_STR, obp_device_enumerate_children) #endif /* ! _STANDALONE */ Index: src/sys/dev/acpi/acpi_pci.c diff -u src/sys/dev/acpi/acpi_pci.c:1.31 src/sys/dev/acpi/acpi_pci.c:1.32 --- src/sys/dev/acpi/acpi_pci.c:1.31 Wed May 12 23:22:33 2021 +++ src/sys/dev/acpi/acpi_pci.c Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_pci.c,v 1.31 2021/05/12 23:22:33 thorpej Exp $ */ +/* $NetBSD: acpi_pci.c,v 1.32 2021/09/15 17:33:08 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.31 2021/05/12 23:22:33 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_pci.c,v 1.32 2021/09/15 17:33:08 thorpej Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -41,6 +41,8 @@ __KERNEL_RCSID(0, "$NetBSD: acpi_pci.c,v #include <dev/pci/pcidevs.h> #include <dev/pci/ppbreg.h> +#include <dev/pci/pci_calls.h> + #include <dev/acpi/acpireg.h> #include <dev/acpi/acpivar.h> #include <dev/acpi/acpi_pci.h> @@ -576,5 +578,5 @@ acpi_pci_bus_get_child_devhandle(device_ return ENODEV; } -ACPI_DEVICE_CALL_REGISTER("pci-bus-get-child-devhandle", +ACPI_DEVICE_CALL_REGISTER(PCI_BUS_GET_CHILD_DEVHANDLE_STR, acpi_pci_bus_get_child_devhandle) Index: src/sys/dev/acpi/acpi_util.c diff -u src/sys/dev/acpi/acpi_util.c:1.25 src/sys/dev/acpi/acpi_util.c:1.26 --- src/sys/dev/acpi/acpi_util.c:1.25 Mon Aug 9 20:49:09 2021 +++ src/sys/dev/acpi/acpi_util.c Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_util.c,v 1.25 2021/08/09 20:49:09 andvar Exp $ */ +/* $NetBSD: acpi_util.c,v 1.26 2021/09/15 17:33:08 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.25 2021/08/09 20:49:09 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_util.c,v 1.26 2021/09/15 17:33:08 thorpej Exp $"); #include <sys/param.h> #include <sys/kmem.h> @@ -75,6 +75,8 @@ __KERNEL_RCSID(0, "$NetBSD: acpi_util.c, #include <dev/acpi/acpivar.h> #include <dev/acpi/acpi_intr.h> +#include <sys/device_calls.h> + #include <machine/acpi_machdep.h> #define _COMPONENT ACPI_BUS_COMPONENT @@ -153,7 +155,7 @@ acpi_device_enumerate_children(device_t return 0; } -ACPI_DEVICE_CALL_REGISTER("device-enumerate-children", +ACPI_DEVICE_CALL_REGISTER(DEVICE_ENUMERATE_CHILDREN_STR, acpi_device_enumerate_children) /* Index: src/sys/dev/ofw/ofw_pci_subr.c diff -u src/sys/dev/ofw/ofw_pci_subr.c:1.1 src/sys/dev/ofw/ofw_pci_subr.c:1.2 --- src/sys/dev/ofw/ofw_pci_subr.c:1.1 Wed May 12 23:22:33 2021 +++ src/sys/dev/ofw/ofw_pci_subr.c Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_pci_subr.c,v 1.1 2021/05/12 23:22:33 thorpej Exp $ */ +/* $NetBSD: ofw_pci_subr.c,v 1.2 2021/09/15 17:33:08 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.1 2021/05/12 23:22:33 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofw_pci_subr.c,v 1.2 2021/09/15 17:33:08 thorpej Exp $"); #include <sys/types.h> #include <sys/device.h> @@ -38,6 +38,7 @@ __KERNEL_RCSID(0, "$NetBSD: ofw_pci_subr #include <sys/errno.h> #include <dev/pci/pcivar.h> +#include <dev/pci/pci_calls.h> #include <dev/ofw/openfirm.h> #include <dev/ofw/ofw_pci.h> @@ -82,5 +83,5 @@ ofw_pci_bus_get_child_devhandle(device_t return ENODEV; } -OF_DEVICE_CALL_REGISTER("pci-bus-get-child-devhandle", +OF_DEVICE_CALL_REGISTER(PCI_BUS_GET_CHILD_DEVHANDLE_STR, ofw_pci_bus_get_child_devhandle) Index: src/sys/dev/ofw/ofw_subr.c diff -u src/sys/dev/ofw/ofw_subr.c:1.58 src/sys/dev/ofw/ofw_subr.c:1.59 --- src/sys/dev/ofw/ofw_subr.c:1.58 Sat Apr 24 23:36:57 2021 +++ src/sys/dev/ofw/ofw_subr.c Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_subr.c,v 1.58 2021/04/24 23:36:57 thorpej Exp $ */ +/* $NetBSD: ofw_subr.c,v 1.59 2021/09/15 17:33:08 thorpej Exp $ */ /* * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -60,12 +60,15 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ofw_subr.c,v 1.58 2021/04/24 23:36:57 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofw_subr.c,v 1.59 2021/09/15 17:33:08 thorpej Exp $"); #include <sys/param.h> #include <sys/device.h> #include <sys/kmem.h> #include <sys/systm.h> + +#include <sys/device_calls.h> + #include <dev/ofw/openfirm.h> #define OFW_MAX_STACK_BUF_SIZE 256 @@ -130,7 +133,7 @@ of_device_enumerate_children(device_t de return 0; } -OF_DEVICE_CALL_REGISTER("device-enumerate-children", +OF_DEVICE_CALL_REGISTER(DEVICE_ENUMERATE_CHILDREN_STR, of_device_enumerate_children) /* Index: src/sys/dev/pci/Makefile diff -u src/sys/dev/pci/Makefile:1.15 src/sys/dev/pci/Makefile:1.16 --- src/sys/dev/pci/Makefile:1.15 Wed Dec 12 07:04:05 2018 +++ src/sys/dev/pci/Makefile Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.15 2018/12/12 07:04:05 maxv Exp $ +# $NetBSD: Makefile,v 1.16 2021/09/15 17:33:08 thorpej Exp $ # use 'make -f Makefile.pcidevs' to make pcidevs.h and pcidevs_data.h @@ -9,4 +9,10 @@ INCS= amrreg.h amrio.h mlyio.h mlyreg.h pcidevs.h pcidevs_data.h pciio.h pcireg.h \ tgareg.h twereg.h tweio.h +pci_calls.h: ${.CURDIR}/pci_calls + echo "${TOOL_AWK} -f ${.CURDIR}/../../kern/gendevcalls.awk \ + ${.CURDIR}/pci_calls > ${.CURDIR}/pci_calls.h" + ${TOOL_AWK} -f ${.CURDIR}/../../kern/gendevcalls.awk \ + ${.CURDIR}/pci_calls > ${.CURDIR}/pci_calls.h + .include <bsd.kinc.mk> Index: src/sys/dev/pci/pci.c diff -u src/sys/dev/pci/pci.c:1.161 src/sys/dev/pci/pci.c:1.162 --- src/sys/dev/pci/pci.c:1.161 Sat Aug 7 16:19:14 2021 +++ src/sys/dev/pci/pci.c Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pci.c,v 1.161 2021/08/07 16:19:14 thorpej Exp $ */ +/* $NetBSD: pci.c,v 1.162 2021/09/15 17:33:08 thorpej Exp $ */ /* * Copyright (c) 1995, 1996, 1997, 1998 @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pci.c,v 1.161 2021/08/07 16:19:14 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci.c,v 1.162 2021/09/15 17:33:08 thorpej Exp $"); #ifdef _KERNEL_OPT #include "opt_pci.h" @@ -53,6 +53,8 @@ __KERNEL_RCSID(0, "$NetBSD: pci.c,v 1.16 #include <dev/pci/pcidevs.h> #include <dev/pci/ppbvar.h> +#include <dev/pci/pci_calls.h> + #include <net/if.h> #include "locators.h" @@ -275,8 +277,7 @@ pci_bus_get_child_devhandle(struct pci_s .tag = tag, }; - if (device_call(sc->sc_dev, "pci-bus-get-child-devhandle", - &args) != 0) { + if (device_call(sc->sc_dev, PCI_BUS_GET_CHILD_DEVHANDLE(&args)) != 0) { /* * The call is either not supported or the requested * device was not found in the platform device tree. Index: src/sys/dev/pci/pcivar.h diff -u src/sys/dev/pci/pcivar.h:1.115 src/sys/dev/pci/pcivar.h:1.116 --- src/sys/dev/pci/pcivar.h:1.115 Wed May 12 23:22:33 2021 +++ src/sys/dev/pci/pcivar.h Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pcivar.h,v 1.115 2021/05/12 23:22:33 thorpej Exp $ */ +/* $NetBSD: pcivar.h,v 1.116 2021/09/15 17:33:08 thorpej Exp $ */ /* * Copyright (c) 1996, 1997 Christopher G. Demetriou. All rights reserved. @@ -277,31 +277,6 @@ struct pci_softc { #define PCI_SC_DEVICESC(d, f) sc_devices[(d) * 8 + (f)] }; -/* - * pci-bus-get-child-devhandle device call - * - * Called to get the device handle for a device, represented - * by the pcitag_t with the PCI segment represented by the - * pci_chipset_tag_t. The PCI bus's device_t is the one - * passed to device_call(), and the device whose handle is - * being requested must be a direct child of that bus, - * otherwise the behavior is undefined. - * - * Call returns 0 if successful, or an error code upon failure: - * - * ENOTSUP The device handle implementation for the - * PCI bus does not support this device call. - * - * ENODEV The PCI device represented by the pcitag_t - * was not found in a bus-scoped search of the - * platform device tree. - */ -struct pci_bus_get_child_devhandle_args { - pci_chipset_tag_t pc; /* IN */ - pcitag_t tag; /* IN */ - devhandle_t devhandle; /* OUT */ -}; - extern struct cfdriver pci_cd; extern bool pci_mapreg_map_enable_decode; Index: src/sys/kern/subr_device.c diff -u src/sys/kern/subr_device.c:1.8 src/sys/kern/subr_device.c:1.9 --- src/sys/kern/subr_device.c:1.8 Sat Aug 7 18:16:42 2021 +++ src/sys/kern/subr_device.c Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_device.c,v 1.8 2021/08/07 18:16:42 thorpej Exp $ */ +/* $NetBSD: subr_device.c,v 1.9 2021/09/15 17:33:08 thorpej Exp $ */ /* * Copyright (c) 2006, 2021 The NetBSD Foundation, Inc. @@ -27,12 +27,14 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_device.c,v 1.8 2021/08/07 18:16:42 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_device.c,v 1.9 2021/09/15 17:33:08 thorpej Exp $"); #include <sys/param.h> #include <sys/device.h> #include <sys/systm.h> +#include <sys/device_calls.h> + /* Root device. */ device_t root_device; @@ -285,17 +287,17 @@ device_handle(device_t dev) } int -device_call(device_t dev, const char *name, void *arg) +device_call_generic(device_t dev, const struct device_call_generic *gen) { devhandle_t handle = device_handle(dev); device_call_t call; devhandle_t call_handle; - call = devhandle_lookup_device_call(handle, name, &call_handle); + call = devhandle_lookup_device_call(handle, gen->name, &call_handle); if (call == NULL) { return ENOTSUP; } - return call(dev, call_handle, arg); + return call(dev, call_handle, gen->args); } int @@ -308,5 +310,5 @@ device_enumerate_children(device_t dev, .callback_arg = callback_arg, }; - return device_call(dev, "device-enumerate-children", &args); + return device_call(dev, DEVICE_ENUMERATE_CHILDREN(&args)); } Index: src/sys/sys/Makefile diff -u src/sys/sys/Makefile:1.176 src/sys/sys/Makefile:1.177 --- src/sys/sys/Makefile:1.176 Fri Aug 14 00:53:16 2020 +++ src/sys/sys/Makefile Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.176 2020/08/14 00:53:16 riastradh Exp $ +# $NetBSD: Makefile,v 1.177 2021/09/15 17:33:08 thorpej Exp $ .include <bsd.own.mk> @@ -70,4 +70,10 @@ INCSYMLINKS+= ../soundcard.h ${INCSDIR}/ namei: namei.src gennameih.awk ${TOOL_AWK} -f gennameih.awk < namei.src +device_calls.h: ${.CURDIR}/../kern/device_calls + echo "${TOOL_AWK} -f ${.CURDIR}/../kern/gendevcalls.awk \ + ${.CURDIR}/../kern/device_calls > ${.CURDIR}/device_calls.h" + ${TOOL_AWK} -f ${.CURDIR}/../kern/gendevcalls.awk \ + ${.CURDIR}/../kern/device_calls > ${.CURDIR}/device_calls.h + .include <bsd.kinc.mk> Index: src/sys/sys/device.h diff -u src/sys/sys/device.h:1.174 src/sys/sys/device.h:1.175 --- src/sys/sys/device.h:1.174 Sun Aug 15 22:08:01 2021 +++ src/sys/sys/device.h Wed Sep 15 17:33:08 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: device.h,v 1.174 2021/08/15 22:08:01 thorpej Exp $ */ +/* $NetBSD: device.h,v 1.175 2021/09/15 17:33:08 thorpej Exp $ */ /* * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -791,21 +791,20 @@ device_t shutdown_next(struct shutdown_s * the device autoconfiguration subsystem. It is the responsibility * of each device tree back end to implement these calls. * - * device-enumerate-children - * - * Enumerates the direct children of a device, invoking the - * callback for each one. The callback is passed the devhandle_t - * corresponding to the child device, as well as a user-supplied - * argument. If the callback returns true, then enumeration - * continues. If the callback returns false, enumeration is stopped. + * We define a generic interface; individual device calls feature + * type checking of the argument structure. The argument structures + * and the call binding data are automatically generated from device + * call interface descriptions by gendevcalls.awk. */ - -struct device_enumerate_children_args { - bool (*callback)(device_t, devhandle_t, void *); - void * callback_arg; +struct device_call_generic { + const char *name; + void *args; }; -int device_call(device_t, const char *, void *); +int device_call_generic(device_t, const struct device_call_generic *); + +#define device_call(dev, call) \ + device_call_generic((dev), &(call)->generic) #endif /* _KERNEL */ Added files: Index: src/sys/dev/pci/pci_calls.h diff -u /dev/null src/sys/dev/pci/pci_calls.h:1.1 --- /dev/null Wed Sep 15 17:33:09 2021 +++ src/sys/dev/pci/pci_calls.h Wed Sep 15 17:33:08 2021 @@ -0,0 +1,90 @@ +/* $NetBSD: pci_calls.h,v 1.1 2021/09/15 17:33:08 thorpej Exp $ */ + +/* + * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. + * + * generated from: + * NetBSD: pci_calls,v 1.1 2021/09/15 17:26:07 thorpej Exp + */ + +/*- + * Copyright (c) 2021 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Device calls used by the PCI subsystem. + */ + +#ifndef _PCI_CALLS_H_ +#define _PCI_CALLS_H_ + +#include <sys/device.h> + +#include <dev/pci/pcivar.h> + +/* + * pci-bus-get-child-devhandle + * + * Retrieve the devhandle for the PCI device represented by 'tag' + * in the PCI segment represented by 'pc'. The PCI bus's device_t + * is the one that's passed in the call, and the device whose handle + * is being requested must be a direct child of that bus, otherwise + * behavior is undefined. + * + * Call returns 0 if successful, or an error code upon failure: + * + * ENOTSUP The device handle implementation for the + * PCI bus does not support this device call. + * + * ENODEV The PCI device represented by the pcitag_t + * was not found in a bus-scoped search of the + * platform device tree. + */ +struct pci_bus_get_child_devhandle_args { + pci_chipset_tag_t pc; /* IN */ + pcitag_t tag; /* IN */ + devhandle_t devhandle; /* OUT */ +}; + +union pci_bus_get_child_devhandle_binding { + struct device_call_generic generic; + struct { + const char *name; + struct pci_bus_get_child_devhandle_args *args; + } binding; +}; + +#define PCI_BUS_GET_CHILD_DEVHANDLE_STR "pci-bus-get-child-devhandle" + +#define PCI_BUS_GET_CHILD_DEVHANDLE(_args_) \ + &((const union pci_bus_get_child_devhandle_binding){ \ + .binding.name = "pci-bus-get-child-devhandle", \ + .binding.args = (_args_), \ + }) + +#endif /* _PCI_CALLS_H_ */ Index: src/sys/sys/device_calls.h diff -u /dev/null src/sys/sys/device_calls.h:1.1 --- /dev/null Wed Sep 15 17:33:09 2021 +++ src/sys/sys/device_calls.h Wed Sep 15 17:33:08 2021 @@ -0,0 +1,78 @@ +/* $NetBSD: device_calls.h,v 1.1 2021/09/15 17:33:08 thorpej Exp $ */ + +/* + * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. + * + * generated from: + * NetBSD: device_calls,v 1.1 2021/09/15 17:26:06 thorpej Exp + */ + +/*- + * Copyright (c) 2021 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Device calls used by the device autoconfiguration subsystem + */ + +#ifndef _DEVICE_CALLS_H_ +#define _DEVICE_CALLS_H_ + +#include <sys/device.h> + +/* + * device-enumerate-children + * + * Enumerates the direct children of a device, invoking the callback for + * each one. The callback is passed the devhandle_t corresponding to the + * child device, as well as a user-supplied argument. If the callback + * returns true, then enumeration continues. If the callback returns false, + * enumeration is stopped. + */ +struct device_enumerate_children_args { + bool (*callback)(device_t, devhandle_t, void *); + void * callback_arg; +}; + +union device_enumerate_children_binding { + struct device_call_generic generic; + struct { + const char *name; + struct device_enumerate_children_args *args; + } binding; +}; + +#define DEVICE_ENUMERATE_CHILDREN_STR "device-enumerate-children" + +#define DEVICE_ENUMERATE_CHILDREN(_args_) \ + &((const union device_enumerate_children_binding){ \ + .binding.name = "device-enumerate-children", \ + .binding.args = (_args_), \ + }) + +#endif /* _DEVICE_CALLS_H_ */