Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-7-nhusb]: src/usr.sbin/usbdevs Sync with HEAD



details:   https://anonhg.NetBSD.org/src/rev/0f9fac27c55a
branches:  netbsd-7-nhusb
changeset: 801024:0f9fac27c55a
user:      skrll <skrll%NetBSD.org@localhost>
date:      Wed Sep 07 08:16:11 2016 +0000

description:
Sync with HEAD

diffstat:

 usr.sbin/usbdevs/usbdevs.8 |    4 +-
 usr.sbin/usbdevs/usbdevs.c |  133 ++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 129 insertions(+), 8 deletions(-)

diffs (218 lines):

diff -r 9d4187fde744 -r 0f9fac27c55a usr.sbin/usbdevs/usbdevs.8
--- a/usr.sbin/usbdevs/usbdevs.8        Wed Sep 07 07:03:37 2016 +0000
+++ b/usr.sbin/usbdevs/usbdevs.8        Wed Sep 07 08:16:11 2016 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: usbdevs.8,v 1.9 2011/08/15 14:31:24 wiz Exp $
+.\" $NetBSD: usbdevs.8,v 1.9.24.1 2016/09/07 08:16:11 skrll Exp $
 .\"
 .\" Copyright (c) 1999 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -53,7 +53,7 @@
 .It Fl f Ar dev
 Only print information for the given USB controller.
 .It Fl v
-Be verbose.
+Be verbose, more information is given if used twice.
 .El
 .Sh FILES
 .Bl -tag -width Pa
diff -r 9d4187fde744 -r 0f9fac27c55a usr.sbin/usbdevs/usbdevs.c
--- a/usr.sbin/usbdevs/usbdevs.c        Wed Sep 07 07:03:37 2016 +0000
+++ b/usr.sbin/usbdevs/usbdevs.c        Wed Sep 07 08:16:11 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: usbdevs.c,v 1.30 2013/09/14 14:07:56 jakllsch Exp $    */
+/*     $NetBSD: usbdevs.c,v 1.30.8.1 2016/09/07 08:16:11 skrll Exp $   */
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -29,6 +29,11 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: usbdevs.c,v 1.30.8.1 2016/09/07 08:16:11 skrll Exp $");
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -47,7 +52,13 @@
 static int verbose = 0;
 static int showdevs = 0;
 
+struct stringtable {
+       int row, col;
+       const char *string;
+};
+
 __dead static void usage(void);
+static void getstrings(const struct stringtable *, int, int, const char **, const char **);
 static void usbdev(int f, int a, int rec);
 static void usbdump(int f);
 static void dumpone(char *name, int f, int addr);
@@ -92,11 +103,109 @@
        strcpy(termstr, "(invalid)");
 }
 
+struct stringtable class_strings[] = {
+       { UICLASS_UNSPEC,      -1, "Unspecified" },
+
+       { UICLASS_AUDIO,       -1, "Audio" },
+       { UICLASS_AUDIO,       UISUBCLASS_AUDIOCONTROL, "Audio Control" },
+       { UICLASS_AUDIO,       UISUBCLASS_AUDIOSTREAM, "Audio Streaming" },
+       { UICLASS_AUDIO,       UISUBCLASS_MIDISTREAM, "MIDI Streaming" },
+
+       { UICLASS_CDC,         -1, "Communications and CDC Control" },
+       { UICLASS_CDC,         UISUBCLASS_DIRECT_LINE_CONTROL_MODEL, "Direct Line" },
+       { UICLASS_CDC,         UISUBCLASS_ABSTRACT_CONTROL_MODEL, "Abstract" },
+       { UICLASS_CDC,         UISUBCLASS_TELEPHONE_CONTROL_MODEL, "Telephone" },
+       { UICLASS_CDC,         UISUBCLASS_MULTICHANNEL_CONTROL_MODEL, "Multichannel" },
+       { UICLASS_CDC,         UISUBCLASS_CAPI_CONTROLMODEL, "CAPI" },
+       { UICLASS_CDC,         UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL, "Ethernet Networking" },
+       { UICLASS_CDC,         UISUBCLASS_ATM_NETWORKING_CONTROL_MODEL, "ATM Networking" },
+
+       { UICLASS_HID,         -1, "Human Interface Device" },
+       { UICLASS_HID,         UISUBCLASS_BOOT, "Boot" },
+
+       { UICLASS_PHYSICAL,    -1, "Physical" },
+
+       { UICLASS_IMAGE,       -1, "Image" },
+
+       { UICLASS_PRINTER,     -1, "Printer" },
+       { UICLASS_PRINTER,     UISUBCLASS_PRINTER, "Printer" },
+
+       { UICLASS_MASS,        -1, "Mass Storage" },
+       { UICLASS_MASS,        UISUBCLASS_RBC, "RBC" },
+       { UICLASS_MASS,        UISUBCLASS_SFF8020I, "SFF8020I" },
+       { UICLASS_MASS,        UISUBCLASS_QIC157, "QIC157" },
+       { UICLASS_MASS,        UISUBCLASS_UFI, "UFI" },
+       { UICLASS_MASS,        UISUBCLASS_SFF8070I, "SFF8070I" },
+       { UICLASS_MASS,        UISUBCLASS_SCSI, "SCSI" },
+       { UICLASS_MASS,        UISUBCLASS_SCSI, "SCSI" },
+
+       { UICLASS_HUB,         -1, "Hub" },
+       { UICLASS_HUB,         UISUBCLASS_HUB, "Hub" },
+
+       { UICLASS_CDC_DATA,    -1, "CDC-Data" },
+       { UICLASS_CDC_DATA,    UISUBCLASS_DATA, "Data" },
+
+       { UICLASS_SMARTCARD,   -1, "Smart Card" },
+
+       { UICLASS_SECURITY,    -1, "Content Security" },
+
+       { UICLASS_VIDEO,       -1, "Video" },
+       { UICLASS_VIDEO,       UISUBCLASS_VIDEOCONTROL, "Video Control" },
+       { UICLASS_VIDEO,       UISUBCLASS_VIDEOSTREAMING, "Video Streaming" },
+       { UICLASS_VIDEO,       UISUBCLASS_VIDEOCOLLECTION, "Video Collection" },
+
+#ifdef notyet
+       { UICLASS_HEALTHCARE,  -1, "Personal Healthcare" },
+       { UICLASS_AVDEVICE,    -1, "Audio/Video Device" },
+       { UICLASS_BILLBOARD,   -1, "Billboard" },
+#endif
+
+       { UICLASS_DIAGNOSTIC,  -1, "Diagnostic" },
+       { UICLASS_WIRELESS,    -1, "Wireless" },
+       { UICLASS_WIRELESS,    UISUBCLASS_RF, "Radio Frequency" },
+
+#ifdef notyet
+       { UICLASS_MISC,        -1, "Miscellaneous" },
+#endif
+
+       { UICLASS_APPL_SPEC,   -1, "Application Specific" },
+       { UICLASS_APPL_SPEC,   UISUBCLASS_FIRMWARE_DOWNLOAD, "Firmware Download" },
+       { UICLASS_APPL_SPEC,   UISUBCLASS_IRDA,              "Irda" },
+
+       { UICLASS_VENDOR,      -1, "Vendor Specific" },
+
+       { -1, -1, NULL }
+};
+
+static void
+getstrings(const struct stringtable *table,
+           int row, int col, const char **rp, const char **cp) {
+       static char rbuf[5], cbuf[5];
+
+       snprintf(rbuf, sizeof(rbuf), "0x%02x", row);
+       snprintf(cbuf, sizeof(cbuf), "0x%02x", col);
+
+       *rp = rbuf;
+       *cp = cbuf;
+
+       while (table->string != NULL) {
+               if (table->row == row) {
+                       if (table->col == -1)
+                               *rp = table->string;
+                       else if (table->col == col)
+                               *cp = table->string;
+               } else if (table->row > row)
+                       break;
+
+               ++table;
+       }
+}
+
 static void
 usbdev(int f, int a, int rec)
 {
        struct usb_device_info di;
-       int e, p, i;
+       int e, i;
 
        di.udi_addr = a;
        e = ioctl(f, USB_DEVICEINFO, &di);
@@ -112,6 +221,7 @@
                case USB_SPEED_LOW:  printf("low speed, "); break;
                case USB_SPEED_FULL: printf("full speed, "); break;
                case USB_SPEED_HIGH: printf("high speed, "); break;
+               case USB_SPEED_SUPER: printf("super speed, "); break;
                default: break;
                }
                if (di.udi_power)
@@ -127,14 +237,22 @@
        u2t(di.udi_vendor, vendor);
        u2t(di.udi_serial, serial);
        if (verbose) {
-               printf("%s(0x%04x), %s(0x%04x), rev %s",
+               printf("%s(0x%04x), %s(0x%04x), rev %s(0x%04x)",
                       product, di.udi_productNo,
-                      vendor, di.udi_vendorNo, di.udi_release);
+                      vendor, di.udi_vendorNo,
+                       di.udi_release, di.udi_releaseNo);
                if (di.udi_serial[0])
                        printf(", serial %s", serial);
        } else
                printf("%s, %s", product, vendor);
        printf("\n");
+       if (verbose > 1 && di.udi_class != UICLASS_UNSPEC) {
+               const char *cstr, *sstr;
+               getstrings(class_strings, di.udi_class, di.udi_subclass, &cstr, &sstr);
+               printf("%*s  %s(0x%02x), %s(0x%02x), proto %u\n", indent, "",
+                       cstr, di.udi_class, sstr, di.udi_subclass,
+                       di.udi_protocol);
+       }
        if (showdevs) {
                for (i = 0; i < USB_MAX_DEVNAMES; i++)
                        if (di.udi_devnames[i][0])
@@ -143,7 +261,10 @@
        }
        if (!rec)
                return;
-       for (p = 0; p < di.udi_nports; p++) {
+
+       unsigned int nports = di.udi_nports;
+
+       for (unsigned int p = 0; p < nports && p < __arraycount(di.udi_ports); p++) {
                int s = di.udi_ports[p];
                if (s >= USB_MAX_DEVICES) {
                        if (verbose) {
@@ -214,7 +335,7 @@
                        dev = optarg;
                        break;
                case 'v':
-                       verbose = 1;
+                       verbose++;
                        break;
                case '?':
                default:



Home | Main Index | Thread Index | Old Index