Module Name:    src
Committed By:   thorpej
Date:           Fri Mar 29 19:30:09 UTC 2024

Modified Files:
        src/sys/dev/usb: ugen.c

Log Message:
ugen and ugenif share the same /dev/ugenN.xx namespace in such a way
that the device unit number does not necessarily match the /dev/ugenN.xx
unit number (N).  If you ONLY have ugen devices, it happens to work out
and devpubd scripts can be extremely naive.  If you ONLY have ugenif
devices, it also happens to work out, but your devpubd scripts have to
slightly more informed.  If you have a mix of ugen AND ugenif devices,
though, you're pretty much out of luck.

So, this change adds a "ugen-unit" device property which devpubd scripts
can query to determine which /dev/ugenN.xx nodes a given ugen or ugenif
device is using.


To generate a diff of this commit:
cvs rdiff -u -r1.176 -r1.177 src/sys/dev/usb/ugen.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/dev/usb/ugen.c
diff -u src/sys/dev/usb/ugen.c:1.176 src/sys/dev/usb/ugen.c:1.177
--- src/sys/dev/usb/ugen.c:1.176	Tue Mar 26 03:24:14 2024
+++ src/sys/dev/usb/ugen.c	Fri Mar 29 19:30:09 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ugen.c,v 1.176 2024/03/26 03:24:14 thorpej Exp $	*/
+/*	$NetBSD: ugen.c,v 1.177 2024/03/29 19:30:09 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.176 2024/03/26 03:24:14 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.177 2024/03/29 19:30:09 thorpej Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -238,12 +238,18 @@ ugenif_get_unit(struct ugen_softc *sc)
 	KASSERT(sc0 == sc);
 	KASSERT(rb_tree_find_node(&ugenif.tree, &i) == sc);
 	mutex_exit(&ugenif.lock);
+
+	prop_dictionary_set_uint(device_properties(sc->sc_dev),
+	    "ugen-unit", sc->sc_unit);
 }
 
 static void
 ugenif_put_unit(struct ugen_softc *sc)
 {
 
+	prop_dictionary_remove(device_properties(sc->sc_dev),
+	    "ugen-unit");
+
 	mutex_enter(&ugenif.lock);
 	KASSERT(rb_tree_find_node(&ugenif.tree, &sc->sc_unit) == sc);
 	rb_tree_remove_node(&ugenif.tree, sc);

Reply via email to