Module Name: src Committed By: mlelstv Date: Wed Feb 17 06:30:57 UTC 2021
Modified Files: src/sys/dev/usb: usb_subr.c Log Message: Expose more descriptor items as device properties. To generate a diff of this commit: cvs rdiff -u -r1.248 -r1.249 src/sys/dev/usb/usb_subr.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/usb_subr.c diff -u src/sys/dev/usb/usb_subr.c:1.248 src/sys/dev/usb/usb_subr.c:1.249 --- src/sys/dev/usb/usb_subr.c:1.248 Thu Jun 11 02:39:30 2020 +++ src/sys/dev/usb/usb_subr.c Wed Feb 17 06:30:57 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: usb_subr.c,v 1.248 2020/06/11 02:39:30 thorpej Exp $ */ +/* $NetBSD: usb_subr.c,v 1.249 2021/02/17 06:30:57 mlelstv Exp $ */ /* $FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $ */ /* @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.248 2020/06/11 02:39:30 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.249 2021/02/17 06:30:57 mlelstv Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -862,10 +862,36 @@ usbd_attach_roothub(device_t parent, str } static void -usbd_serialnumber(device_t dv, struct usbd_device *dev) +usbd_properties(device_t dv, struct usbd_device *dev) { + usb_device_descriptor_t *dd = &dev->ud_ddesc; + prop_dictionary_t dict = device_properties(dv); + int class, subclass, release, proto, vendor, product; + + class = dd->bDeviceClass; + subclass = dd->bDeviceSubClass; + release = UGETW(dd->bcdDevice); + proto = dd->bDeviceProtocol; + vendor = UGETW(dd->idVendor); + product = UGETW(dd->idProduct); + + prop_dictionary_set_uint16(dict, "class", class); + prop_dictionary_set_uint16(dict, "subclass", subclass); + prop_dictionary_set_uint16(dict, "release", release); + prop_dictionary_set_uint16(dict, "proto", proto); + prop_dictionary_set_uint16(dict, "vendor", vendor); + prop_dictionary_set_uint16(dict, "product", product); + + if (dev->ud_vendor) { + prop_dictionary_set_string(dict, + "vendor-string", dev->ud_vendor); + } + if (dev->ud_product) { + prop_dictionary_set_string(dict, + "product-string", dev->ud_product); + } if (dev->ud_serial) { - prop_dictionary_set_string(device_properties(dv), + prop_dictionary_set_string(dict, "serialnumber", dev->ud_serial); } } @@ -907,7 +933,7 @@ usbd_attachwholedevice(device_t parent, dev->ud_subdevs[0] = dv; dev->ud_subdevlen = 1; dev->ud_nifaces_claimed = 1; /* XXX */ - usbd_serialnumber(dv, dev); + usbd_properties(dv, dev); } config_pending_decr(parent); return USBD_NORMAL_COMPLETION; @@ -983,7 +1009,7 @@ usbd_attachinterfaces(device_t parent, s if (!dv) continue; - usbd_serialnumber(dv, dev); + usbd_properties(dv, dev); /* claim */ ifaces[i] = NULL;