Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/dev/acpi/acpi.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/dev/acpi/acpi.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.285.2.1 retrieving revision 1.285.2.2 diff -u -p -r1.285.2.1 -r1.285.2.2 --- src/sys/dev/acpi/acpi.c 2020/12/14 14:38:05 1.285.2.1 +++ src/sys/dev/acpi/acpi.c 2021/04/03 22:28:43 1.285.2.2 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi.c,v 1.285.2.1 2020/12/14 14:38:05 thorpej Exp $ */ +/* $NetBSD: acpi.c,v 1.285.2.2 2021/04/03 22:28:43 thorpej Exp $ */ /*- * Copyright (c) 2003, 2007 The NetBSD Foundation, Inc. @@ -100,7 +100,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.285.2.1 2020/12/14 14:38:05 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.285.2.2 2021/04/03 22:28:43 thorpej Exp $"); #include "pci.h" #include "opt_acpi.h" @@ -1125,6 +1125,50 @@ acpi_print(void *aux, const char *pnp) } /* + * acpi_device_register -- + * Called by the platform device_register() routine when + * attaching devices. + */ +void +acpi_device_register(device_t dev, void *v) +{ + /* All we do here is set the devhandle in the device_t. */ + device_t parent = device_parent(dev); + ACPI_HANDLE hdl = NULL; + + /* + * aa_node is only valid if we attached to the "acpinodebus" + * interface attribute. + */ + if (device_attached_to_iattr(dev, "acpinodebus")) { + const struct acpi_attach_args *aa = v; + hdl = aa->aa_node->ad_handle; + } else if (device_is_a(parent, "pci")) { + const struct pci_attach_args *pa = v; + struct acpi_devnode *ad; + u_int segment; + +#ifdef __HAVE_PCI_GET_SEGMENT + segment = pci_get_segment(pa->pa_pc); +#else + segment = 0; +#endif /* __HAVE_PCI_GET_SEGMENT */ + + ad = acpi_pcidev_find(segment, + pa->pa_bus, pa->pa_device, pa->pa_function); + if (ad == NULL || (hdl = ad->ad_handle) == NULL) { + aprint_debug_dev(dev, "no matching ACPI node\n"); + return; + } + } else { + return; + } + KASSERT(hdl != NULL); + + device_set_handle(dev, devhandle_from_acpi(hdl)); +} + +/* * Notify. */ static void