uboot/include/usb_defs.h
<<
>>
Prefs
   1/*
   2 * (C) Copyright 2001
   3 * Denis Peter, MPL AG Switzerland
   4 *
   5 * SPDX-License-Identifier:     GPL-2.0+
   6 *
   7 * Note: Part of this code has been derived from linux
   8 */
   9#ifndef _USB_DEFS_H_
  10#define _USB_DEFS_H_
  11
  12/* USB constants */
  13
  14/* Device and/or Interface Class codes */
  15#define USB_CLASS_PER_INTERFACE  0      /* for DeviceClass */
  16#define USB_CLASS_AUDIO          1
  17#define USB_CLASS_COMM           2
  18#define USB_CLASS_HID            3
  19#define USB_CLASS_PRINTER              7
  20#define USB_CLASS_MASS_STORAGE   8
  21#define USB_CLASS_HUB            9
  22#define USB_CLASS_DATA           10
  23#define USB_CLASS_VENDOR_SPEC    0xff
  24
  25/* some HID sub classes */
  26#define USB_SUB_HID_NONE        0
  27#define USB_SUB_HID_BOOT        1
  28
  29/* some UID Protocols */
  30#define USB_PROT_HID_NONE       0
  31#define USB_PROT_HID_KEYBOARD   1
  32#define USB_PROT_HID_MOUSE      2
  33
  34
  35/* Sub STORAGE Classes */
  36#define US_SC_RBC              1                /* Typically, flash devices */
  37#define US_SC_8020             2                /* CD-ROM */
  38#define US_SC_QIC              3                /* QIC-157 Tapes */
  39#define US_SC_UFI              4                /* Floppy */
  40#define US_SC_8070             5                /* Removable media */
  41#define US_SC_SCSI             6                /* Transparent */
  42#define US_SC_MIN              US_SC_RBC
  43#define US_SC_MAX              US_SC_SCSI
  44
  45/* STORAGE Protocols */
  46#define US_PR_CB               1                /* Control/Bulk w/o interrupt */
  47#define US_PR_CBI              0                /* Control/Bulk/Interrupt */
  48#define US_PR_BULK             0x50             /* bulk only */
  49
  50/* USB types */
  51#define USB_TYPE_STANDARD   (0x00 << 5)
  52#define USB_TYPE_CLASS      (0x01 << 5)
  53#define USB_TYPE_VENDOR     (0x02 << 5)
  54#define USB_TYPE_RESERVED   (0x03 << 5)
  55
  56/* USB recipients */
  57#define USB_RECIP_DEVICE      0x00
  58#define USB_RECIP_INTERFACE   0x01
  59#define USB_RECIP_ENDPOINT    0x02
  60#define USB_RECIP_OTHER       0x03
  61
  62/* USB directions */
  63#define USB_DIR_OUT           0
  64#define USB_DIR_IN            0x80
  65
  66/*
  67 * bmRequestType: USB Device Requests, table 9.2 USB 2.0 spec.
  68 * (shifted) direction/type/recipient.
  69 */
  70#define DeviceRequest \
  71        ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE) << 8)
  72
  73#define DeviceOutRequest \
  74        ((USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE) << 8)
  75
  76#define InterfaceRequest \
  77        ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8)
  78
  79#define EndpointRequest \
  80        ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8)
  81
  82#define EndpointOutRequest \
  83        ((USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8)
  84
  85/* Descriptor types */
  86#define USB_DT_DEVICE        0x01
  87#define USB_DT_CONFIG        0x02
  88#define USB_DT_STRING        0x03
  89#define USB_DT_INTERFACE     0x04
  90#define USB_DT_ENDPOINT      0x05
  91
  92#define USB_DT_HID          (USB_TYPE_CLASS | 0x01)
  93#define USB_DT_REPORT       (USB_TYPE_CLASS | 0x02)
  94#define USB_DT_PHYSICAL     (USB_TYPE_CLASS | 0x03)
  95#define USB_DT_HUB          (USB_TYPE_CLASS | 0x09)
  96#define USB_DT_SS_HUB       (USB_TYPE_CLASS | 0x0a)
  97
  98/* Descriptor sizes per descriptor type */
  99#define USB_DT_DEVICE_SIZE      18
 100#define USB_DT_CONFIG_SIZE      9
 101#define USB_DT_INTERFACE_SIZE   9
 102#define USB_DT_ENDPOINT_SIZE    7
 103#define USB_DT_ENDPOINT_AUDIO_SIZE  9   /* Audio extension */
 104#define USB_DT_HUB_NONVAR_SIZE  7
 105#define USB_DT_HID_SIZE         9
 106
 107/* Endpoints */
 108#define USB_ENDPOINT_NUMBER_MASK  0x0f  /* in bEndpointAddress */
 109#define USB_ENDPOINT_DIR_MASK     0x80
 110
 111#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
 112#define USB_ENDPOINT_XFER_CONTROL  0
 113#define USB_ENDPOINT_XFER_ISOC     1
 114#define USB_ENDPOINT_XFER_BULK     2
 115#define USB_ENDPOINT_XFER_INT      3
 116
 117/* USB Packet IDs (PIDs) */
 118#define USB_PID_UNDEF_0             0xf0
 119#define USB_PID_OUT                 0xe1
 120#define USB_PID_ACK                 0xd2
 121#define USB_PID_DATA0               0xc3
 122#define USB_PID_UNDEF_4             0xb4
 123#define USB_PID_SOF                 0xa5
 124#define USB_PID_UNDEF_6             0x96
 125#define USB_PID_UNDEF_7             0x87
 126#define USB_PID_UNDEF_8             0x78
 127#define USB_PID_IN                  0x69
 128#define USB_PID_NAK                 0x5a
 129#define USB_PID_DATA1               0x4b
 130#define USB_PID_PREAMBLE            0x3c
 131#define USB_PID_SETUP               0x2d
 132#define USB_PID_STALL               0x1e
 133#define USB_PID_UNDEF_F             0x0f
 134
 135/* Standard requests */
 136#define USB_REQ_GET_STATUS          0x00
 137#define USB_REQ_CLEAR_FEATURE       0x01
 138#define USB_REQ_SET_FEATURE         0x03
 139#define USB_REQ_SET_ADDRESS         0x05
 140#define USB_REQ_GET_DESCRIPTOR      0x06
 141#define USB_REQ_SET_DESCRIPTOR      0x07
 142#define USB_REQ_GET_CONFIGURATION   0x08
 143#define USB_REQ_SET_CONFIGURATION   0x09
 144#define USB_REQ_GET_INTERFACE       0x0A
 145#define USB_REQ_SET_INTERFACE       0x0B
 146#define USB_REQ_SYNCH_FRAME         0x0C
 147
 148/* HID requests */
 149#define USB_REQ_GET_REPORT          0x01
 150#define USB_REQ_GET_IDLE            0x02
 151#define USB_REQ_GET_PROTOCOL        0x03
 152#define USB_REQ_SET_REPORT          0x09
 153#define USB_REQ_SET_IDLE            0x0A
 154#define USB_REQ_SET_PROTOCOL        0x0B
 155
 156/* Device features */
 157#define USB_FEAT_HALT               0x00
 158#define USB_FEAT_WAKEUP             0x01
 159#define USB_FEAT_TEST               0x02
 160
 161/* Test modes */
 162#define USB_TEST_MODE_J             0x01
 163#define USB_TEST_MODE_K             0x02
 164#define USB_TEST_MODE_SE0_NAK       0x03
 165#define USB_TEST_MODE_PACKET        0x04
 166#define USB_TEST_MODE_FORCE_ENABLE  0x05
 167
 168
 169/*
 170 * "pipe" definitions, use unsigned so we can compare reliably, since this
 171 * value is shifted up to bits 30/31.
 172 */
 173#define PIPE_ISOCHRONOUS    0U
 174#define PIPE_INTERRUPT      1U
 175#define PIPE_CONTROL        2U
 176#define PIPE_BULK           3U
 177#define PIPE_DEVEP_MASK     0x0007ff00
 178
 179#define USB_ISOCHRONOUS    0
 180#define USB_INTERRUPT      1
 181#define USB_CONTROL        2
 182#define USB_BULK           3
 183
 184#define USB_PIPE_TYPE_SHIFT     30
 185#define USB_PIPE_TYPE_MASK      (3 << USB_PIPE_TYPE_SHIFT)
 186
 187#define USB_PIPE_DEV_SHIFT      8
 188#define USB_PIPE_DEV_MASK       (0x7f << USB_PIPE_DEV_SHIFT)
 189
 190#define USB_PIPE_EP_SHIFT       15
 191#define USB_PIPE_EP_MASK        (0xf << USB_PIPE_EP_SHIFT)
 192
 193/* USB-status codes: */
 194#define USB_ST_ACTIVE           0x1             /* TD is active */
 195#define USB_ST_STALLED          0x2             /* TD is stalled */
 196#define USB_ST_BUF_ERR          0x4             /* buffer error */
 197#define USB_ST_BABBLE_DET       0x8             /* Babble detected */
 198#define USB_ST_NAK_REC          0x10    /* NAK Received*/
 199#define USB_ST_CRC_ERR          0x20    /* CRC/timeout Error */
 200#define USB_ST_BIT_ERR          0x40    /* Bitstuff error */
 201#define USB_ST_NOT_PROC         0x80000000L     /* Not yet processed */
 202
 203
 204/*************************************************************************
 205 * Hub defines
 206 */
 207
 208/*
 209 * Hub request types
 210 */
 211
 212#define USB_RT_HUB      (USB_TYPE_CLASS | USB_RECIP_DEVICE)
 213#define USB_RT_PORT     (USB_TYPE_CLASS | USB_RECIP_OTHER)
 214
 215/*
 216 * Hub Class feature numbers
 217 */
 218#define C_HUB_LOCAL_POWER   0
 219#define C_HUB_OVER_CURRENT  1
 220
 221/*
 222 * Port feature numbers
 223 */
 224#define USB_PORT_FEAT_CONNECTION     0
 225#define USB_PORT_FEAT_ENABLE         1
 226#define USB_PORT_FEAT_SUSPEND        2
 227#define USB_PORT_FEAT_OVER_CURRENT   3
 228#define USB_PORT_FEAT_RESET          4
 229#define USB_PORT_FEAT_POWER          8
 230#define USB_PORT_FEAT_LOWSPEED       9
 231#define USB_PORT_FEAT_HIGHSPEED      10
 232#define USB_PORT_FEAT_C_CONNECTION   16
 233#define USB_PORT_FEAT_C_ENABLE       17
 234#define USB_PORT_FEAT_C_SUSPEND      18
 235#define USB_PORT_FEAT_C_OVER_CURRENT 19
 236#define USB_PORT_FEAT_C_RESET        20
 237#define USB_PORT_FEAT_TEST           21
 238
 239/*
 240 * Changes to Port feature numbers for Super speed,
 241 * from USB 3.0 spec Table 10-8
 242 */
 243#define USB_SS_PORT_FEAT_U1_TIMEOUT     23
 244#define USB_SS_PORT_FEAT_U2_TIMEOUT     24
 245#define USB_SS_PORT_FEAT_C_LINK_STATE   25
 246#define USB_SS_PORT_FEAT_C_CONFIG_ERROR 26
 247#define USB_SS_PORT_FEAT_BH_RESET       28
 248#define USB_SS_PORT_FEAT_C_BH_RESET     29
 249
 250/* wPortStatus bits */
 251#define USB_PORT_STAT_CONNECTION    0x0001
 252#define USB_PORT_STAT_ENABLE        0x0002
 253#define USB_PORT_STAT_SUSPEND       0x0004
 254#define USB_PORT_STAT_OVERCURRENT   0x0008
 255#define USB_PORT_STAT_RESET         0x0010
 256#define USB_PORT_STAT_POWER         0x0100
 257#define USB_PORT_STAT_LOW_SPEED     0x0200
 258#define USB_PORT_STAT_HIGH_SPEED    0x0400      /* support for EHCI */
 259#define USB_PORT_STAT_SUPER_SPEED   0x0600      /* faking support to XHCI */
 260#define USB_PORT_STAT_SPEED_MASK        \
 261        (USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED)
 262
 263/*
 264 * Changes to wPortStatus bit field in USB 3.0
 265 * See USB 3.0 spec Table 10-10
 266 */
 267#define USB_SS_PORT_STAT_LINK_STATE     0x01e0
 268#define USB_SS_PORT_STAT_POWER          0x0200
 269#define USB_SS_PORT_STAT_SPEED          0x1c00
 270#define USB_SS_PORT_STAT_SPEED_5GBPS    0x0000
 271/* Bits that are the same from USB 2.0 */
 272#define USB_SS_PORT_STAT_MASK           (USB_PORT_STAT_CONNECTION | \
 273                                         USB_PORT_STAT_ENABLE | \
 274                                         USB_PORT_STAT_OVERCURRENT | \
 275                                         USB_PORT_STAT_RESET)
 276
 277/* wPortChange bits */
 278#define USB_PORT_STAT_C_CONNECTION  0x0001
 279#define USB_PORT_STAT_C_ENABLE      0x0002
 280#define USB_PORT_STAT_C_SUSPEND     0x0004
 281#define USB_PORT_STAT_C_OVERCURRENT 0x0008
 282#define USB_PORT_STAT_C_RESET       0x0010
 283
 284/*
 285 * Changes to wPortChange bit fields in USB 3.0
 286 * See USB 3.0 spec Table 10-12
 287 */
 288#define USB_SS_PORT_STAT_C_BH_RESET     0x0020
 289#define USB_SS_PORT_STAT_C_LINK_STATE   0x0040
 290#define USB_SS_PORT_STAT_C_CONFIG_ERROR 0x0080
 291
 292/* wHubCharacteristics (masks) */
 293#define HUB_CHAR_LPSM               0x0003
 294#define HUB_CHAR_COMPOUND           0x0004
 295#define HUB_CHAR_OCPM               0x0018
 296#define HUB_CHAR_TTTT               0x0060 /* TT Think Time mask */
 297
 298/*
 299 * Hub Status & Hub Change bit masks
 300 */
 301#define HUB_STATUS_LOCAL_POWER  0x0001
 302#define HUB_STATUS_OVERCURRENT  0x0002
 303
 304#define HUB_CHANGE_LOCAL_POWER  0x0001
 305#define HUB_CHANGE_OVERCURRENT  0x0002
 306
 307/* Mask for wIndex in get/set port feature */
 308#define USB_HUB_PORT_MASK       0xf
 309
 310/* Hub class request codes */
 311#define USB_REQ_SET_HUB_DEPTH   0x0c
 312
 313/*
 314 * As of USB 2.0, full/low speed devices are segregated into trees.
 315 * One type grows from USB 1.1 host controllers (OHCI, UHCI etc).
 316 * The other type grows from high speed hubs when they connect to
 317 * full/low speed devices using "Transaction Translators" (TTs).
 318 */
 319struct usb_tt {
 320        bool            multi;          /* true means one TT per port */
 321        unsigned        think_time;     /* think time in ns */
 322};
 323
 324/*
 325 * CBI style
 326 */
 327
 328#define US_CBI_ADSC             0
 329
 330/* Command Block Wrapper */
 331struct umass_bbb_cbw {
 332        __u32           dCBWSignature;
 333#       define CBWSIGNATURE     0x43425355
 334        __u32           dCBWTag;
 335        __u32           dCBWDataTransferLength;
 336        __u8            bCBWFlags;
 337#       define CBWFLAGS_OUT     0x00
 338#       define CBWFLAGS_IN      0x80
 339#       define CBWFLAGS_SBZ     0x7f
 340        __u8            bCBWLUN;
 341        __u8            bCDBLength;
 342#       define CBWCDBLENGTH     16
 343        __u8            CBWCDB[CBWCDBLENGTH];
 344};
 345#define UMASS_BBB_CBW_SIZE      31
 346
 347/* Command Status Wrapper */
 348struct umass_bbb_csw {
 349        __u32           dCSWSignature;
 350#       define CSWSIGNATURE     0x53425355
 351        __u32           dCSWTag;
 352        __u32           dCSWDataResidue;
 353        __u8            bCSWStatus;
 354#       define CSWSTATUS_GOOD   0x0
 355#       define CSWSTATUS_FAILED 0x1
 356#       define CSWSTATUS_PHASE  0x2
 357};
 358#define UMASS_BBB_CSW_SIZE      13
 359
 360/*
 361 * BULK only
 362 */
 363#define US_BBB_RESET            0xff
 364#define US_BBB_GET_MAX_LUN      0xfe
 365
 366#endif /*_USB_DEFS_H_ */
 367