usb_debug.c revision 187173
1184610Salfred/* $FreeBSD: head/sys/dev/usb2/core/usb2_debug.c 187173 2009-01-13 19:03:12Z thompsa $ */ 2184610Salfred/*- 3184610Salfred * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 4184610Salfred * 5184610Salfred * Redistribution and use in source and binary forms, with or without 6184610Salfred * modification, are permitted provided that the following conditions 7184610Salfred * are met: 8184610Salfred * 1. Redistributions of source code must retain the above copyright 9184610Salfred * notice, this list of conditions and the following disclaimer. 10184610Salfred * 2. Redistributions in binary form must reproduce the above copyright 11184610Salfred * notice, this list of conditions and the following disclaimer in the 12184610Salfred * documentation and/or other materials provided with the distribution. 13184610Salfred * 14184610Salfred * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15184610Salfred * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16184610Salfred * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17184610Salfred * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18184610Salfred * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19184610Salfred * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20184610Salfred * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21184610Salfred * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22184610Salfred * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23184610Salfred * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24184610Salfred * SUCH DAMAGE. 25184610Salfred */ 26184610Salfred 27184610Salfred#include <dev/usb2/include/usb2_standard.h> 28184610Salfred#include <dev/usb2/include/usb2_defs.h> 29184610Salfred 30184610Salfred#include <dev/usb2/core/usb2_core.h> 31184610Salfred#include <dev/usb2/core/usb2_debug.h> 32184610Salfred#include <dev/usb2/core/usb2_process.h> 33184610Salfred#include <dev/usb2/core/usb2_device.h> 34187173Sthompsa#include <dev/usb2/core/usb2_busdma.h> 35187173Sthompsa#include <dev/usb2/core/usb2_transfer.h> 36184610Salfred 37184610Salfred/* 38184610Salfred * Define this unconditionally in case a kernel module is loaded that 39184610Salfred * has been compiled with debugging options. 40184610Salfred */ 41184610Salfredint usb2_debug = 0; 42184610Salfred 43184610SalfredSYSCTL_NODE(_hw, OID_AUTO, usb2, CTLFLAG_RW, 0, "USB debugging"); 44184610SalfredSYSCTL_INT(_hw_usb2, OID_AUTO, debug, CTLFLAG_RW, 45184610Salfred &usb2_debug, 0, "Debug level"); 46184610Salfred 47184610Salfred/*------------------------------------------------------------------------* 48184610Salfred * usb2_dump_iface 49184610Salfred * 50184610Salfred * This function dumps information about an USB interface. 51184610Salfred *------------------------------------------------------------------------*/ 52184610Salfredvoid 53184610Salfredusb2_dump_iface(struct usb2_interface *iface) 54184610Salfred{ 55184610Salfred printf("usb2_dump_iface: iface=%p\n", iface); 56184610Salfred if (iface == NULL) { 57184610Salfred return; 58184610Salfred } 59184610Salfred printf(" iface=%p idesc=%p altindex=%d\n", 60184610Salfred iface, iface->idesc, iface->alt_index); 61184610Salfred} 62184610Salfred 63184610Salfred/*------------------------------------------------------------------------* 64184610Salfred * usb2_dump_device 65184610Salfred * 66184610Salfred * This function dumps information about an USB device. 67184610Salfred *------------------------------------------------------------------------*/ 68184610Salfredvoid 69184610Salfredusb2_dump_device(struct usb2_device *udev) 70184610Salfred{ 71184610Salfred printf("usb2_dump_device: dev=%p\n", udev); 72184610Salfred if (udev == NULL) { 73184610Salfred return; 74184610Salfred } 75184610Salfred printf(" bus=%p \n" 76184610Salfred " address=%d config=%d depth=%d speed=%d self_powered=%d\n" 77184610Salfred " power=%d langid=%d\n", 78184610Salfred udev->bus, 79184610Salfred udev->address, udev->curr_config_no, udev->depth, udev->speed, 80184610Salfred udev->flags.self_powered, udev->power, udev->langid); 81184610Salfred} 82184610Salfred 83184610Salfred/*------------------------------------------------------------------------* 84184610Salfred * usb2_dump_queue 85184610Salfred * 86184610Salfred * This function dumps the USB transfer that are queued up on an USB pipe. 87184610Salfred *------------------------------------------------------------------------*/ 88184610Salfredvoid 89184610Salfredusb2_dump_queue(struct usb2_pipe *pipe) 90184610Salfred{ 91184610Salfred struct usb2_xfer *xfer; 92184610Salfred 93184610Salfred printf("usb2_dump_queue: pipe=%p xfer: ", pipe); 94184610Salfred TAILQ_FOREACH(xfer, &pipe->pipe_q.head, wait_entry) { 95184610Salfred printf(" %p", xfer); 96184610Salfred } 97184610Salfred printf("\n"); 98184610Salfred} 99184610Salfred 100184610Salfred/*------------------------------------------------------------------------* 101184610Salfred * usb2_dump_pipe 102184610Salfred * 103184610Salfred * This function dumps information about an USB pipe. 104184610Salfred *------------------------------------------------------------------------*/ 105184610Salfredvoid 106184610Salfredusb2_dump_pipe(struct usb2_pipe *pipe) 107184610Salfred{ 108184610Salfred if (pipe) { 109184610Salfred printf("usb2_dump_pipe: pipe=%p", pipe); 110184610Salfred 111184610Salfred printf(" edesc=%p isoc_next=%d toggle_next=%d", 112184610Salfred pipe->edesc, pipe->isoc_next, pipe->toggle_next); 113184610Salfred 114184610Salfred if (pipe->edesc) { 115184610Salfred printf(" bEndpointAddress=0x%02x", 116184610Salfred pipe->edesc->bEndpointAddress); 117184610Salfred } 118184610Salfred printf("\n"); 119184610Salfred usb2_dump_queue(pipe); 120184610Salfred } else { 121184610Salfred printf("usb2_dump_pipe: pipe=NULL\n"); 122184610Salfred } 123184610Salfred} 124184610Salfred 125184610Salfred/*------------------------------------------------------------------------* 126184610Salfred * usb2_dump_xfer 127184610Salfred * 128184610Salfred * This function dumps information about an USB transfer. 129184610Salfred *------------------------------------------------------------------------*/ 130184610Salfredvoid 131184610Salfredusb2_dump_xfer(struct usb2_xfer *xfer) 132184610Salfred{ 133187173Sthompsa struct usb2_device *udev; 134184610Salfred printf("usb2_dump_xfer: xfer=%p\n", xfer); 135184610Salfred if (xfer == NULL) { 136184610Salfred return; 137184610Salfred } 138184610Salfred if (xfer->pipe == NULL) { 139184610Salfred printf("xfer %p: pipe=NULL\n", 140184610Salfred xfer); 141184610Salfred return; 142184610Salfred } 143187173Sthompsa udev = xfer->xroot->udev; 144184610Salfred printf("xfer %p: udev=%p vid=0x%04x pid=0x%04x addr=%d " 145184610Salfred "pipe=%p ep=0x%02x attr=0x%02x\n", 146187173Sthompsa xfer, udev, 147187173Sthompsa UGETW(udev->ddesc.idVendor), 148187173Sthompsa UGETW(udev->ddesc.idProduct), 149187173Sthompsa udev->address, xfer->pipe, 150184610Salfred xfer->pipe->edesc->bEndpointAddress, 151184610Salfred xfer->pipe->edesc->bmAttributes); 152184610Salfred} 153