The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/usb/usb.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: usb.h,v 1.69 2002/09/22 23:20:50 augustss Exp $        */
    2 /*      $FreeBSD: releng/7.3/sys/dev/usb/usb.h 190251 2009-03-22 06:37:14Z n_hibma $    */
    3 
    4 /*-
    5  * Copyright (c) 1998 The NetBSD Foundation, Inc.
    6  * All rights reserved.
    7  *
    8  * This code is derived from software contributed to The NetBSD Foundation
    9  * by Lennart Augustsson (lennart@augustsson.net) at
   10  * Carlstedt Research & Technology.
   11  *
   12  * Redistribution and use in source and binary forms, with or without
   13  * modification, are permitted provided that the following conditions
   14  * are met:
   15  * 1. Redistributions of source code must retain the above copyright
   16  *    notice, this list of conditions and the following disclaimer.
   17  * 2. Redistributions in binary form must reproduce the above copyright
   18  *    notice, this list of conditions and the following disclaimer in the
   19  *    documentation and/or other materials provided with the distribution.
   20  * 3. All advertising materials mentioning features or use of this software
   21  *    must display the following acknowledgement:
   22  *        This product includes software developed by the NetBSD
   23  *        Foundation, Inc. and its contributors.
   24  * 4. Neither the name of The NetBSD Foundation nor the names of its
   25  *    contributors may be used to endorse or promote products derived
   26  *    from this software without specific prior written permission.
   27  *
   28  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   29  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   30  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   31  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   32  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   33  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   34  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   35  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   36  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   37  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   38  * POSSIBILITY OF SUCH DAMAGE.
   39  */
   40 
   41 
   42 #ifndef _USB_H_
   43 #define _USB_H_
   44 
   45 #include <sys/types.h>
   46 #include <sys/time.h>
   47 
   48 #if defined(_KERNEL)
   49 #include "opt_usb.h"
   50 
   51 #ifdef SYSCTL_DECL
   52 SYSCTL_DECL(_hw_usb);
   53 #endif
   54 
   55 #include <sys/malloc.h>
   56 
   57 MALLOC_DECLARE(M_USB);
   58 MALLOC_DECLARE(M_USBDEV);
   59 MALLOC_DECLARE(M_USBHC);
   60 #endif /* _KERNEL */
   61 
   62 #define PWR_RESUME 0
   63 #define PWR_SUSPEND 1
   64 #define PWR_STANDBY 2
   65 #define PWR_SOFTSUSPEND 3
   66 #define PWR_SOFTSTANDBY 4
   67 #define PWR_SOFTRESUME 5
   68 
   69 /* These two defines are used by usbd to autoload the usb kld */
   70 #define USB_KLD         "usb"           /* name of usb module */
   71 #define USB_UHUB        "usb/uhub"      /* root hub */
   72 
   73 #define USB_STACK_VERSION 2
   74 
   75 #define USB_MAX_DEVICES 128
   76 #define USB_START_ADDR 0
   77 
   78 #define USB_CONTROL_ENDPOINT 0
   79 #define USB_MAX_ENDPOINTS 16
   80 
   81 #define USB_FRAMES_PER_SECOND 1000
   82 
   83 /*
   84  * The USB records contain some unaligned little-endian word
   85  * components.  The U[SG]ETW macros take care of both the alignment
   86  * and endian problem and should always be used to access non-byte
   87  * values.
   88  */
   89 typedef u_int8_t uByte;
   90 typedef u_int8_t uWord[2];
   91 typedef u_int8_t uDWord[4];
   92 
   93 #define USETW2(w,h,l) ((w)[0] = (u_int8_t)(l), (w)[1] = (u_int8_t)(h))
   94 
   95 #if 1
   96 #define UGETW(w) ((w)[0] | ((w)[1] << 8))
   97 #define USETW(w,v) ((w)[0] = (u_int8_t)(v), (w)[1] = (u_int8_t)((v) >> 8))
   98 #define UGETDW(w) ((w)[0] | ((w)[1] << 8) | ((w)[2] << 16) | ((w)[3] << 24))
   99 #define USETDW(w,v) ((w)[0] = (u_int8_t)(v), \
  100                      (w)[1] = (u_int8_t)((v) >> 8), \
  101                      (w)[2] = (u_int8_t)((v) >> 16), \
  102                      (w)[3] = (u_int8_t)((v) >> 24))
  103 #else
  104 /*
  105  * On little-endian machines that can handle unanliged accesses
  106  * (e.g. i386) these macros can be replaced by the following.
  107  */
  108 #define UGETW(w) (*(u_int16_t *)(w))
  109 #define USETW(w,v) (*(u_int16_t *)(w) = (v))
  110 #define UGETDW(w) (*(u_int32_t *)(w))
  111 #define USETDW(w,v) (*(u_int32_t *)(w) = (v))
  112 #endif
  113 
  114 #define UPACKED __packed
  115 
  116 typedef struct {
  117         uByte           bmRequestType;
  118         uByte           bRequest;
  119         uWord           wValue;
  120         uWord           wIndex;
  121         uWord           wLength;
  122 } UPACKED usb_device_request_t;
  123 
  124 #define UT_WRITE                0x00
  125 #define UT_READ                 0x80
  126 #define UT_STANDARD             0x00
  127 #define UT_CLASS                0x20
  128 #define UT_VENDOR               0x40
  129 #define UT_DEVICE               0x00
  130 #define UT_INTERFACE            0x01
  131 #define UT_ENDPOINT             0x02
  132 #define UT_OTHER                0x03
  133 
  134 #define UT_READ_DEVICE          (UT_READ  | UT_STANDARD | UT_DEVICE)
  135 #define UT_READ_INTERFACE       (UT_READ  | UT_STANDARD | UT_INTERFACE)
  136 #define UT_READ_ENDPOINT        (UT_READ  | UT_STANDARD | UT_ENDPOINT)
  137 #define UT_WRITE_DEVICE         (UT_WRITE | UT_STANDARD | UT_DEVICE)
  138 #define UT_WRITE_INTERFACE      (UT_WRITE | UT_STANDARD | UT_INTERFACE)
  139 #define UT_WRITE_ENDPOINT       (UT_WRITE | UT_STANDARD | UT_ENDPOINT)
  140 #define UT_READ_CLASS_DEVICE    (UT_READ  | UT_CLASS | UT_DEVICE)
  141 #define UT_READ_CLASS_INTERFACE (UT_READ  | UT_CLASS | UT_INTERFACE)
  142 #define UT_READ_CLASS_OTHER     (UT_READ  | UT_CLASS | UT_OTHER)
  143 #define UT_READ_CLASS_ENDPOINT  (UT_READ  | UT_CLASS | UT_ENDPOINT)
  144 #define UT_WRITE_CLASS_DEVICE   (UT_WRITE | UT_CLASS | UT_DEVICE)
  145 #define UT_WRITE_CLASS_INTERFACE (UT_WRITE | UT_CLASS | UT_INTERFACE)
  146 #define UT_WRITE_CLASS_OTHER    (UT_WRITE | UT_CLASS | UT_OTHER)
  147 #define UT_WRITE_CLASS_ENDPOINT (UT_WRITE | UT_CLASS | UT_ENDPOINT)
  148 #define UT_READ_VENDOR_DEVICE   (UT_READ  | UT_VENDOR | UT_DEVICE)
  149 #define UT_READ_VENDOR_INTERFACE (UT_READ  | UT_VENDOR | UT_INTERFACE)
  150 #define UT_READ_VENDOR_OTHER    (UT_READ  | UT_VENDOR | UT_OTHER)
  151 #define UT_READ_VENDOR_ENDPOINT (UT_READ  | UT_VENDOR | UT_ENDPOINT)
  152 #define UT_WRITE_VENDOR_DEVICE  (UT_WRITE | UT_VENDOR | UT_DEVICE)
  153 #define UT_WRITE_VENDOR_INTERFACE (UT_WRITE | UT_VENDOR | UT_INTERFACE)
  154 #define UT_WRITE_VENDOR_OTHER   (UT_WRITE | UT_VENDOR | UT_OTHER)
  155 #define UT_WRITE_VENDOR_ENDPOINT (UT_WRITE | UT_VENDOR | UT_ENDPOINT)
  156 
  157 /* Requests */
  158 #define UR_GET_STATUS           0x00
  159 #define UR_CLEAR_FEATURE        0x01
  160 #define UR_SET_FEATURE          0x03
  161 #define UR_SET_ADDRESS          0x05
  162 #define UR_GET_DESCRIPTOR       0x06
  163 #define  UDESC_DEVICE           0x01
  164 #define  UDESC_CONFIG           0x02
  165 #define  UDESC_STRING           0x03
  166 #define  UDESC_INTERFACE        0x04
  167 #define  UDESC_ENDPOINT         0x05
  168 #define  UDESC_DEVICE_QUALIFIER 0x06
  169 #define  UDESC_OTHER_SPEED_CONFIGURATION 0x07
  170 #define  UDESC_INTERFACE_POWER  0x08
  171 #define  UDESC_OTG              0x09
  172 #define  UDESC_CS_DEVICE        0x21    /* class specific */
  173 #define  UDESC_CS_CONFIG        0x22
  174 #define  UDESC_CS_STRING        0x23
  175 #define  UDESC_CS_INTERFACE     0x24
  176 #define  UDESC_CS_ENDPOINT      0x25
  177 #define  UDESC_HUB              0x29
  178 #define UR_SET_DESCRIPTOR       0x07
  179 #define UR_GET_CONFIG           0x08
  180 #define UR_SET_CONFIG           0x09
  181 #define UR_GET_INTERFACE        0x0a
  182 #define UR_SET_INTERFACE        0x0b
  183 #define UR_SYNCH_FRAME          0x0c
  184 
  185 /* Feature numbers */
  186 #define UF_ENDPOINT_HALT        0
  187 #define UF_DEVICE_REMOTE_WAKEUP 1
  188 #define UF_TEST_MODE            2
  189 
  190 #define USB_MAX_IPACKET         8 /* maximum size of the initial packet */
  191 
  192 #define USB_2_MAX_CTRL_PACKET   64
  193 #define USB_2_MAX_BULK_PACKET   512
  194 
  195 typedef struct {
  196         uByte           bLength;
  197         uByte           bDescriptorType;
  198         uByte           bDescriptorSubtype;
  199 } UPACKED usb_descriptor_t;
  200 
  201 typedef struct {
  202         uByte           bLength;
  203         uByte           bDescriptorType;
  204         uWord           bcdUSB;
  205 #define UD_USB_2_0              0x0200
  206 #define UD_IS_USB2(d) (UGETW((d)->bcdUSB) >= UD_USB_2_0)
  207         uByte           bDeviceClass;
  208         uByte           bDeviceSubClass;
  209         uByte           bDeviceProtocol;
  210         uByte           bMaxPacketSize;
  211         /* The fields below are not part of the initial descriptor. */
  212         uWord           idVendor;
  213         uWord           idProduct;
  214         uWord           bcdDevice;
  215         uByte           iManufacturer;
  216         uByte           iProduct;
  217         uByte           iSerialNumber;
  218         uByte           bNumConfigurations;
  219 } UPACKED usb_device_descriptor_t;
  220 #define USB_DEVICE_DESCRIPTOR_SIZE 18
  221 
  222 typedef struct {
  223         uByte           bLength;
  224         uByte           bDescriptorType;
  225         uWord           wTotalLength;
  226         uByte           bNumInterface;
  227         uByte           bConfigurationValue;
  228         uByte           iConfiguration;
  229         uByte           bmAttributes;
  230 #define UC_BUS_POWERED          0x80
  231 #define UC_SELF_POWERED         0x40
  232 #define UC_REMOTE_WAKEUP        0x20
  233         uByte           bMaxPower; /* max current in 2 mA units */
  234 #define UC_POWER_FACTOR 2
  235 } UPACKED usb_config_descriptor_t;
  236 #define USB_CONFIG_DESCRIPTOR_SIZE 9
  237 
  238 typedef struct {
  239         uByte           bLength;
  240         uByte           bDescriptorType;
  241         uByte           bInterfaceNumber;
  242         uByte           bAlternateSetting;
  243         uByte           bNumEndpoints;
  244         uByte           bInterfaceClass;
  245         uByte           bInterfaceSubClass;
  246         uByte           bInterfaceProtocol;
  247         uByte           iInterface;
  248 } UPACKED usb_interface_descriptor_t;
  249 #define USB_INTERFACE_DESCRIPTOR_SIZE 9
  250 
  251 typedef struct {
  252         uByte           bLength;
  253         uByte           bDescriptorType;
  254         uByte           bEndpointAddress;
  255 #define UE_GET_DIR(a)   ((a) & 0x80)
  256 #define UE_SET_DIR(a,d) ((a) | (((d)&1) << 7))
  257 #define UE_DIR_IN       0x80
  258 #define UE_DIR_OUT      0x00
  259 #define UE_ADDR         0x0f
  260 #define UE_GET_ADDR(a)  ((a) & UE_ADDR)
  261         uByte           bmAttributes;
  262 #define UE_XFERTYPE     0x03
  263 #define  UE_CONTROL     0x00
  264 #define  UE_ISOCHRONOUS 0x01
  265 #define  UE_BULK        0x02
  266 #define  UE_INTERRUPT   0x03
  267 #define UE_GET_XFERTYPE(a)      ((a) & UE_XFERTYPE)
  268 #define UE_ISO_TYPE     0x0c
  269 #define  UE_ISO_ASYNC   0x04
  270 #define  UE_ISO_ADAPT   0x08
  271 #define  UE_ISO_SYNC    0x0c
  272 #define UE_GET_ISO_TYPE(a)      ((a) & UE_ISO_TYPE)
  273         uWord           wMaxPacketSize;
  274         uByte           bInterval;
  275 } UPACKED usb_endpoint_descriptor_t;
  276 #define USB_ENDPOINT_DESCRIPTOR_SIZE 7
  277 
  278 typedef struct {
  279         uByte           bLength;
  280         uByte           bDescriptorType;
  281         uWord           bString[127];
  282 } UPACKED usb_string_descriptor_t;
  283 #define USB_MAX_STRING_LEN 128
  284 #define USB_LANGUAGE_TABLE 0    /* # of the string language id table */
  285 
  286 /* Hub specific request */
  287 #define UR_GET_BUS_STATE        0x02
  288 #define UR_CLEAR_TT_BUFFER      0x08
  289 #define UR_RESET_TT             0x09
  290 #define UR_GET_TT_STATE         0x0a
  291 #define UR_STOP_TT              0x0b
  292 
  293 /* Hub features */
  294 #define UHF_C_HUB_LOCAL_POWER   0
  295 #define UHF_C_HUB_OVER_CURRENT  1
  296 #define UHF_PORT_CONNECTION     0
  297 #define UHF_PORT_ENABLE         1
  298 #define UHF_PORT_SUSPEND        2
  299 #define UHF_PORT_OVER_CURRENT   3
  300 #define UHF_PORT_RESET          4
  301 #define UHF_PORT_POWER          8
  302 #define UHF_PORT_LOW_SPEED      9
  303 #define UHF_C_PORT_CONNECTION   16
  304 #define UHF_C_PORT_ENABLE       17
  305 #define UHF_C_PORT_SUSPEND      18
  306 #define UHF_C_PORT_OVER_CURRENT 19
  307 #define UHF_C_PORT_RESET        20
  308 #define UHF_PORT_TEST           21
  309 #define UHF_PORT_INDICATOR      22
  310 
  311 typedef struct {
  312         uByte           bDescLength;
  313         uByte           bDescriptorType;
  314         uByte           bNbrPorts;
  315         uWord           wHubCharacteristics;
  316 #define UHD_PWR                 0x0003
  317 #define  UHD_PWR_GANGED         0x0000
  318 #define  UHD_PWR_INDIVIDUAL     0x0001
  319 #define  UHD_PWR_NO_SWITCH      0x0002
  320 #define UHD_COMPOUND            0x0004
  321 #define UHD_OC                  0x0018
  322 #define  UHD_OC_GLOBAL          0x0000
  323 #define  UHD_OC_INDIVIDUAL      0x0008
  324 #define  UHD_OC_NONE            0x0010
  325 #define UHD_TT_THINK            0x0060
  326 #define  UHD_TT_THINK_8         0x0000
  327 #define  UHD_TT_THINK_16        0x0020
  328 #define  UHD_TT_THINK_24        0x0040
  329 #define  UHD_TT_THINK_32        0x0060
  330 #define UHD_PORT_IND            0x0080
  331         uByte           bPwrOn2PwrGood; /* delay in 2 ms units */
  332 #define UHD_PWRON_FACTOR 2
  333         uByte           bHubContrCurrent;
  334         uByte           DeviceRemovable[32]; /* max 255 ports */
  335 #define UHD_NOT_REMOV(desc, i) \
  336     (((desc)->DeviceRemovable[(i)/8] >> ((i) % 8)) & 1)
  337         /* deprecated */ uByte          PortPowerCtrlMask[1];
  338 } UPACKED usb_hub_descriptor_t;
  339 #define USB_HUB_DESCRIPTOR_SIZE 9 /* includes deprecated PortPowerCtrlMask */
  340 
  341 typedef struct {
  342         uByte           bLength;
  343         uByte           bDescriptorType;
  344         uWord           bcdUSB;
  345         uByte           bDeviceClass;
  346         uByte           bDeviceSubClass;
  347         uByte           bDeviceProtocol;
  348         uByte           bMaxPacketSize0;
  349         uByte           bNumConfigurations;
  350         uByte           bReserved;
  351 } UPACKED usb_device_qualifier_t;
  352 #define USB_DEVICE_QUALIFIER_SIZE 10
  353 
  354 typedef struct {
  355         uByte           bLength;
  356         uByte           bDescriptorType;
  357         uByte           bmAttributes;
  358 #define UOTG_SRP        0x01
  359 #define UOTG_HNP        0x02
  360 } UPACKED usb_otg_descriptor_t;
  361 
  362 /* OTG feature selectors */
  363 #define UOTG_B_HNP_ENABLE       3
  364 #define UOTG_A_HNP_SUPPORT      4
  365 #define UOTG_A_ALT_HNP_SUPPORT  5
  366 
  367 typedef struct {
  368         uWord           wStatus;
  369 /* Device status flags */
  370 #define UDS_SELF_POWERED                0x0001
  371 #define UDS_REMOTE_WAKEUP               0x0002
  372 /* Endpoint status flags */
  373 #define UES_HALT                        0x0001
  374 } UPACKED usb_status_t;
  375 
  376 typedef struct {
  377         uWord           wHubStatus;
  378 #define UHS_LOCAL_POWER                 0x0001
  379 #define UHS_OVER_CURRENT                0x0002
  380         uWord           wHubChange;
  381 } UPACKED usb_hub_status_t;
  382 
  383 typedef struct {
  384         uWord           wPortStatus;
  385 #define UPS_CURRENT_CONNECT_STATUS      0x0001
  386 #define UPS_PORT_ENABLED                0x0002
  387 #define UPS_SUSPEND                     0x0004
  388 #define UPS_OVERCURRENT_INDICATOR       0x0008
  389 #define UPS_RESET                       0x0010
  390 #define UPS_PORT_POWER                  0x0100
  391 #define UPS_LOW_SPEED                   0x0200
  392 #define UPS_HIGH_SPEED                  0x0400
  393 #define UPS_PORT_TEST                   0x0800
  394 #define UPS_PORT_INDICATOR              0x1000
  395         uWord           wPortChange;
  396 #define UPS_C_CONNECT_STATUS            0x0001
  397 #define UPS_C_PORT_ENABLED              0x0002
  398 #define UPS_C_SUSPEND                   0x0004
  399 #define UPS_C_OVERCURRENT_INDICATOR     0x0008
  400 #define UPS_C_PORT_RESET                0x0010
  401 } UPACKED usb_port_status_t;
  402 
  403 /* Device class codes */
  404 #define UDCLASS_IN_INTERFACE    0x00
  405 #define UDCLASS_COMM            0x02
  406 #define UDCLASS_HUB             0x09
  407 #define  UDSUBCLASS_HUB         0x00
  408 #define  UDPROTO_FSHUB          0x00
  409 #define  UDPROTO_HSHUBSTT       0x01
  410 #define  UDPROTO_HSHUBMTT       0x02
  411 #define UDCLASS_DIAGNOSTIC      0xdc
  412 #define UDCLASS_WIRELESS        0xe0
  413 #define  UDSUBCLASS_RF          0x01
  414 #define   UDPROTO_BLUETOOTH     0x01
  415 #define UDCLASS_VENDOR          0xff
  416 
  417 /* Interface class codes */
  418 #define UICLASS_UNSPEC          0x00
  419 
  420 #define UICLASS_AUDIO           0x01
  421 #define  UISUBCLASS_AUDIOCONTROL        1
  422 #define  UISUBCLASS_AUDIOSTREAM         2
  423 #define  UISUBCLASS_MIDISTREAM          3
  424 
  425 #define UICLASS_CDC             0x02 /* communication */
  426 #define  UISUBCLASS_DIRECT_LINE_CONTROL_MODEL   1
  427 #define  UISUBCLASS_ABSTRACT_CONTROL_MODEL      2
  428 #define  UISUBCLASS_TELEPHONE_CONTROL_MODEL     3
  429 #define  UISUBCLASS_MULTICHANNEL_CONTROL_MODEL  4
  430 #define  UISUBCLASS_CAPI_CONTROLMODEL           5
  431 #define  UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL 6
  432 #define  UISUBCLASS_ATM_NETWORKING_CONTROL_MODEL 7
  433 #define   UIPROTO_CDC_AT                        1
  434 
  435 #define UICLASS_HID             0x03
  436 #define  UISUBCLASS_BOOT        1
  437 #define  UIPROTO_BOOT_KEYBOARD  1
  438 #define  UIPROTO_MOUSE          2
  439 
  440 #define UICLASS_PHYSICAL        0x05
  441 
  442 #define UICLASS_IMAGE           0x06
  443 
  444 #define UICLASS_PRINTER         0x07
  445 #define  UISUBCLASS_PRINTER     1
  446 #define  UIPROTO_PRINTER_UNI    1
  447 #define  UIPROTO_PRINTER_BI     2
  448 #define  UIPROTO_PRINTER_1284   3
  449 
  450 #define UICLASS_MASS            0x08
  451 #define  UISUBCLASS_RBC         1
  452 #define  UISUBCLASS_SFF8020I    2
  453 #define  UISUBCLASS_QIC157      3
  454 #define  UISUBCLASS_UFI         4
  455 #define  UISUBCLASS_SFF8070I    5
  456 #define  UISUBCLASS_SCSI        6
  457 #define  UIPROTO_MASS_CBI_I     0
  458 #define  UIPROTO_MASS_CBI       1
  459 #define  UIPROTO_MASS_BBB_OLD   2       /* Not in the spec anymore */
  460 #define  UIPROTO_MASS_BBB       80      /* 'P' for the Iomega Zip drive */
  461 
  462 #define UICLASS_HUB             0x09
  463 #define  UISUBCLASS_HUB         0
  464 #define  UIPROTO_FSHUB          0
  465 #define  UIPROTO_HSHUBSTT       0 /* Yes, same as previous */
  466 #define  UIPROTO_HSHUBMTT       1
  467 
  468 #define UICLASS_CDC_DATA        0x0a
  469 #define  UISUBCLASS_DATA                0
  470 #define   UIPROTO_DATA_ISDNBRI          0x30    /* Physical iface */
  471 #define   UIPROTO_DATA_HDLC             0x31    /* HDLC */
  472 #define   UIPROTO_DATA_TRANSPARENT      0x32    /* Transparent */
  473 #define   UIPROTO_DATA_Q921M            0x50    /* Management for Q921 */
  474 #define   UIPROTO_DATA_Q921             0x51    /* Data for Q921 */
  475 #define   UIPROTO_DATA_Q921TM           0x52    /* TEI multiplexer for Q921 */
  476 #define   UIPROTO_DATA_V42BIS           0x90    /* Data compression */
  477 #define   UIPROTO_DATA_Q931             0x91    /* Euro-ISDN */
  478 #define   UIPROTO_DATA_V120             0x92    /* V.24 rate adaption */
  479 #define   UIPROTO_DATA_CAPI             0x93    /* CAPI 2.0 commands */
  480 #define   UIPROTO_DATA_HOST_BASED       0xfd    /* Host based driver */
  481 #define   UIPROTO_DATA_PUF              0xfe    /* see Prot. Unit Func. Desc.*/
  482 #define   UIPROTO_DATA_VENDOR           0xff    /* Vendor specific */
  483 
  484 #define UICLASS_SMARTCARD       0x0b
  485 
  486 /*#define UICLASS_FIRM_UPD      0x0c*/
  487 
  488 #define UICLASS_SECURITY        0x0d
  489 
  490 #define UICLASS_DIAGNOSTIC      0xdc
  491 
  492 #define UICLASS_WIRELESS        0xe0
  493 #define  UISUBCLASS_RF                  0x01
  494 #define   UIPROTO_BLUETOOTH             0x01
  495 
  496 #define UICLASS_APPL_SPEC       0xfe
  497 #define  UISUBCLASS_FIRMWARE_DOWNLOAD   1
  498 #define  UISUBCLASS_IRDA                2
  499 #define  UIPROTO_IRDA                   0
  500 
  501 #define UICLASS_VENDOR          0xff
  502 #define  UISUBCLASS_XBOX360_CONTROLLER  0x5d
  503 #define  UIPROTO_XBOX360_GAMEPAD        0x01
  504 
  505 
  506 #define USB_HUB_MAX_DEPTH 5
  507 
  508 /*
  509  * Minimum time a device needs to be powered down to go through
  510  * a power cycle.  XXX Are these time in the spec?
  511  */
  512 #define USB_POWER_DOWN_TIME     200 /* ms */
  513 #define USB_PORT_POWER_DOWN_TIME        100 /* ms */
  514 
  515 #if 0
  516 /* These are the values from the spec. */
  517 #define USB_PORT_RESET_DELAY    10  /* ms */
  518 #define USB_PORT_ROOT_RESET_DELAY 50  /* ms */
  519 #define USB_PORT_RESET_RECOVERY 10  /* ms */
  520 #define USB_PORT_POWERUP_DELAY  100 /* ms */
  521 #define USB_SET_ADDRESS_SETTLE  2   /* ms */
  522 #define USB_RESUME_DELAY        (20*5)  /* ms */
  523 #define USB_RESUME_WAIT         10  /* ms */
  524 #define USB_RESUME_RECOVERY     10  /* ms */
  525 #define USB_EXTRA_POWER_UP_TIME 0   /* ms */
  526 #else
  527 /* Allow for marginal (i.e. non-conforming) devices. */
  528 #define USB_PORT_RESET_DELAY    50  /* ms */
  529 #define USB_PORT_ROOT_RESET_DELAY 250  /* ms */
  530 #define USB_PORT_RESET_RECOVERY 250  /* ms */
  531 #define USB_PORT_POWERUP_DELAY  300 /* ms */
  532 #define USB_SET_ADDRESS_SETTLE  10  /* ms */
  533 #define USB_RESUME_DELAY        (50*5)  /* ms */
  534 #define USB_RESUME_WAIT         50  /* ms */
  535 #define USB_RESUME_RECOVERY     50  /* ms */
  536 #define USB_EXTRA_POWER_UP_TIME 20  /* ms */
  537 #endif
  538 
  539 #define USB_MIN_POWER           100 /* mA */
  540 #define USB_MAX_POWER           500 /* mA */
  541 
  542 #define USB_BUS_RESET_DELAY     100 /* ms XXX?*/
  543 
  544 
  545 #define USB_UNCONFIG_NO 0
  546 #define USB_UNCONFIG_INDEX (-1)
  547 
  548 /*** ioctl() related stuff ***/
  549 
  550 struct usb_ctl_request {
  551         int     ucr_addr;
  552         usb_device_request_t ucr_request;
  553         void    *ucr_data;
  554         int     ucr_flags;
  555 #define USBD_SHORT_XFER_OK      0x04    /* allow short reads */
  556         int     ucr_actlen;             /* actual length transferred */
  557 };
  558 
  559 struct usb_alt_interface {
  560         int     uai_config_index;
  561         int     uai_interface_index;
  562         int     uai_alt_no;
  563 };
  564 
  565 #define USB_CURRENT_CONFIG_INDEX (-1)
  566 #define USB_CURRENT_ALT_INDEX (-1)
  567 
  568 struct usb_config_desc {
  569         int     ucd_config_index;
  570         usb_config_descriptor_t ucd_desc;
  571 };
  572 
  573 struct usb_interface_desc {
  574         int     uid_config_index;
  575         int     uid_interface_index;
  576         int     uid_alt_index;
  577         usb_interface_descriptor_t uid_desc;
  578 };
  579 
  580 struct usb_endpoint_desc {
  581         int     ued_config_index;
  582         int     ued_interface_index;
  583         int     ued_alt_index;
  584         int     ued_endpoint_index;
  585         usb_endpoint_descriptor_t ued_desc;
  586 };
  587 
  588 struct usb_full_desc {
  589         int     ufd_config_index;
  590         u_int   ufd_size;
  591         u_char  *ufd_data;
  592 };
  593 
  594 struct usb_string_desc {
  595         int     usd_string_index;
  596         int     usd_language_id;
  597         usb_string_descriptor_t usd_desc;
  598 };
  599 
  600 struct usb_ctl_report_desc {
  601         int     ucrd_size;
  602         u_char  ucrd_data[1024];        /* filled data size will vary */
  603 };
  604 
  605 typedef struct { u_int32_t cookie; } usb_event_cookie_t;
  606 
  607 #define USB_MAX_DEVNAMES 4
  608 #define USB_MAX_DEVNAMELEN 16
  609 struct usb_device_info {
  610         u_int8_t        udi_bus;
  611         u_int8_t        udi_addr;       /* device address */
  612         usb_event_cookie_t udi_cookie;
  613         char            udi_product[USB_MAX_STRING_LEN];
  614         char            udi_vendor[USB_MAX_STRING_LEN];
  615         char            udi_release[8];
  616         u_int16_t       udi_productNo;
  617         u_int16_t       udi_vendorNo;
  618         u_int16_t       udi_releaseNo;
  619         u_int8_t        udi_class;
  620         u_int8_t        udi_subclass;
  621         u_int8_t        udi_protocol;
  622         u_int8_t        udi_config;
  623         u_int8_t        udi_speed;
  624 #define USB_SPEED_LOW  1
  625 #define USB_SPEED_FULL 2
  626 #define USB_SPEED_HIGH 3
  627         int             udi_power;      /* power consumption in mA, 0 if selfpowered */
  628         int             udi_nports;
  629         char            udi_devnames[USB_MAX_DEVNAMES][USB_MAX_DEVNAMELEN];
  630         u_int8_t        udi_ports[16];/* hub only: addresses of devices on ports */
  631 #define USB_PORT_ENABLED 0xff
  632 #define USB_PORT_SUSPENDED 0xfe
  633 #define USB_PORT_POWERED 0xfd
  634 #define USB_PORT_DISABLED 0xfc
  635 };
  636 
  637 struct usb_ctl_report {
  638         int     ucr_report;
  639         u_char  ucr_data[1024]; /* filled data size will vary */
  640 };
  641 
  642 struct usb_device_stats {
  643         u_long  uds_requests[4];        /* indexed by transfer type UE_* */
  644 };
  645 
  646 /* Events that can be read from /dev/usb */
  647 struct usb_event {
  648         int                     ue_type;
  649 #define USB_EVENT_CTRLR_ATTACH 1
  650 #define USB_EVENT_CTRLR_DETACH 2
  651 #define USB_EVENT_DEVICE_ATTACH 3
  652 #define USB_EVENT_DEVICE_DETACH 4
  653 #define USB_EVENT_DRIVER_ATTACH 5
  654 #define USB_EVENT_DRIVER_DETACH 6
  655 #define USB_EVENT_IS_ATTACH(n) ((n) == USB_EVENT_CTRLR_ATTACH || (n) == USB_EVENT_DEVICE_ATTACH || (n) == USB_EVENT_DRIVER_ATTACH)
  656 #define USB_EVENT_IS_DETACH(n) ((n) == USB_EVENT_CTRLR_DETACH || (n) == USB_EVENT_DEVICE_DETACH || (n) == USB_EVENT_DRIVER_DETACH)
  657         struct timespec         ue_time;
  658         union {
  659                 struct {
  660                         int                     ue_bus;
  661                 } ue_ctrlr;
  662                 struct usb_device_info          ue_device;
  663                 struct {
  664                         usb_event_cookie_t      ue_cookie;
  665                         char                    ue_devname[16];
  666                 } ue_driver;
  667         } u;
  668 };
  669 
  670 /* USB controller */
  671 #define USB_REQUEST             _IOWR('U', 1, struct usb_ctl_request)
  672 #define USB_SETDEBUG            _IOW ('U', 2, int)
  673 #define USB_DISCOVER            _IO  ('U', 3)
  674 #define USB_DEVICEINFO          _IOWR('U', 4, struct usb_device_info)
  675 #define USB_DEVICESTATS         _IOR ('U', 5, struct usb_device_stats)
  676 
  677 /* Generic HID device */
  678 #define USB_GET_REPORT_DESC     _IOR ('U', 21, struct usb_ctl_report_desc)
  679 #define USB_SET_IMMED           _IOW ('U', 22, int)
  680 #define USB_GET_REPORT          _IOWR('U', 23, struct usb_ctl_report)
  681 #define USB_SET_REPORT          _IOW ('U', 24, struct usb_ctl_report)
  682 #define USB_GET_REPORT_ID       _IOR ('U', 25, int)
  683 
  684 /* Generic USB device */
  685 #define USB_GET_CONFIG          _IOR ('U', 100, int)
  686 #define USB_SET_CONFIG          _IOW ('U', 101, int)
  687 #define USB_GET_ALTINTERFACE    _IOWR('U', 102, struct usb_alt_interface)
  688 #define USB_SET_ALTINTERFACE    _IOWR('U', 103, struct usb_alt_interface)
  689 #define USB_GET_NO_ALT          _IOWR('U', 104, struct usb_alt_interface)
  690 #define USB_GET_DEVICE_DESC     _IOR ('U', 105, usb_device_descriptor_t)
  691 #define USB_GET_CONFIG_DESC     _IOWR('U', 106, struct usb_config_desc)
  692 #define USB_GET_INTERFACE_DESC  _IOWR('U', 107, struct usb_interface_desc)
  693 #define USB_GET_ENDPOINT_DESC   _IOWR('U', 108, struct usb_endpoint_desc)
  694 #define USB_GET_FULL_DESC       _IOWR('U', 109, struct usb_full_desc)
  695 #define USB_GET_STRING_DESC     _IOWR('U', 110, struct usb_string_desc)
  696 #define USB_DO_REQUEST          _IOWR('U', 111, struct usb_ctl_request)
  697 #define USB_GET_DEVICEINFO      _IOR ('U', 112, struct usb_device_info)
  698 #define USB_SET_SHORT_XFER      _IOW ('U', 113, int)
  699 #define USB_SET_TIMEOUT         _IOW ('U', 114, int)
  700 #define USB_RESET_DEVICE        _IO  ('U', 115)
  701 
  702 /* Modem device */
  703 #define USB_GET_CM_OVER_DATA    _IOR ('U', 130, int)
  704 #define USB_SET_CM_OVER_DATA    _IOW ('U', 131, int)
  705 
  706 #endif /* _USB_H_ */

Cache object: de5965018a387340776fff42d766b00d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.