1*012771d8Swdenk /* 2*012771d8Swdenk * (C) Copyright 2001 3*012771d8Swdenk * Denis Peter, MPL AG Switzerland 4*012771d8Swdenk * 5*012771d8Swdenk * See file CREDITS for list of people who contributed to this 6*012771d8Swdenk * project. 7*012771d8Swdenk * 8*012771d8Swdenk * This program is free software; you can redistribute it and/or 9*012771d8Swdenk * modify it under the terms of the GNU General Public License as 10*012771d8Swdenk * published by the Free Software Foundation; either version 2 of 11*012771d8Swdenk * the License, or (at your option) any later version. 12*012771d8Swdenk * 13*012771d8Swdenk * This program is distributed in the hope that it will be useful, 14*012771d8Swdenk * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*012771d8Swdenk * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*012771d8Swdenk * GNU General Public License for more details. 17*012771d8Swdenk * 18*012771d8Swdenk * You should have received a copy of the GNU General Public License 19*012771d8Swdenk * along with this program; if not, write to the Free Software 20*012771d8Swdenk * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*012771d8Swdenk * MA 02111-1307 USA 22*012771d8Swdenk * 23*012771d8Swdenk * Note: Part of this code has been derived from linux 24*012771d8Swdenk * 25*012771d8Swdenk */ 26*012771d8Swdenk #ifndef _USB_DEFS_H_ 27*012771d8Swdenk #define _USB_DEFS_H_ 28*012771d8Swdenk 29*012771d8Swdenk 30*012771d8Swdenk /* Everything is aribtrary */ 31*012771d8Swdenk #define USB_ALTSETTINGALLOC 4 32*012771d8Swdenk #define USB_MAXALTSETTING 128 /* Hard limit */ 33*012771d8Swdenk 34*012771d8Swdenk #define USB_MAX_DEVICE 32 35*012771d8Swdenk #define USB_MAXCONFIG 8 36*012771d8Swdenk #define USB_MAXINTERFACES 8 37*012771d8Swdenk #define USB_MAXENDPOINTS 16 38*012771d8Swdenk #define USB_MAXCHILDREN 8 /* This is arbitrary */ 39*012771d8Swdenk #define USB_MAX_HUB 16 40*012771d8Swdenk 41*012771d8Swdenk #define USB_CNTL_TIMEOUT 100 /* 100ms timeout */ 42*012771d8Swdenk 43*012771d8Swdenk /* USB constants */ 44*012771d8Swdenk 45*012771d8Swdenk /* Device and/or Interface Class codes */ 46*012771d8Swdenk #define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ 47*012771d8Swdenk #define USB_CLASS_AUDIO 1 48*012771d8Swdenk #define USB_CLASS_COMM 2 49*012771d8Swdenk #define USB_CLASS_HID 3 50*012771d8Swdenk #define USB_CLASS_PRINTER 7 51*012771d8Swdenk #define USB_CLASS_MASS_STORAGE 8 52*012771d8Swdenk #define USB_CLASS_HUB 9 53*012771d8Swdenk #define USB_CLASS_DATA 10 54*012771d8Swdenk #define USB_CLASS_VENDOR_SPEC 0xff 55*012771d8Swdenk 56*012771d8Swdenk /* some HID sub classes */ 57*012771d8Swdenk #define USB_SUB_HID_NONE 0 58*012771d8Swdenk #define USB_SUB_HID_BOOT 1 59*012771d8Swdenk 60*012771d8Swdenk /* some UID Protocols */ 61*012771d8Swdenk #define USB_PROT_HID_NONE 0 62*012771d8Swdenk #define USB_PROT_HID_KEYBOARD 1 63*012771d8Swdenk #define USB_PROT_HID_MOUSE 2 64*012771d8Swdenk 65*012771d8Swdenk 66*012771d8Swdenk /* Sub STORAGE Classes */ 67*012771d8Swdenk #define US_SC_RBC 1 /* Typically, flash devices */ 68*012771d8Swdenk #define US_SC_8020 2 /* CD-ROM */ 69*012771d8Swdenk #define US_SC_QIC 3 /* QIC-157 Tapes */ 70*012771d8Swdenk #define US_SC_UFI 4 /* Floppy */ 71*012771d8Swdenk #define US_SC_8070 5 /* Removable media */ 72*012771d8Swdenk #define US_SC_SCSI 6 /* Transparent */ 73*012771d8Swdenk #define US_SC_MIN US_SC_RBC 74*012771d8Swdenk #define US_SC_MAX US_SC_SCSI 75*012771d8Swdenk 76*012771d8Swdenk /* STORAGE Protocols */ 77*012771d8Swdenk #define US_PR_CB 1 /* Control/Bulk w/o interrupt */ 78*012771d8Swdenk #define US_PR_CBI 0 /* Control/Bulk/Interrupt */ 79*012771d8Swdenk #define US_PR_BULK 0x50 /* bulk only */ 80*012771d8Swdenk 81*012771d8Swdenk /* USB types */ 82*012771d8Swdenk #define USB_TYPE_STANDARD (0x00 << 5) 83*012771d8Swdenk #define USB_TYPE_CLASS (0x01 << 5) 84*012771d8Swdenk #define USB_TYPE_VENDOR (0x02 << 5) 85*012771d8Swdenk #define USB_TYPE_RESERVED (0x03 << 5) 86*012771d8Swdenk 87*012771d8Swdenk /* USB recipients */ 88*012771d8Swdenk #define USB_RECIP_DEVICE 0x00 89*012771d8Swdenk #define USB_RECIP_INTERFACE 0x01 90*012771d8Swdenk #define USB_RECIP_ENDPOINT 0x02 91*012771d8Swdenk #define USB_RECIP_OTHER 0x03 92*012771d8Swdenk 93*012771d8Swdenk /* USB directions */ 94*012771d8Swdenk #define USB_DIR_OUT 0 95*012771d8Swdenk #define USB_DIR_IN 0x80 96*012771d8Swdenk 97*012771d8Swdenk /* Descriptor types */ 98*012771d8Swdenk #define USB_DT_DEVICE 0x01 99*012771d8Swdenk #define USB_DT_CONFIG 0x02 100*012771d8Swdenk #define USB_DT_STRING 0x03 101*012771d8Swdenk #define USB_DT_INTERFACE 0x04 102*012771d8Swdenk #define USB_DT_ENDPOINT 0x05 103*012771d8Swdenk 104*012771d8Swdenk #define USB_DT_HID (USB_TYPE_CLASS | 0x01) 105*012771d8Swdenk #define USB_DT_REPORT (USB_TYPE_CLASS | 0x02) 106*012771d8Swdenk #define USB_DT_PHYSICAL (USB_TYPE_CLASS | 0x03) 107*012771d8Swdenk #define USB_DT_HUB (USB_TYPE_CLASS | 0x09) 108*012771d8Swdenk 109*012771d8Swdenk /* Descriptor sizes per descriptor type */ 110*012771d8Swdenk #define USB_DT_DEVICE_SIZE 18 111*012771d8Swdenk #define USB_DT_CONFIG_SIZE 9 112*012771d8Swdenk #define USB_DT_INTERFACE_SIZE 9 113*012771d8Swdenk #define USB_DT_ENDPOINT_SIZE 7 114*012771d8Swdenk #define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ 115*012771d8Swdenk #define USB_DT_HUB_NONVAR_SIZE 7 116*012771d8Swdenk #define USB_DT_HID_SIZE 9 117*012771d8Swdenk 118*012771d8Swdenk /* Endpoints */ 119*012771d8Swdenk #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ 120*012771d8Swdenk #define USB_ENDPOINT_DIR_MASK 0x80 121*012771d8Swdenk 122*012771d8Swdenk #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ 123*012771d8Swdenk #define USB_ENDPOINT_XFER_CONTROL 0 124*012771d8Swdenk #define USB_ENDPOINT_XFER_ISOC 1 125*012771d8Swdenk #define USB_ENDPOINT_XFER_BULK 2 126*012771d8Swdenk #define USB_ENDPOINT_XFER_INT 3 127*012771d8Swdenk 128*012771d8Swdenk /* USB Packet IDs (PIDs) */ 129*012771d8Swdenk #define USB_PID_UNDEF_0 0xf0 130*012771d8Swdenk #define USB_PID_OUT 0xe1 131*012771d8Swdenk #define USB_PID_ACK 0xd2 132*012771d8Swdenk #define USB_PID_DATA0 0xc3 133*012771d8Swdenk #define USB_PID_UNDEF_4 0xb4 134*012771d8Swdenk #define USB_PID_SOF 0xa5 135*012771d8Swdenk #define USB_PID_UNDEF_6 0x96 136*012771d8Swdenk #define USB_PID_UNDEF_7 0x87 137*012771d8Swdenk #define USB_PID_UNDEF_8 0x78 138*012771d8Swdenk #define USB_PID_IN 0x69 139*012771d8Swdenk #define USB_PID_NAK 0x5a 140*012771d8Swdenk #define USB_PID_DATA1 0x4b 141*012771d8Swdenk #define USB_PID_PREAMBLE 0x3c 142*012771d8Swdenk #define USB_PID_SETUP 0x2d 143*012771d8Swdenk #define USB_PID_STALL 0x1e 144*012771d8Swdenk #define USB_PID_UNDEF_F 0x0f 145*012771d8Swdenk 146*012771d8Swdenk /* Standard requests */ 147*012771d8Swdenk #define USB_REQ_GET_STATUS 0x00 148*012771d8Swdenk #define USB_REQ_CLEAR_FEATURE 0x01 149*012771d8Swdenk #define USB_REQ_SET_FEATURE 0x03 150*012771d8Swdenk #define USB_REQ_SET_ADDRESS 0x05 151*012771d8Swdenk #define USB_REQ_GET_DESCRIPTOR 0x06 152*012771d8Swdenk #define USB_REQ_SET_DESCRIPTOR 0x07 153*012771d8Swdenk #define USB_REQ_GET_CONFIGURATION 0x08 154*012771d8Swdenk #define USB_REQ_SET_CONFIGURATION 0x09 155*012771d8Swdenk #define USB_REQ_GET_INTERFACE 0x0A 156*012771d8Swdenk #define USB_REQ_SET_INTERFACE 0x0B 157*012771d8Swdenk #define USB_REQ_SYNCH_FRAME 0x0C 158*012771d8Swdenk 159*012771d8Swdenk /* HID requests */ 160*012771d8Swdenk #define USB_REQ_GET_REPORT 0x01 161*012771d8Swdenk #define USB_REQ_GET_IDLE 0x02 162*012771d8Swdenk #define USB_REQ_GET_PROTOCOL 0x03 163*012771d8Swdenk #define USB_REQ_SET_REPORT 0x09 164*012771d8Swdenk #define USB_REQ_SET_IDLE 0x0A 165*012771d8Swdenk #define USB_REQ_SET_PROTOCOL 0x0B 166*012771d8Swdenk 167*012771d8Swdenk 168*012771d8Swdenk /* "pipe" definitions */ 169*012771d8Swdenk 170*012771d8Swdenk #define PIPE_ISOCHRONOUS 0 171*012771d8Swdenk #define PIPE_INTERRUPT 1 172*012771d8Swdenk #define PIPE_CONTROL 2 173*012771d8Swdenk #define PIPE_BULK 3 174*012771d8Swdenk #define PIPE_DEVEP_MASK 0x0007ff00 175*012771d8Swdenk 176*012771d8Swdenk #define USB_ISOCHRONOUS 0 177*012771d8Swdenk #define USB_INTERRUPT 1 178*012771d8Swdenk #define USB_CONTROL 2 179*012771d8Swdenk #define USB_BULK 3 180*012771d8Swdenk 181*012771d8Swdenk /* USB-status codes: */ 182*012771d8Swdenk #define USB_ST_ACTIVE 0x1 /* TD is active */ 183*012771d8Swdenk #define USB_ST_STALLED 0x2 /* TD is stalled */ 184*012771d8Swdenk #define USB_ST_BUF_ERR 0x4 /* buffer error */ 185*012771d8Swdenk #define USB_ST_BABBLE_DET 0x8 /* Babble detected */ 186*012771d8Swdenk #define USB_ST_NAK_REC 0x10 /* NAK Received*/ 187*012771d8Swdenk #define USB_ST_CRC_ERR 0x20 /* CRC/timeout Error */ 188*012771d8Swdenk #define USB_ST_BIT_ERR 0x40 /* Bitstuff error */ 189*012771d8Swdenk #define USB_ST_NOT_PROC 0x80000000L /* Not yet processed */ 190*012771d8Swdenk 191*012771d8Swdenk 192*012771d8Swdenk 193*012771d8Swdenk /************************************************************************* 194*012771d8Swdenk * Hub defines 195*012771d8Swdenk */ 196*012771d8Swdenk 197*012771d8Swdenk /* 198*012771d8Swdenk * Hub request types 199*012771d8Swdenk */ 200*012771d8Swdenk 201*012771d8Swdenk #define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE) 202*012771d8Swdenk #define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER) 203*012771d8Swdenk 204*012771d8Swdenk /* 205*012771d8Swdenk * Hub Class feature numbers 206*012771d8Swdenk */ 207*012771d8Swdenk #define C_HUB_LOCAL_POWER 0 208*012771d8Swdenk #define C_HUB_OVER_CURRENT 1 209*012771d8Swdenk 210*012771d8Swdenk /* 211*012771d8Swdenk * Port feature numbers 212*012771d8Swdenk */ 213*012771d8Swdenk #define USB_PORT_FEAT_CONNECTION 0 214*012771d8Swdenk #define USB_PORT_FEAT_ENABLE 1 215*012771d8Swdenk #define USB_PORT_FEAT_SUSPEND 2 216*012771d8Swdenk #define USB_PORT_FEAT_OVER_CURRENT 3 217*012771d8Swdenk #define USB_PORT_FEAT_RESET 4 218*012771d8Swdenk #define USB_PORT_FEAT_POWER 8 219*012771d8Swdenk #define USB_PORT_FEAT_LOWSPEED 9 220*012771d8Swdenk #define USB_PORT_FEAT_C_CONNECTION 16 221*012771d8Swdenk #define USB_PORT_FEAT_C_ENABLE 17 222*012771d8Swdenk #define USB_PORT_FEAT_C_SUSPEND 18 223*012771d8Swdenk #define USB_PORT_FEAT_C_OVER_CURRENT 19 224*012771d8Swdenk #define USB_PORT_FEAT_C_RESET 20 225*012771d8Swdenk 226*012771d8Swdenk /* wPortStatus bits */ 227*012771d8Swdenk #define USB_PORT_STAT_CONNECTION 0x0001 228*012771d8Swdenk #define USB_PORT_STAT_ENABLE 0x0002 229*012771d8Swdenk #define USB_PORT_STAT_SUSPEND 0x0004 230*012771d8Swdenk #define USB_PORT_STAT_OVERCURRENT 0x0008 231*012771d8Swdenk #define USB_PORT_STAT_RESET 0x0010 232*012771d8Swdenk #define USB_PORT_STAT_POWER 0x0100 233*012771d8Swdenk #define USB_PORT_STAT_LOW_SPEED 0x0200 234*012771d8Swdenk 235*012771d8Swdenk /* wPortChange bits */ 236*012771d8Swdenk #define USB_PORT_STAT_C_CONNECTION 0x0001 237*012771d8Swdenk #define USB_PORT_STAT_C_ENABLE 0x0002 238*012771d8Swdenk #define USB_PORT_STAT_C_SUSPEND 0x0004 239*012771d8Swdenk #define USB_PORT_STAT_C_OVERCURRENT 0x0008 240*012771d8Swdenk #define USB_PORT_STAT_C_RESET 0x0010 241*012771d8Swdenk 242*012771d8Swdenk /* wHubCharacteristics (masks) */ 243*012771d8Swdenk #define HUB_CHAR_LPSM 0x0003 244*012771d8Swdenk #define HUB_CHAR_COMPOUND 0x0004 245*012771d8Swdenk #define HUB_CHAR_OCPM 0x0018 246*012771d8Swdenk 247*012771d8Swdenk /* 248*012771d8Swdenk *Hub Status & Hub Change bit masks 249*012771d8Swdenk */ 250*012771d8Swdenk #define HUB_STATUS_LOCAL_POWER 0x0001 251*012771d8Swdenk #define HUB_STATUS_OVERCURRENT 0x0002 252*012771d8Swdenk 253*012771d8Swdenk #define HUB_CHANGE_LOCAL_POWER 0x0001 254*012771d8Swdenk #define HUB_CHANGE_OVERCURRENT 0x0002 255*012771d8Swdenk 256*012771d8Swdenk #endif /*_USB_DEFS_H_ */ 257