Expose more descriptor items as device properties.

This commit is contained in:
mlelstv 2021-02-17 06:30:57 +00:00
parent 2fd66b9c21
commit 3772d427da
1 changed files with 32 additions and 6 deletions

View File

@ -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, struct usbd_device *dev)
}
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, struct usbd_device *dev, int port,
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, struct usbd_device *dev,
if (!dv)
continue;
usbd_serialnumber(dv, dev);
usbd_properties(dv, dev);
/* claim */
ifaces[i] = NULL;