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