patch-2.2.18 linux/drivers/usb/usb-debug.c
Next file: linux/drivers/usb/usb-ohci.c
Previous file: linux/drivers/usb/usb-core.c
Back to the patch index
Back to the overall index
- Lines: 235
- Date:
Fri Sep 1 13:51:30 2000
- Orig file:
v2.2.17/drivers/usb/usb-debug.c
- Orig date:
Fri Apr 21 12:46:37 2000
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.17/drivers/usb/usb-debug.c linux/drivers/usb/usb-debug.c
@@ -4,31 +4,49 @@
* I just want these out of the way where they aren't in your
* face, but so that you can still use them..
*/
+#include <linux/config.h>
+#include <linux/version.h>
#include <linux/kernel.h>
-
-#include "usb.h"
+#include <linux/mm.h>
+#include <linux/malloc.h>
+#ifdef CONFIG_USB_DEBUG
+ #define DEBUG
+#else
+ #undef DEBUG
+#endif
+#include <linux/usb.h>
static void usb_show_endpoint(struct usb_endpoint_descriptor *endpoint)
{
usb_show_endpoint_descriptor(endpoint);
}
-static void usb_show_interface(struct usb_interface_descriptor *interface)
+static void usb_show_interface(struct usb_interface_descriptor *altsetting)
{
int i;
- usb_show_interface_descriptor(interface);
- for (i = 0 ; i < interface->bNumEndpoints; i++)
- usb_show_endpoint(interface->endpoint + i);
+ usb_show_interface_descriptor(altsetting);
+
+ for (i = 0; i < altsetting->bNumEndpoints; i++)
+ usb_show_endpoint(altsetting->endpoint + i);
}
static void usb_show_config(struct usb_config_descriptor *config)
{
- int i;
+ int i, j;
+ struct usb_interface *ifp;
usb_show_config_descriptor(config);
- for (i = 0 ; i < config->bNumInterfaces; i++)
- usb_show_interface(config->interface + i);
+ for (i = 0; i < config->bNumInterfaces; i++) {
+ ifp = config->interface + i;
+
+ if (!ifp)
+ break;
+
+ printk("\n Interface: %d\n", i);
+ for (j = 0; j < ifp->num_altsetting; j++)
+ usb_show_interface(ifp->altsetting + j);
+ }
}
void usb_show_device(struct usb_device *dev)
@@ -40,26 +58,54 @@
usb_show_config(dev->config + i);
}
-
/*
* Parse and show the different USB descriptors.
*/
void usb_show_device_descriptor(struct usb_device_descriptor *desc)
{
- printk(" USB version %x.%02x\n", desc->bcdUSB >> 8, desc->bcdUSB & 0xff);
- printk(" Vendor: %04x\n", desc->idVendor);
- printk(" Product: %04x\n", desc->idProduct);
- printk(" Configurations: %d\n", desc->bNumConfigurations);
+ if (!desc)
+ {
+ printk("Invalid USB device descriptor (NULL POINTER)\n");
+ return;
+ }
+ printk(" Length = %2d%s\n", desc->bLength,
+ desc->bLength == USB_DT_DEVICE_SIZE ? "" : " (!!!)");
+ printk(" DescriptorType = %02x\n", desc->bDescriptorType);
+
+ printk(" USB version = %x.%02x\n",
+ desc->bcdUSB >> 8, desc->bcdUSB & 0xff);
+ printk(" Vendor:Product = %04x:%04x\n",
+ desc->idVendor, desc->idProduct);
+ printk(" MaxPacketSize0 = %d\n", desc->bMaxPacketSize0);
+ printk(" NumConfigurations = %d\n", desc->bNumConfigurations);
+ printk(" Device version = %x.%02x\n",
+ desc->bcdDevice >> 8, desc->bcdDevice & 0xff);
- printk(" Device Class: %d\n", desc->bDeviceClass);
+ printk(" Device Class:SubClass:Protocol = %02x:%02x:%02x\n",
+ desc->bDeviceClass, desc->bDeviceSubClass, desc->bDeviceProtocol);
switch (desc->bDeviceClass) {
case 0:
printk(" Per-interface classes\n");
break;
- case 9:
+ case USB_CLASS_AUDIO:
+ printk(" Audio device class\n");
+ break;
+ case USB_CLASS_COMM:
+ printk(" Communications class\n");
+ break;
+ case USB_CLASS_HID:
+ printk(" Human Interface Devices class\n");
+ break;
+ case USB_CLASS_PRINTER:
+ printk(" Printer device class\n");
+ break;
+ case USB_CLASS_MASS_STORAGE:
+ printk(" Mass Storage device class\n");
+ break;
+ case USB_CLASS_HUB:
printk(" Hub device class\n");
break;
- case 0xff:
+ case USB_CLASS_VENDOR_SPEC:
printk(" Vendor class\n");
break;
default:
@@ -67,11 +113,11 @@
}
}
-void usb_show_config_descriptor(struct usb_config_descriptor * desc)
+void usb_show_config_descriptor(struct usb_config_descriptor *desc)
{
printk("Configuration:\n");
printk(" bLength = %4d%s\n", desc->bLength,
- desc->bLength == 9 ? "" : " (!!!)");
+ desc->bLength == USB_DT_CONFIG_SIZE ? "" : " (!!!)");
printk(" bDescriptorType = %02x\n", desc->bDescriptorType);
printk(" wTotalLength = %04x\n", desc->wTotalLength);
printk(" bNumInterfaces = %02x\n", desc->bNumInterfaces);
@@ -81,47 +127,77 @@
printk(" MaxPower = %4dmA\n", desc->MaxPower * 2);
}
-void usb_show_interface_descriptor(struct usb_interface_descriptor * desc)
+void usb_show_interface_descriptor(struct usb_interface_descriptor *desc)
{
- printk(" Interface:\n");
+ printk(" Alternate Setting: %2d\n", desc->bAlternateSetting);
printk(" bLength = %4d%s\n", desc->bLength,
- desc->bLength == 9 ? "" : " (!!!)");
+ desc->bLength == USB_DT_INTERFACE_SIZE ? "" : " (!!!)");
printk(" bDescriptorType = %02x\n", desc->bDescriptorType);
printk(" bInterfaceNumber = %02x\n", desc->bInterfaceNumber);
printk(" bAlternateSetting = %02x\n", desc->bAlternateSetting);
printk(" bNumEndpoints = %02x\n", desc->bNumEndpoints);
- printk(" bInterfaceClass = %02x\n", desc->bInterfaceClass);
- printk(" bInterfaceSubClass = %02x\n", desc->bInterfaceSubClass);
- printk(" bInterfaceProtocol = %02x\n", desc->bInterfaceProtocol);
+ printk(" bInterface Class:SubClass:Protocol = %02x:%02x:%02x\n",
+ desc->bInterfaceClass, desc->bInterfaceSubClass, desc->bInterfaceProtocol);
printk(" iInterface = %02x\n", desc->iInterface);
}
-void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor * desc)
+void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor *desc)
{
+ char *LengthCommentString = (desc->bLength ==
+ USB_DT_ENDPOINT_AUDIO_SIZE) ? " (Audio)" : (desc->bLength ==
+ USB_DT_ENDPOINT_SIZE) ? "" : " (!!!)";
char *EndpointType[4] = { "Control", "Isochronous", "Bulk", "Interrupt" };
+
printk(" Endpoint:\n");
- printk(" bLength = %4d%s\n", desc->bLength,
- desc->bLength == 7 ? "" : " (!!!)");
+ printk(" bLength = %4d%s\n",
+ desc->bLength, LengthCommentString);
printk(" bDescriptorType = %02x\n", desc->bDescriptorType);
printk(" bEndpointAddress = %02x (%s)\n", desc->bEndpointAddress,
- (desc->bEndpointAddress & 0x80) ? "in" : "out");
+ (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+ USB_ENDPOINT_XFER_CONTROL ? "i/o" :
+ (desc->bEndpointAddress & USB_ENDPOINT_DIR_MASK) ? "in" : "out");
printk(" bmAttributes = %02x (%s)\n", desc->bmAttributes,
- EndpointType[3 & desc->bmAttributes]);
+ EndpointType[USB_ENDPOINT_XFERTYPE_MASK & desc->bmAttributes]);
printk(" wMaxPacketSize = %04x\n", desc->wMaxPacketSize);
printk(" bInterval = %02x\n", desc->bInterval);
+
+ /* Audio extensions to the endpoint descriptor */
+ if (desc->bLength == USB_DT_ENDPOINT_AUDIO_SIZE) {
+ printk(" bRefresh = %02x\n", desc->bRefresh);
+ printk(" bSynchAddress = %02x\n", desc->bSynchAddress);
+ }
}
-void usb_show_hub_descriptor(struct usb_hub_descriptor * desc)
+void usb_show_string(struct usb_device *dev, char *id, int index)
{
- int len = 7;
- unsigned char *ptr = (unsigned char *) desc;
+ char *buf;
- printk("Interface:");
- while (len) {
- printk(" %02x", *ptr);
- ptr++; len--;
- }
- printk("\n");
+ if (!index)
+ return;
+ if (!(buf = kmalloc(256, GFP_KERNEL)))
+ return;
+ if (usb_string(dev, index, buf, 256) > 0)
+ printk(KERN_INFO "%s: %s\n", id, buf);
+ kfree(buf);
+}
+
+void usb_dump_urb (purb_t purb)
+{
+ printk ("urb :%p\n", purb);
+ printk ("next :%p\n", purb->next);
+ printk ("dev :%p\n", purb->dev);
+ printk ("pipe :%08X\n", purb->pipe);
+ printk ("status :%d\n", purb->status);
+ printk ("transfer_flags :%08X\n", purb->transfer_flags);
+ printk ("transfer_buffer :%p\n", purb->transfer_buffer);
+ printk ("transfer_buffer_length:%d\n", purb->transfer_buffer_length);
+ printk ("actual_length :%d\n", purb->actual_length);
+ printk ("setup_packet :%p\n", purb->setup_packet);
+ printk ("start_frame :%d\n", purb->start_frame);
+ printk ("number_of_packets :%d\n", purb->number_of_packets);
+ printk ("interval :%d\n", purb->interval);
+ printk ("error_count :%d\n", purb->error_count);
+ printk ("context :%p\n", purb->context);
+ printk ("complete :%p\n", purb->complete);
}
-
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)