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
  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-11
 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
 271/* wPortChange bits */
 272#define USB_PORT_STAT_C_CONNECTION  0x0001
 273#define USB_PORT_STAT_C_ENABLE      0x0002
 274#define USB_PORT_STAT_C_SUSPEND     0x0004
 275#define USB_PORT_STAT_C_OVERCURRENT 0x0008
 276#define USB_PORT_STAT_C_RESET       0x0010
 277
 278/*
 279 * Changes to wPortChange bit fields in USB 3.0
 280 * See USB 3.0 spec Table 10-12
 281 */
 282#define USB_SS_PORT_STAT_C_BH_RESET     0x0020
 283#define USB_SS_PORT_STAT_C_LINK_STATE   0x0040
 284#define USB_SS_PORT_STAT_C_CONFIG_ERROR 0x0080
 285
 286/* wHubCharacteristics (masks) */
 287#define HUB_CHAR_LPSM               0x0003
 288#define HUB_CHAR_COMPOUND           0x0004
 289#define HUB_CHAR_OCPM               0x0018
 290
 291/*
 292 * Hub Status & Hub Change bit masks
 293 */
 294#define HUB_STATUS_LOCAL_POWER  0x0001
 295#define HUB_STATUS_OVERCURRENT  0x0002
 296
 297#define HUB_CHANGE_LOCAL_POWER  0x0001
 298#define HUB_CHANGE_OVERCURRENT  0x0002
 299
 300/* Mask for wIndex in get/set port feature */
 301#define USB_HUB_PORT_MASK       0xf
 302
 303/*
 304 * CBI style
 305 */
 306
 307#define US_CBI_ADSC             0
 308
 309/* Command Block Wrapper */
 310struct umass_bbb_cbw {
 311        __u32           dCBWSignature;
 312#       define CBWSIGNATURE     0x43425355
 313        __u32           dCBWTag;
 314        __u32           dCBWDataTransferLength;
 315        __u8            bCBWFlags;
 316#       define CBWFLAGS_OUT     0x00
 317#       define CBWFLAGS_IN      0x80
 318#       define CBWFLAGS_SBZ     0x7f
 319        __u8            bCBWLUN;
 320        __u8            bCDBLength;
 321#       define CBWCDBLENGTH     16
 322        __u8            CBWCDB[CBWCDBLENGTH];
 323};
 324#define UMASS_BBB_CBW_SIZE      31
 325
 326/* Command Status Wrapper */
 327struct umass_bbb_csw {
 328        __u32           dCSWSignature;
 329#       define CSWSIGNATURE     0x53425355
 330        __u32           dCSWTag;
 331        __u32           dCSWDataResidue;
 332        __u8            bCSWStatus;
 333#       define CSWSTATUS_GOOD   0x0
 334#       define CSWSTATUS_FAILED 0x1
 335#       define CSWSTATUS_PHASE  0x2
 336};
 337#define UMASS_BBB_CSW_SIZE      13
 338
 339/*
 340 * BULK only
 341 */
 342#define US_BBB_RESET            0xff
 343#define US_BBB_GET_MAX_LUN      0xfe
 344
 345#endif /*_USB_DEFS_H_ */
 346