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