summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/usb_subr.c
diff options
context:
space:
mode:
authorn_hibma <n_hibma@FreeBSD.org>1999-04-19 20:25:18 +0000
committern_hibma <n_hibma@FreeBSD.org>1999-04-19 20:25:18 +0000
commitd87a4625d23a7d6d44f08604ad70eb25f4e26f3c (patch)
treea5410495094c487bf9a11a17b7f82cea64fd772e /sys/dev/usb/usb_subr.c
parenta38d5f8be38a3b14f3c6aec71107cb7928e6f29b (diff)
downloadFreeBSD-src-d87a4625d23a7d6d44f08604ad70eb25f4e26f3c.zip
FreeBSD-src-d87a4625d23a7d6d44f08604ad70eb25f4e26f3c.tar.gz
1) Add Rockfire vendor and gamepad product (MAEKAWA Masahide)
2) Sort the list again (Roger Hardiman) 3) Reinstate a piece of code to look for a name for a device if none is found in the device itself.
Diffstat (limited to 'sys/dev/usb/usb_subr.c')
-rw-r--r--sys/dev/usb/usb_subr.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c
index f8e9af9..838d778 100644
--- a/sys/dev/usb/usb_subr.c
+++ b/sys/dev/usb/usb_subr.c
@@ -73,6 +73,23 @@ extern int usbdebug;
#define DPRINTFN(n,x)
#endif
+typedef u_int16_t usb_vendor_id_t;
+typedef u_int16_t usb_product_id_t;
+
+/*
+ * Descriptions of of known vendors and devices ("products").
+ */
+struct usb_knowndev {
+ usb_vendor_id_t vendor;
+ usb_product_id_t product;
+ int flags;
+ char *vendorname, *productname;
+};
+#define USB_KNOWNDEV_NOPROD 0x01 /* match on vendor only */
+
+#include <dev/usb/usbdevs_data.h>
+
+
static usbd_status usbd_set_config __P((usbd_device_handle, int));
char *usbd_get_string __P((usbd_device_handle, int, char *));
int usbd_getnewaddr __P((usbd_bus_handle bus));
@@ -160,11 +177,31 @@ usbd_devinfo_vp(dev, v, p)
char *v, *p;
{
usb_device_descriptor_t *udd = &dev->ddesc;
- char *vendor = 0, *product = 0;
+ char *vendor, *product;
+ struct usb_knowndev *kdp;
vendor = usbd_get_string(dev, udd->iManufacturer, v);
product = usbd_get_string(dev, udd->iProduct, p);
+ if (!vendor) {
+ for(kdp = usb_knowndevs;
+ kdp->vendorname != NULL;
+ kdp++) {
+ if (kdp->vendor == UGETW(udd->idVendor) &&
+ (kdp->product == UGETW(udd->idProduct) ||
+ (kdp->flags & USB_KNOWNDEV_NOPROD) != 0))
+ break;
+ }
+ if (kdp->vendorname == NULL) {
+ vendor = product = NULL;
+ } else {
+ vendor = kdp->vendorname;
+ product = (kdp->flags & USB_KNOWNDEV_NOPROD) == 0 ?
+ kdp->productname : NULL;
+ }
+ }
+
+
if (vendor)
strcpy(v, vendor);
else
OpenPOWER on IntegriCloud