usb.h revision 188878
11573Srgrimes/* $FreeBSD: head/sys/dev/usb2/include/usb2_standard.h 188878 2009-02-21 01:14:49Z thompsa $ */ 21573Srgrimes/*- 31573Srgrimes * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 41573Srgrimes * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved. 51573Srgrimes * Copyright (c) 1998 Lennart Augustsson. All rights reserved. 61573Srgrimes * 71573Srgrimes * Redistribution and use in source and binary forms, with or without 8235785Stheraven * modification, are permitted provided that the following conditions 9235785Stheraven * are met: 10235785Stheraven * 1. Redistributions of source code must retain the above copyright 11235785Stheraven * notice, this list of conditions and the following disclaimer. 12235785Stheraven * 2. Redistributions in binary form must reproduce the above copyright 131573Srgrimes * notice, this list of conditions and the following disclaimer in the 141573Srgrimes * documentation and/or other materials provided with the distribution. 151573Srgrimes * 161573Srgrimes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 171573Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 181573Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 191573Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 201573Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 211573Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 221573Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 231573Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 241573Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 251573Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261573Srgrimes * SUCH DAMAGE. 271573Srgrimes */ 281573Srgrimes 291573Srgrimes/* 301573Srgrimes * This file contains standard definitions for the following USB 311573Srgrimes * protocol versions: 321573Srgrimes * 331573Srgrimes * USB v1.0 341573Srgrimes * USB v1.1 351573Srgrimes * USB v2.0 361573Srgrimes * USB v3.0 371573Srgrimes */ 381573Srgrimes 391573Srgrimes#ifndef _USB2_STANDARD_H_ 401573Srgrimes#define _USB2_STANDARD_H_ 4192986Sobrien 4292986Sobrien#include <dev/usb2/include/usb2_endian.h> 431573Srgrimes 441573Srgrimes/* 451573Srgrimes * Minimum time a device needs to be powered down to go through a 461573Srgrimes * power cycle. These values are not in the USB specification. 471573Srgrimes */ 481573Srgrimes#define USB_POWER_DOWN_TIME 200 /* ms */ 491573Srgrimes#define USB_PORT_POWER_DOWN_TIME 100 /* ms */ 5071579Sdeischen 511573Srgrimes/* Definition of software USB power modes */ 521573Srgrimes#define USB_POWER_MODE_OFF 0 /* turn off device */ 5387113Sfenner#define USB_POWER_MODE_ON 1 /* always on */ 541573Srgrimes#define USB_POWER_MODE_SAVE 2 /* automatic suspend and resume */ 5587490Sphantom#define USB_POWER_MODE_SUSPEND 3 /* force suspend */ 5687113Sfenner#define USB_POWER_MODE_RESUME 4 /* force resume */ 5787113Sfenner 581573Srgrimes#if 0 591573Srgrimes/* These are the values from the USB specification. */ 601573Srgrimes#define USB_PORT_RESET_DELAY 10 /* ms */ 61103633Stjr#define USB_PORT_ROOT_RESET_DELAY 50 /* ms */ 62153486Sphk#define USB_PORT_RESET_RECOVERY 10 /* ms */ 631573Srgrimes#define USB_PORT_POWERUP_DELAY 100 /* ms */ 641573Srgrimes#define USB_PORT_RESUME_DELAY 20 /* ms */ 65235785Stheraven#define USB_SET_ADDRESS_SETTLE 2 /* ms */ 6671579Sdeischen#define USB_RESUME_DELAY (20*5) /* ms */ 671573Srgrimes#define USB_RESUME_WAIT 10 /* ms */ 6871579Sdeischen#define USB_RESUME_RECOVERY 10 /* ms */ 691573Srgrimes#define USB_EXTRA_POWER_UP_TIME 0 /* ms */ 701573Srgrimes#else 71180104Sdas/* Allow for marginal and non-conforming devices. */ 721573Srgrimes#define USB_PORT_RESET_DELAY 50 /* ms */ 73235785Stheraven#define USB_PORT_ROOT_RESET_DELAY 250 /* ms */ 74235785Stheraven#define USB_PORT_RESET_RECOVERY 250 /* ms */ 75187369Sdas#define USB_PORT_POWERUP_DELAY 300 /* ms */ 76103633Stjr#define USB_PORT_RESUME_DELAY (20*2) /* ms */ 7716586Sjraynard#define USB_SET_ADDRESS_SETTLE 10 /* ms */ 78187277Sdas#define USB_RESUME_DELAY (50*5) /* ms */ 79187277Sdas#define USB_RESUME_WAIT 50 /* ms */ 80187277Sdas#define USB_RESUME_RECOVERY 50 /* ms */ 81187582Sdas#define USB_EXTRA_POWER_UP_TIME 20 /* ms */ 82187582Sdas#endif 83187582Sdas 84187582Sdas#define USB_MIN_POWER 100 /* mA */ 85187582Sdas#define USB_MAX_POWER 500 /* mA */ 86187582Sdas 87187582Sdas#define USB_BUS_RESET_DELAY 100 /* ms */ 88187582Sdas 89187582Sdas/* 901573Srgrimes * USB record layout in memory: 91187582Sdas * 92187582Sdas * - USB config 0 93187582Sdas * - USB interfaces 94187582Sdas * - USB alternative interfaces 95187582Sdas * - USB pipes 96235785Stheraven * 97187582Sdas * - USB config 1 98187582Sdas * - USB interfaces 99187582Sdas * - USB alternative interfaces 100235785Stheraven * - USB pipes 101187582Sdas */ 102187582Sdas 103187582Sdas/* Declaration of USB records */ 104187582Sdas 105187582Sdasstruct usb2_device_request { 106187582Sdas uByte bmRequestType; 107187582Sdas uByte bRequest; 108187582Sdas uWord wValue; 109187582Sdas uWord wIndex; 110187582Sdas uWord wLength; 111187582Sdas} __packed; 112187582Sdastypedef struct usb2_device_request usb_device_request_t; 113187582Sdas 114187582Sdas#define UT_WRITE 0x00 115187582Sdas#define UT_READ 0x80 116187582Sdas#define UT_STANDARD 0x00 117187582Sdas#define UT_CLASS 0x20 118187582Sdas#define UT_VENDOR 0x40 119187582Sdas#define UT_DEVICE 0x00 120187582Sdas#define UT_INTERFACE 0x01 121187582Sdas#define UT_ENDPOINT 0x02 122187582Sdas#define UT_OTHER 0x03 123187582Sdas 124187582Sdas#define UT_READ_DEVICE (UT_READ | UT_STANDARD | UT_DEVICE) 125235785Stheraven#define UT_READ_INTERFACE (UT_READ | UT_STANDARD | UT_INTERFACE) 126187582Sdas#define UT_READ_ENDPOINT (UT_READ | UT_STANDARD | UT_ENDPOINT) 127187582Sdas#define UT_WRITE_DEVICE (UT_WRITE | UT_STANDARD | UT_DEVICE) 128187582Sdas#define UT_WRITE_INTERFACE (UT_WRITE | UT_STANDARD | UT_INTERFACE) 129235785Stheraven#define UT_WRITE_ENDPOINT (UT_WRITE | UT_STANDARD | UT_ENDPOINT) 130187582Sdas#define UT_READ_CLASS_DEVICE (UT_READ | UT_CLASS | UT_DEVICE) 131187582Sdas#define UT_READ_CLASS_INTERFACE (UT_READ | UT_CLASS | UT_INTERFACE) 132187582Sdas#define UT_READ_CLASS_OTHER (UT_READ | UT_CLASS | UT_OTHER) 133187582Sdas#define UT_READ_CLASS_ENDPOINT (UT_READ | UT_CLASS | UT_ENDPOINT) 134187582Sdas#define UT_WRITE_CLASS_DEVICE (UT_WRITE | UT_CLASS | UT_DEVICE) 135187582Sdas#define UT_WRITE_CLASS_INTERFACE (UT_WRITE | UT_CLASS | UT_INTERFACE) 136187582Sdas#define UT_WRITE_CLASS_OTHER (UT_WRITE | UT_CLASS | UT_OTHER) 137187582Sdas#define UT_WRITE_CLASS_ENDPOINT (UT_WRITE | UT_CLASS | UT_ENDPOINT) 138187582Sdas#define UT_READ_VENDOR_DEVICE (UT_READ | UT_VENDOR | UT_DEVICE) 139235785Stheraven#define UT_READ_VENDOR_INTERFACE (UT_READ | UT_VENDOR | UT_INTERFACE) 140187582Sdas#define UT_READ_VENDOR_OTHER (UT_READ | UT_VENDOR | UT_OTHER) 141235785Stheraven#define UT_READ_VENDOR_ENDPOINT (UT_READ | UT_VENDOR | UT_ENDPOINT) 142187582Sdas#define UT_WRITE_VENDOR_DEVICE (UT_WRITE | UT_VENDOR | UT_DEVICE) 143187582Sdas#define UT_WRITE_VENDOR_INTERFACE (UT_WRITE | UT_VENDOR | UT_INTERFACE) 144187582Sdas#define UT_WRITE_VENDOR_OTHER (UT_WRITE | UT_VENDOR | UT_OTHER) 145187582Sdas#define UT_WRITE_VENDOR_ENDPOINT (UT_WRITE | UT_VENDOR | UT_ENDPOINT) 146187582Sdas 147187582Sdas/* Requests */ 148187582Sdas#define UR_GET_STATUS 0x00 149187582Sdas#define UR_CLEAR_FEATURE 0x01 150187582Sdas#define UR_SET_FEATURE 0x03 1511573Srgrimes#define UR_SET_ADDRESS 0x05 1521573Srgrimes#define UR_GET_DESCRIPTOR 0x06 1531573Srgrimes#define UDESC_DEVICE 0x01 1541573Srgrimes#define UDESC_CONFIG 0x02 155235785Stheraven#define UDESC_STRING 0x03 1561573Srgrimes#define USB_LANGUAGE_TABLE 0x00 /* language ID string index */ 15771579Sdeischen#define UDESC_INTERFACE 0x04 1581573Srgrimes#define UDESC_ENDPOINT 0x05 1591573Srgrimes#define UDESC_DEVICE_QUALIFIER 0x06 1601573Srgrimes#define UDESC_OTHER_SPEED_CONFIGURATION 0x07 1611573Srgrimes#define UDESC_INTERFACE_POWER 0x08 1621573Srgrimes#define UDESC_OTG 0x09 1631573Srgrimes#define UDESC_DEBUG 0x0A 1641573Srgrimes#define UDESC_IFACE_ASSOC 0x0B /* interface association */ 1651573Srgrimes#define UDESC_BOS 0x0F /* binary object store */ 1661573Srgrimes#define UDESC_DEVICE_CAPABILITY 0x10 1671573Srgrimes#define UDESC_CS_DEVICE 0x21 /* class specific */ 1681573Srgrimes#define UDESC_CS_CONFIG 0x22 1691573Srgrimes#define UDESC_CS_STRING 0x23 1701573Srgrimes#define UDESC_CS_INTERFACE 0x24 1711573Srgrimes#define UDESC_CS_ENDPOINT 0x25 1721573Srgrimes#define UDESC_HUB 0x29 1731573Srgrimes#define UDESC_ENDPOINT_SS_COMP 0x30 /* super speed */ 1741573Srgrimes#define UR_SET_DESCRIPTOR 0x07 175235785Stheraven#define UR_GET_CONFIG 0x08 1761573Srgrimes#define UR_SET_CONFIG 0x09 1771573Srgrimes#define UR_GET_INTERFACE 0x0a 178205021Sjhb#define UR_SET_INTERFACE 0x0b 1791573Srgrimes#define UR_SYNCH_FRAME 0x0c 1801573Srgrimes#define UR_SET_SEL 0x30 181187369Sdas#define UR_ISOCH_DELAY 0x31 182187369Sdas 183187369Sdas/* HUB specific request */ 184187369Sdas#define UR_GET_BUS_STATE 0x02 1851573Srgrimes#define UR_CLEAR_TT_BUFFER 0x08 1861573Srgrimes#define UR_RESET_TT 0x09 1871573Srgrimes#define UR_GET_TT_STATE 0x0a 1881573Srgrimes#define UR_STOP_TT 0x0b 1891573Srgrimes#define UR_SET_HUB_DEPTH 0x0c 190178287Sjhb#define UR_GET_PORT_ERR_COUNT 0x0d 191178287Sjhb 1921573Srgrimes/* Feature numbers */ 1931573Srgrimes#define UF_ENDPOINT_HALT 0 1941573Srgrimes#define UF_DEVICE_REMOTE_WAKEUP 1 1951573Srgrimes#define UF_TEST_MODE 2 1961573Srgrimes#define UF_U1_ENABLE 0x30 1971573Srgrimes#define UF_U2_ENABLE 0x31 1981573Srgrimes#define UF_LTM_ENABLE 0x32 199235785Stheraven 20071579Sdeischen/* HUB specific features */ 2011573Srgrimes#define UHF_C_HUB_LOCAL_POWER 0 2021573Srgrimes#define UHF_C_HUB_OVER_CURRENT 1 2031573Srgrimes#define UHF_PORT_CONNECTION 0 2041573Srgrimes#define UHF_PORT_ENABLE 1 2051573Srgrimes#define UHF_PORT_SUSPEND 2 2061573Srgrimes#define UHF_PORT_OVER_CURRENT 3 2071573Srgrimes#define UHF_PORT_RESET 4 208103633Stjr#define UHF_PORT_LINK_STATE 5 209148363Stjr#define UHF_PORT_POWER 8 210148363Stjr#define UHF_PORT_LOW_SPEED 9 211148363Stjr#define UHF_C_PORT_CONNECTION 16 212103633Stjr#define UHF_C_PORT_ENABLE 17 213103633Stjr#define UHF_C_PORT_SUSPEND 18 214103633Stjr#define UHF_C_PORT_OVER_CURRENT 19 215103633Stjr#define UHF_C_PORT_RESET 20 216128002Stjr#define UHF_PORT_TEST 21 217128002Stjr#define UHF_PORT_INDICATOR 22 218103633Stjr 219103633Stjr/* SuperSpeed HUB specific features */ 220148363Stjr#define UHF_PORT_U1_TIMEOUT 23 221103633Stjr#define UHF_PORT_U2_TIMEOUT 24 222103633Stjr#define UHF_C_PORT_LINK_STATE 25 223148363Stjr#define UHF_C_PORT_CONFIG_ERROR 26 224148363Stjr#define UHF_PORT_REMOTE_WAKE_MASK 27 225103633Stjr#define UHF_BH_PORT_RESET 28 226128002Stjr#define UHF_C_BH_PORT_RESET 29 227128002Stjr#define UHF_FORCE_LINKPM_ACCEPT 30 228103633Stjr 229103633Stjrstruct usb2_descriptor { 230148363Stjr uByte bLength; 231148363Stjr uByte bDescriptorType; 232148363Stjr uByte bDescriptorSubtype; 233148363Stjr} __packed; 234148363Stjrtypedef struct usb2_descriptor usb_descriptor_t; 235148363Stjr 236148363Stjrstruct usb2_device_descriptor { 237148363Stjr uByte bLength; 238148363Stjr uByte bDescriptorType; 239148363Stjr uWord bcdUSB; 240148363Stjr#define UD_USB_2_0 0x0200 241148363Stjr#define UD_USB_3_0 0x0300 242148363Stjr#define UD_IS_USB2(d) ((d)->bcdUSB[1] == 0x02) 243148363Stjr#define UD_IS_USB3(d) ((d)->bcdUSB[1] == 0x03) 244148363Stjr uByte bDeviceClass; 245148363Stjr uByte bDeviceSubClass; 246148363Stjr uByte bDeviceProtocol; 247148363Stjr uByte bMaxPacketSize; 248148363Stjr /* The fields below are not part of the initial descriptor. */ 249148363Stjr uWord idVendor; 250103633Stjr uWord idProduct; 251103633Stjr uWord bcdDevice; 252103633Stjr uByte iManufacturer; 253103633Stjr uByte iProduct; 254148363Stjr uByte iSerialNumber; 255103633Stjr uByte bNumConfigurations; 256128002Stjr} __packed; 257148363Stjrtypedef struct usb2_device_descriptor usb_device_descriptor_t; 258148363Stjr 259113196Sache/* Binary Device Object Store (BOS) */ 260113196Sachestruct usb2_bos_descriptor { 261113196Sache uByte bLength; 262148363Stjr uByte bDescriptorType; 263103633Stjr uWord wTotalLength; 264103633Stjr uByte bNumDeviceCaps; 265103633Stjr} __packed; 266103633Stjrtypedef struct usb2_bos_descriptor usb_bos_descriptor_t; 26771579Sdeischen 26871579Sdeischen/* Binary Device Object Store Capability */ 26971579Sdeischenstruct usb2_bos_cap_descriptor { 270235785Stheraven uByte bLength; 271235785Stheraven uByte bDescriptorType; 27271579Sdeischen uByte bDevCapabilityType; 27371579Sdeischen#define USB_DEVCAP_RESERVED 0x00 274235785Stheraven#define USB_DEVCAP_WUSB 0x01 27571579Sdeischen#define USB_DEVCAP_USB2EXT 0x02 27671579Sdeischen#define USB_DEVCAP_SUPER_SPEED 0x03 277187369Sdas#define USB_DEVCAP_CONTAINER_ID 0x04 278187369Sdas /* data ... */ 279187369Sdas} __packed; 280235785Stheraventypedef struct usb2_bos_cap_descriptor usb_bos_cap_descriptor_t; 281187369Sdas 282235785Stheravenstruct usb2_devcap_usb2ext_descriptor { 28371579Sdeischen uByte bLength; 28471579Sdeischen uByte bDescriptorType; 28571579Sdeischen uByte bDevCapabilityType; 286235785Stheraven uByte bmAttributes; 287235785Stheraven#define USB_V2EXT_LPM 0x02 288235785Stheraven} __packed; 289235785Stheraventypedef struct usb2_devcap_usb2ext_descriptor usb_devcap_usb2ext_descriptor_t; 290235785Stheraven 29171579Sdeischenstruct usb2_devcap_ss_descriptor { 292113142Sdas uByte bLength; 293113142Sdas uByte bDescriptorType; 294187582Sdas uByte bDevCapabilityType; 295187582Sdas uByte bmAttributes; 296113142Sdas uWord wSpeedsSupported; 297187582Sdas uByte bFunctionaltySupport; 298187582Sdas uByte bU1DevExitLat; 299187582Sdas uByte bU2DevExitLat; 300187582Sdas} __packed; 301187582Sdastypedef struct usb2_devcap_ss_descriptor usb_devcap_ss_descriptor_t; 3021573Srgrimes 3031573Srgrimesstruct usb2_devcap_container_id_descriptor { 30471579Sdeischen uByte bLength; 30571579Sdeischen uByte bDescriptorType; 3061573Srgrimes uByte bDevCapabilityType; 307235785Stheraven uByte bReserved; 3081573Srgrimes uByte ContainerID; 30971579Sdeischen} __packed; 31071579Sdeischentypedef struct usb2_devcap_container_id_descriptor 31171579Sdeischen usb_devcap_container_id_descriptor_t; 31271579Sdeischen 31371579Sdeischen/* Device class codes */ 3141573Srgrimes#define UDCLASS_IN_INTERFACE 0x00 3151573Srgrimes#define UDCLASS_COMM 0x02 316113146Sdas#define UDCLASS_HUB 0x09 3171573Srgrimes#define UDSUBCLASS_HUB 0x00 318187582Sdas#define UDPROTO_FSHUB 0x00 319187277Sdas#define UDPROTO_HSHUBSTT 0x01 320128819Sdas#define UDPROTO_HSHUBMTT 0x02 321113146Sdas#define UDCLASS_DIAGNOSTIC 0xdc 322113146Sdas#define UDCLASS_WIRELESS 0xe0 323113146Sdas#define UDSUBCLASS_RF 0x01 324113146Sdas#define UDPROTO_BLUETOOTH 0x01 325113146Sdas#define UDCLASS_VENDOR 0xff 326113146Sdas 327113146Sdasstruct usb2_config_descriptor { 328113146Sdas uByte bLength; 329113146Sdas uByte bDescriptorType; 330113146Sdas uWord wTotalLength; 331113146Sdas uByte bNumInterface; 332113146Sdas uByte bConfigurationValue; 333113146Sdas#define USB_UNCONFIG_NO 0 334113146Sdas uByte iConfiguration; 33587490Sphantom uByte bmAttributes; 336187421Sdas#define UC_BUS_POWERED 0x80 337113146Sdas#define UC_SELF_POWERED 0x40 338113146Sdas#define UC_REMOTE_WAKEUP 0x20 339113146Sdas uByte bMaxPower; /* max current in 2 mA units */ 340113146Sdas#define UC_POWER_FACTOR 2 341113146Sdas} __packed; 3421573Srgrimestypedef struct usb2_config_descriptor usb_config_descriptor_t; 343113146Sdas 344113146Sdasstruct usb2_interface_descriptor { 3451573Srgrimes uByte bLength; 346113146Sdas uByte bDescriptorType; 347113146Sdas uByte bInterfaceNumber; 34872523Stegge uByte bAlternateSetting; 3491573Srgrimes uByte bNumEndpoints; 3501573Srgrimes uByte bInterfaceClass; 35187113Sfenner uByte bInterfaceSubClass; 3521573Srgrimes uByte bInterfaceProtocol; 3531573Srgrimes uByte iInterface; 35414727Sfenner} __packed; 3551573Srgrimestypedef struct usb2_interface_descriptor usb_interface_descriptor_t; 35631983Sache 357113146Sdasstruct usb2_interface_assoc_descriptor { 358187277Sdas uByte bLength; 359113142Sdas uByte bDescriptorType; 360113146Sdas uByte bFirstInterface; 361103399Stjr uByte bInterfaceCount; 362103399Stjr uByte bFunctionClass; 363103399Stjr uByte bFunctionSubClass; 364103399Stjr uByte bFunctionProtocol; 365103633Stjr uByte iFunction; 3661573Srgrimes} __packed; 367165742Sdastypedef struct usb2_interface_assoc_descriptor usb_interface_assoc_descriptor_t; 368165742Sdas 369113146Sdas/* Interface class codes */ 370187277Sdas#define UICLASS_UNSPEC 0x00 3711573Srgrimes#define UICLASS_AUDIO 0x01 /* audio */ 372235785Stheraven#define UISUBCLASS_AUDIOCONTROL 1 373187277Sdas#define UISUBCLASS_AUDIOSTREAM 2 3741573Srgrimes#define UISUBCLASS_MIDISTREAM 3 3751573Srgrimes 376235785Stheraven#define UICLASS_CDC 0x02 /* communication */ 377187277Sdas#define UISUBCLASS_DIRECT_LINE_CONTROL_MODEL 1 3781573Srgrimes#define UISUBCLASS_ABSTRACT_CONTROL_MODEL 2 379187277Sdas#define UISUBCLASS_TELEPHONE_CONTROL_MODEL 3 380235785Stheraven#define UISUBCLASS_MULTICHANNEL_CONTROL_MODEL 4 381187277Sdas#define UISUBCLASS_CAPI_CONTROLMODEL 5 382187277Sdas#define UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL 6 3831573Srgrimes#define UISUBCLASS_ATM_NETWORKING_CONTROL_MODEL 7 384235785Stheraven#define UISUBCLASS_WIRELESS_HANDSET_CM 8 3851573Srgrimes#define UISUBCLASS_DEVICE_MGMT 9 3861573Srgrimes#define UISUBCLASS_MOBILE_DIRECT_LINE_MODEL 10 3871573Srgrimes#define UISUBCLASS_OBEX 11 388103399Stjr#define UISUBCLASS_ETHERNET_EMULATION_MODEL 12 389103399Stjr 390103399Stjr#define UIPROTO_CDC_AT 1 391103399Stjr#define UIPROTO_CDC_ETH_512X4 0x76 /* FreeBSD specific */ 392103399Stjr 39321674Sjkh#define UICLASS_HID 0x03 394103399Stjr#define UISUBCLASS_BOOT 1 395103399Stjr#define UIPROTO_BOOT_KEYBOARD 1 39621674Sjkh#define UIPROTO_MOUSE 2 3971573Srgrimes 3981573Srgrimes#define UICLASS_PHYSICAL 0x05 3991573Srgrimes#define UICLASS_IMAGE 0x06 4001573Srgrimes#define UISUBCLASS_SIC 1 /* still image class */ 4011573Srgrimes#define UICLASS_PRINTER 0x07 40221674Sjkh#define UISUBCLASS_PRINTER 1 40321674Sjkh#define UIPROTO_PRINTER_UNI 1 40487113Sfenner#define UIPROTO_PRINTER_BI 2 40521674Sjkh#define UIPROTO_PRINTER_1284 3 4061573Srgrimes 40721674Sjkh#define UICLASS_MASS 0x08 40821674Sjkh#define UISUBCLASS_RBC 1 40987113Sfenner#define UISUBCLASS_SFF8020I 2 41021674Sjkh#define UISUBCLASS_QIC157 3 41187113Sfenner#define UISUBCLASS_UFI 4 41287113Sfenner#define UISUBCLASS_SFF8070I 5 41387113Sfenner#define UISUBCLASS_SCSI 6 414189131Sdas#define UIPROTO_MASS_CBI_I 0 41587113Sfenner#define UIPROTO_MASS_CBI 1 41687113Sfenner#define UIPROTO_MASS_BBB_OLD 2 /* Not in the spec anymore */ 41787113Sfenner#define UIPROTO_MASS_BBB 80 /* 'P' for the Iomega Zip drive */ 41887113Sfenner 41987113Sfenner#define UICLASS_HUB 0x09 42087113Sfenner#define UISUBCLASS_HUB 0 42187113Sfenner#define UIPROTO_FSHUB 0 4221573Srgrimes#define UIPROTO_HSHUBSTT 0 /* Yes, same as previous */ 423103399Stjr#define UIPROTO_HSHUBMTT 1 424103399Stjr 425103399Stjr#define UICLASS_CDC_DATA 0x0a 426103399Stjr#define UISUBCLASS_DATA 0 42721674Sjkh#define UIPROTO_DATA_ISDNBRI 0x30 /* Physical iface */ 428103399Stjr#define UIPROTO_DATA_HDLC 0x31 /* HDLC */ 429103399Stjr#define UIPROTO_DATA_TRANSPARENT 0x32 /* Transparent */ 430103399Stjr#define UIPROTO_DATA_Q921M 0x50 /* Management for Q921 */ 431103399Stjr#define UIPROTO_DATA_Q921 0x51 /* Data for Q921 */ 432103399Stjr#define UIPROTO_DATA_Q921TM 0x52 /* TEI multiplexer for Q921 */ 433103399Stjr#define UIPROTO_DATA_V42BIS 0x90 /* Data compression */ 434103399Stjr#define UIPROTO_DATA_Q931 0x91 /* Euro-ISDN */ 435103399Stjr#define UIPROTO_DATA_V120 0x92 /* V.24 rate adaption */ 436103399Stjr#define UIPROTO_DATA_CAPI 0x93 /* CAPI 2.0 commands */ 437103399Stjr#define UIPROTO_DATA_HOST_BASED 0xfd /* Host based driver */ 438180106Sdas#define UIPROTO_DATA_PUF 0xfe /* see Prot. Unit Func. Desc. */ 439180106Sdas#define UIPROTO_DATA_VENDOR 0xff /* Vendor specific */ 440180106Sdas 441180106Sdas#define UICLASS_SMARTCARD 0x0b 442103399Stjr#define UICLASS_FIRM_UPD 0x0c 443103399Stjr#define UICLASS_SECURITY 0x0d 44421674Sjkh#define UICLASS_DIAGNOSTIC 0xdc 445103399Stjr#define UICLASS_WIRELESS 0xe0 446103399Stjr#define UISUBCLASS_RF 0x01 447103399Stjr#define UIPROTO_BLUETOOTH 0x01 448103399Stjr 449103399Stjr#define UICLASS_APPL_SPEC 0xfe 45087815Sphantom#define UISUBCLASS_FIRMWARE_DOWNLOAD 1 451185825Sdas#define UISUBCLASS_IRDA 2 452185825Sdas#define UIPROTO_IRDA 0 453185825Sdas 454185825Sdas#define UICLASS_VENDOR 0xff 45588057Sphantom#define UISUBCLASS_XBOX360_CONTROLLER 0x5d 4561573Srgrimes#define UIPROTO_XBOX360_GAMEPAD 0x01 457130231Sdas 4581573Srgrimesstruct usb2_endpoint_descriptor { 4591573Srgrimes uByte bLength; 460185904Sdas uByte bDescriptorType; 4611573Srgrimes uByte bEndpointAddress; 462103399Stjr#define UE_GET_DIR(a) ((a) & 0x80) 463103399Stjr#define UE_SET_DIR(a,d) ((a) | (((d)&1) << 7)) 464103876Stjr#define UE_DIR_IN 0x80 465187277Sdas#define UE_DIR_OUT 0x00 4661573Srgrimes#define UE_DIR_ANY 0xff /* for internal use only! */ 467185904Sdas#define UE_ADDR 0x0f 468185904Sdas#define UE_ADDR_ANY 0xff /* for internal use only! */ 469235785Stheraven#define UE_GET_ADDR(a) ((a) & UE_ADDR) 470187421Sdas uByte bmAttributes; 471187421Sdas#define UE_XFERTYPE 0x03 472185904Sdas#define UE_CONTROL 0x00 4731573Srgrimes#define UE_ISOCHRONOUS 0x01 4741573Srgrimes#define UE_BULK 0x02 4751573Srgrimes#define UE_INTERRUPT 0x03 4761573Srgrimes#define UE_BULK_INTR 0xfe /* for internal use only! */ 4771573Srgrimes#define UE_TYPE_ANY 0xff /* for internal use only! */ 4781573Srgrimes#define UE_GET_XFERTYPE(a) ((a) & UE_XFERTYPE) 4791573Srgrimes#define UE_ISO_TYPE 0x0c 4801573Srgrimes#define UE_ISO_ASYNC 0x04 48132253Sache#define UE_ISO_ADAPT 0x08 48231983Sache#define UE_ISO_SYNC 0x0c 48331983Sache#define UE_GET_ISO_TYPE(a) ((a) & UE_ISO_TYPE) 48431983Sache uWord wMaxPacketSize; 4851573Srgrimes#define UE_ZERO_MPS 0xFFFF /* for internal use only */ 4861573Srgrimes uByte bInterval; 4871573Srgrimes} __packed; 4881573Srgrimestypedef struct usb2_endpoint_descriptor usb_endpoint_descriptor_t; 4891573Srgrimes 4901573Srgrimesstruct usb2_endpoint_ss_comp_descriptor { 4911573Srgrimes uByte bLength; 4921573Srgrimes uByte bDescriptorType; 4931573Srgrimes uWord bMaxBurst; 4941573Srgrimes uByte bmAttributes; 4951573Srgrimes uWord wBytesPerInterval; 496187582Sdas} __packed; 4971573Srgrimestypedef struct usb2_endpoint_ss_comp_descriptor 498113146Sdas usb_endpoint_ss_comp_descriptor_t; 4991573Srgrimes 5001573Srgrimesstruct usb2_string_descriptor { 5011573Srgrimes uByte bLength; 5021573Srgrimes uByte bDescriptorType; 50388057Sphantom uWord bString[126]; 5041573Srgrimes uByte bUnused; 5051573Srgrimes} __packed; 5061573Srgrimestypedef struct usb2_string_descriptor usb_string_descriptor_t; 5071573Srgrimes 5081573Srgrimes#define USB_MAKE_STRING_DESC(m,name) \ 5091573Srgrimesstruct name { \ 5101573Srgrimes uByte bLength; \ 5111573Srgrimes uByte bDescriptorType; \ 5121573Srgrimes uByte bData[sizeof((uint8_t []){m})]; \ 5131573Srgrimes} __packed; \ 5141573Srgrimesstatic const struct name name = { \ 51588057Sphantom .bLength = sizeof(struct name), \ 5161573Srgrimes .bDescriptorType = UDESC_STRING, \ 5171573Srgrimes .bData = { m }, \ 5181573Srgrimes} 5191573Srgrimes 5201573Srgrimesstruct usb2_hub_descriptor { 52121674Sjkh uByte bDescLength; 52221674Sjkh uByte bDescriptorType; 5231573Srgrimes uByte bNbrPorts; 5241573Srgrimes uWord wHubCharacteristics; 5251573Srgrimes#define UHD_PWR 0x0003 5261573Srgrimes#define UHD_PWR_GANGED 0x0000 5271573Srgrimes#define UHD_PWR_INDIVIDUAL 0x0001 5281573Srgrimes#define UHD_PWR_NO_SWITCH 0x0002 5291573Srgrimes#define UHD_COMPOUND 0x0004 5301573Srgrimes#define UHD_OC 0x0018 5311573Srgrimes#define UHD_OC_GLOBAL 0x0000 53287113Sfenner#define UHD_OC_INDIVIDUAL 0x0008 53387815Sphantom#define UHD_OC_NONE 0x0010 53487113Sfenner#define UHD_TT_THINK 0x0060 5351573Srgrimes#define UHD_TT_THINK_8 0x0000 5361573Srgrimes#define UHD_TT_THINK_16 0x0020 537113191Sdas#define UHD_TT_THINK_24 0x0040 5381573Srgrimes#define UHD_TT_THINK_32 0x0060 5391573Srgrimes#define UHD_PORT_IND 0x0080 540113191Sdas uByte bPwrOn2PwrGood; /* delay in 2 ms units */ 5411573Srgrimes#define UHD_PWRON_FACTOR 2 542113191Sdas uByte bHubContrCurrent; 5431573Srgrimes uByte DeviceRemovable[32]; /* max 255 ports */ 5441573Srgrimes#define UHD_NOT_REMOV(desc, i) \ 5451573Srgrimes (((desc)->DeviceRemovable[(i)/8] >> ((i) % 8)) & 1) 5461573Srgrimes uByte PortPowerCtrlMask[1]; /* deprecated */ 54788057Sphantom} __packed; 5481573Srgrimestypedef struct usb2_hub_descriptor usb_hub_descriptor_t; 5491573Srgrimes 5501573Srgrimesstruct usb2_hub_ss_descriptor { 5511573Srgrimes uByte bDescLength; 5521573Srgrimes uByte bDescriptorType; 5531573Srgrimes uByte bNbrPorts; /* max 15 */ 5541573Srgrimes uWord wHubCharacteristics; 5551573Srgrimes uByte bPwrOn2PwrGood; /* delay in 2 ms units */ 5561573Srgrimes uByte bHubContrCurrent; 5571573Srgrimes uByte bHubHdrDecLat; 5581573Srgrimes uWord wHubDelay; 5591573Srgrimes uByte DeviceRemovable[2]; /* max 15 ports */ 5601573Srgrimes} __packed; 56121674Sjkhtypedef struct usb2_hub_ss_descriptor usb_hub_ss_descriptor_t; 56221674Sjkh 563103399Stjr/* minimum HUB descriptor (8-ports maximum) */ 564103399Stjrstruct usb2_hub_descriptor_min { 565180106Sdas uByte bDescLength; 566180106Sdas uByte bDescriptorType; 567180106Sdas uByte bNbrPorts; 568180106Sdas uWord wHubCharacteristics; 569180106Sdas uByte bPwrOn2PwrGood; 57021674Sjkh uByte bHubContrCurrent; 57121674Sjkh uByte DeviceRemovable[1]; 572103399Stjr uByte PortPowerCtrlMask[1]; 5731573Srgrimes} __packed; 5741573Srgrimestypedef struct usb2_hub_descriptor_min usb_hub_descriptor_min_t; 575128819Sdas 5761573Srgrimesstruct usb2_device_qualifier { 5771573Srgrimes uByte bLength; 5781573Srgrimes uByte bDescriptorType; 5791573Srgrimes uWord bcdUSB; 5801573Srgrimes uByte bDeviceClass; 58187113Sfenner uByte bDeviceSubClass; 58287113Sfenner uByte bDeviceProtocol; 58387113Sfenner uByte bMaxPacketSize0; 58487113Sfenner uByte bNumConfigurations; 58587113Sfenner uByte bReserved; 5861573Srgrimes} __packed; 58787113Sfennertypedef struct usb2_device_qualifier usb_device_qualifier_t; 58887113Sfenner 58987113Sfennerstruct usb2_otg_descriptor { 5901573Srgrimes uByte bLength; 59187113Sfenner uByte bDescriptorType; 59287113Sfenner uByte bmAttributes; 59387113Sfenner#define UOTG_SRP 0x01 59487113Sfenner#define UOTG_HNP 0x02 59544674Sdfr} __packed; 5961573Srgrimestypedef struct usb2_otg_descriptor usb_otg_descriptor_t; 5971573Srgrimes 59887113Sfenner/* OTG feature selectors */ 5991573Srgrimes#define UOTG_B_HNP_ENABLE 3 60087113Sfenner#define UOTG_A_HNP_SUPPORT 4 60187113Sfenner#define UOTG_A_ALT_HNP_SUPPORT 5 60287113Sfenner 60387113Sfennerstruct usb2_status { 60487113Sfenner uWord wStatus; 60587113Sfenner/* Device status flags */ 606105204Stjr#define UDS_SELF_POWERED 0x0001 607105204Stjr#define UDS_REMOTE_WAKEUP 0x0002 608105204Stjr/* Endpoint status flags */ 6091573Srgrimes#define UES_HALT 0x0001 610103633Stjr} __packed; 611128002Stjrtypedef struct usb2_status usb_status_t; 612128002Stjr 613103633Stjrstruct usb2_hub_status { 614103633Stjr uWord wHubStatus; 615128002Stjr#define UHS_LOCAL_POWER 0x0001 616103633Stjr#define UHS_OVER_CURRENT 0x0002 617128002Stjr uWord wHubChange; 618105234Stjr} __packed; 619105234Stjrtypedef struct usb2_hub_status usb_hub_status_t; 620103633Stjr 621105234Stjrstruct usb2_port_status { 622103633Stjr uWord wPortStatus; 623103633Stjr#define UPS_CURRENT_CONNECT_STATUS 0x0001 624103633Stjr#define UPS_PORT_ENABLED 0x0002 625103633Stjr#define UPS_SUSPEND 0x0004 626103633Stjr#define UPS_OVERCURRENT_INDICATOR 0x0008 6271573Srgrimes#define UPS_RESET 0x0010 6281573Srgrimes#define UPS_PORT_POWER 0x0100 6291573Srgrimes#define UPS_LOW_SPEED 0x0200 6301573Srgrimes#define UPS_HIGH_SPEED 0x0400 6311573Srgrimes#define UPS_PORT_TEST 0x0800 6321573Srgrimes#define UPS_PORT_INDICATOR 0x1000 6331573Srgrimes#define UPS_PORT_MODE_DEVICE 0x8000 /* currently FreeBSD specific */ 63487113Sfenner uWord wPortChange; 63587113Sfenner#define UPS_C_CONNECT_STATUS 0x0001 63687113Sfenner#define UPS_C_PORT_ENABLED 0x0002 63787113Sfenner#define UPS_C_SUSPEND 0x0004 6381573Srgrimes#define UPS_C_OVERCURRENT_INDICATOR 0x0008 6391573Srgrimes#define UPS_C_PORT_RESET 0x0010 6401573Srgrimes} __packed; 6411573Srgrimestypedef struct usb2_port_status usb_port_status_t; 6421573Srgrimes 6431573Srgrimes#endif /* _USB2_STANDARD_H_ */ 6441573Srgrimes