[7] | 1 | ;;; -*- asm -*-
|
---|
| 2 | ;;;
|
---|
| 3 | ;;;-----------------------------------------------------------------------------
|
---|
| 4 | ;;; USB Descriptor(s)
|
---|
| 5 | ;;;-----------------------------------------------------------------------------
|
---|
| 6 | ;;; Copyright 2005..2007 Kolja Waschk, ixo.de
|
---|
| 7 | ;;; Modified by LAP for FPGA4U project, Jan 2007. lap.epfl.ch
|
---|
| 8 | ;;;-----------------------------------------------------------------------------
|
---|
| 9 | ;;; Code based on USRP2 firmware (GNU Radio Project), version 3.0.2,
|
---|
| 10 | ;;; Copyright 2003 Free Software Foundation, Inc.
|
---|
| 11 | ;;;-----------------------------------------------------------------------------
|
---|
| 12 | ;;; This code is part of usbjtag. usbjtag is free software; you can redistribute
|
---|
| 13 | ;;; it and/or modify it under the terms of the GNU General Public License as
|
---|
| 14 | ;;; published by the Free Software Foundation; either version 2 of the License,
|
---|
| 15 | ;;; or (at your option) any later version. usbjtag is distributed in the hope
|
---|
| 16 | ;;; that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
---|
| 17 | ;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 18 | ;;; GNU General Public License for more details. You should have received a
|
---|
| 19 | ;;; copy of the GNU General Public License along with this program in the file
|
---|
| 20 | ;;; COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
---|
| 21 | ;;; St, Fifth Floor, Boston, MA 02110-1301 USA
|
---|
| 22 | ;;;-----------------------------------------------------------------------------
|
---|
| 23 |
|
---|
| 24 | .module usb_descriptors
|
---|
| 25 |
|
---|
| 26 | VID = 0x09FB ; Changed by LAP to match Altera VID
|
---|
| 27 | PID = 0x6001 ; Changed by LAP to match Altera USBBlaster PID
|
---|
| 28 | VERSION = 0x0400 ; Product Version (4 indicates *BM device)
|
---|
| 29 | USB_VER = 0x0110 ; Support USB version 1.10
|
---|
| 30 | USB_ATTR = 0x80 ; Bus powered, not self-powered, no remote wakeup
|
---|
| 31 | FTD_ATTR = 0x001C ; Set USB version, use version string, enable suspend PD
|
---|
| 32 | MAX_POWER = 75 ; need 2*75 mA max
|
---|
| 33 |
|
---|
| 34 | DSCR_DEVICE = 1 ; Descriptor type: Device
|
---|
| 35 | DSCR_CONFIG = 2 ; Descriptor type: Configuration
|
---|
| 36 | DSCR_STRING = 3 ; Descriptor type: String
|
---|
| 37 | DSCR_INTRFC = 4 ; Descriptor type: Interface
|
---|
| 38 | DSCR_ENDPNT = 5 ; Descriptor type: Endpoint
|
---|
| 39 | DSCR_DEVQUAL = 6 ; Descriptor type: Device Qualifier
|
---|
| 40 |
|
---|
| 41 | DSCR_DEVICE_LEN = 18
|
---|
| 42 | DSCR_CONFIG_LEN = 9
|
---|
| 43 | DSCR_INTRFC_LEN = 9
|
---|
| 44 | DSCR_ENDPNT_LEN = 7
|
---|
| 45 | DSCR_DEVQUAL_LEN = 10
|
---|
| 46 |
|
---|
| 47 | ET_CONTROL = 0 ; Endpoint type: Control
|
---|
| 48 | ET_ISO = 1 ; Endpoint type: Isochronous
|
---|
| 49 | ET_BULK = 2 ; Endpoint type: Bulk
|
---|
| 50 | ET_INT = 3 ; Endpoint type: Interrupt
|
---|
| 51 |
|
---|
| 52 | ;;; --------------------------------------------------------
|
---|
| 53 | ;;; external ram data
|
---|
| 54 | ;;;--------------------------------------------------------
|
---|
| 55 |
|
---|
| 56 | .area USBDESCSEG (XDATA)
|
---|
| 57 |
|
---|
| 58 | ;;; ----------------------------------------------------------------
|
---|
| 59 | ;;; descriptors used when operating at high speed (480Mb/sec)
|
---|
| 60 | ;;; ----------------------------------------------------------------
|
---|
| 61 |
|
---|
| 62 | .even ; descriptors must be 2-byte aligned for SUDPTR{H,L} to work
|
---|
| 63 |
|
---|
| 64 | ;; The .even directive isn't really honored by the linker. Bummer!
|
---|
| 65 | ;; (There's no way to specify an alignment requirement for a given area,
|
---|
| 66 | ;; hence when they're concatenated together, even doesn't work.)
|
---|
| 67 | ;;
|
---|
| 68 | ;; We work around this by telling the linker to put USBDESCSEG
|
---|
| 69 | ;; at 0xE000 absolute. This means that the maximimum length of this
|
---|
| 70 | ;; segment is 480 bytes, leaving room for the two hash slots
|
---|
| 71 | ;; at 0xE1EO to 0xE1FF.
|
---|
| 72 | ;; Note from LAP: TODOOOOO
|
---|
| 73 |
|
---|
| 74 | _high_speed_device_descr::
|
---|
| 75 | .db DSCR_DEVICE_LEN
|
---|
| 76 | .db DSCR_DEVICE
|
---|
| 77 | _dscr_usbver::
|
---|
| 78 | .db <USB_VER ; Specification version (LSB)
|
---|
| 79 | .db >USB_VER ; Specification version (MSB)
|
---|
| 80 | .db 0x00 ; device class (vendor specific)
|
---|
| 81 | .db 0x00 ; device subclass (vendor specific)
|
---|
| 82 | .db 0x00 ; device protocol (vendor specific)
|
---|
| 83 | .db 64 ; bMaxPacketSize0 for endpoint 0
|
---|
| 84 | _dscr_vidpidver::
|
---|
| 85 | .db <VID ; idVendor
|
---|
| 86 | .db >VID ; idVendor
|
---|
| 87 | .db <PID ; idProduct
|
---|
| 88 | .db >PID ; idProduct
|
---|
| 89 | .db <VERSION ; bcdDevice
|
---|
| 90 | .db >VERSION ; bcdDevice
|
---|
| 91 | _dscr_strorder::
|
---|
| 92 | .db SI_VENDOR ; iManufacturer (string index)
|
---|
| 93 | .db SI_PRODUCT ; iProduct (string index)
|
---|
| 94 | .db SI_SERIAL ; iSerial number (string index)
|
---|
| 95 | .db 1 ; bNumConfigurations
|
---|
| 96 |
|
---|
| 97 | .even
|
---|
| 98 | _high_speed_devqual_descr::
|
---|
| 99 | .db DSCR_DEVQUAL_LEN
|
---|
| 100 | .db DSCR_DEVQUAL
|
---|
| 101 | .db <USB_VER ; bcdUSB (LSB)
|
---|
| 102 | .db >USB_VER ; bcdUSB (MSB)
|
---|
| 103 | .db 0xFF ; bDeviceClass
|
---|
| 104 | .db 0xFF ; bDeviceSubClass
|
---|
| 105 | .db 0xFF ; bDeviceProtocol
|
---|
| 106 | .db 64 ; bMaxPacketSize0
|
---|
| 107 | .db 1 ; bNumConfigurations (one config at 12Mb/sec)
|
---|
| 108 | .db 0 ; bReserved
|
---|
| 109 |
|
---|
| 110 | .even
|
---|
| 111 | _high_speed_config_descr::
|
---|
| 112 | .db DSCR_CONFIG_LEN
|
---|
| 113 | .db DSCR_CONFIG
|
---|
| 114 | .db <(_high_speed_config_descr_end - _high_speed_config_descr) ; LSB
|
---|
| 115 | .db >(_high_speed_config_descr_end - _high_speed_config_descr) ; MSB
|
---|
| 116 | .db 2 ; bNumInterfaces
|
---|
| 117 | .db 1 ; bConfigurationValue
|
---|
| 118 | .db 0 ; iConfiguration
|
---|
| 119 | _dscr_attrpow::
|
---|
| 120 | .db USB_ATTR ; bmAttributes
|
---|
| 121 | .db MAX_POWER ; bMaxPower [Unit: 0.5 mA]
|
---|
| 122 |
|
---|
| 123 | ;; interface descriptor
|
---|
| 124 |
|
---|
| 125 | .db DSCR_INTRFC_LEN
|
---|
| 126 | .db DSCR_INTRFC
|
---|
| 127 | .db 0 ; bInterfaceNumber (zero based)
|
---|
| 128 | .db 0 ; bAlternateSetting
|
---|
| 129 | .db 2 ; bNumEndpoints
|
---|
| 130 | .db 0xFF ; bInterfaceClass (vendor specific)
|
---|
| 131 | .db 0xFF ; bInterfaceSubClass (vendor specific)
|
---|
| 132 | .db 0xFF ; bInterfaceProtocol (vendor specific)
|
---|
| 133 | .db SI_PRODUCT ; iInterface (description)
|
---|
| 134 |
|
---|
| 135 | ;; endpoint descriptor
|
---|
| 136 |
|
---|
| 137 | .db DSCR_ENDPNT_LEN
|
---|
| 138 | .db DSCR_ENDPNT
|
---|
| 139 | .db 0x81 ; bEndpointAddress (ep 1 IN)
|
---|
| 140 | .db ET_BULK ; bmAttributes
|
---|
| 141 | .db <64 ; wMaxPacketSize (LSB)
|
---|
| 142 | .db >64 ; wMaxPacketSize (MSB)
|
---|
| 143 | .db 0 ; bInterval (iso only)
|
---|
| 144 |
|
---|
| 145 | ;; endpoint descriptor
|
---|
| 146 |
|
---|
| 147 | .db DSCR_ENDPNT_LEN
|
---|
| 148 | .db DSCR_ENDPNT
|
---|
| 149 | .db 0x02 ; bEndpointAddress (ep 2 OUT)
|
---|
| 150 | .db ET_BULK ; bmAttributes
|
---|
| 151 | .db <64 ; wMaxPacketSize (LSB)
|
---|
| 152 | .db >64 ; wMaxPacketSize (MSB)
|
---|
| 153 | .db 0 ; bInterval (iso only)
|
---|
| 154 |
|
---|
| 155 | ;; interface descriptor
|
---|
| 156 |
|
---|
| 157 | .db DSCR_INTRFC_LEN
|
---|
| 158 | .db DSCR_INTRFC
|
---|
| 159 | .db 1 ; bInterfaceNumber (zero based)
|
---|
| 160 | .db 0 ; bAlternateSetting
|
---|
| 161 | .db 2 ; bNumEndpoints
|
---|
| 162 | .db 0xFF ; bInterfaceClass (vendor specific)
|
---|
| 163 | .db 0xFF ; bInterfaceSubClass (vendor specific)
|
---|
| 164 | .db 0xFF ; bInterfaceProtocol (vendor specific)
|
---|
| 165 | .db SI_PRODUCT ; iInterface (description)
|
---|
| 166 |
|
---|
| 167 | ;; endpoint descriptor
|
---|
| 168 |
|
---|
| 169 | .db DSCR_ENDPNT_LEN
|
---|
| 170 | .db DSCR_ENDPNT
|
---|
[136] | 171 | .db 0x86 ; bEndpointAddress (ep 6 IN)
|
---|
[7] | 172 | .db ET_BULK ; bmAttributes
|
---|
| 173 | .db 0x00 ; wMaxPacketSize (LSB)
|
---|
| 174 | .db 0x02 ; wMaxPacketSize (MSB)
|
---|
| 175 | .db 0x00 ; Polling interval
|
---|
| 176 |
|
---|
| 177 | ;; endpoint descriptor
|
---|
| 178 | .db DSCR_ENDPNT_LEN
|
---|
| 179 | .db DSCR_ENDPNT
|
---|
[136] | 180 | .db 0x08 ; bEndpointAddress (ep 8 OUT)
|
---|
[7] | 181 | .db ET_BULK ; bmAttributes
|
---|
| 182 | .db 0x00 ; wMaxPacketSize (LSB)
|
---|
| 183 | .db 0x02 ; wMaxPacketSize (MSB)
|
---|
| 184 | .db 0x00 ; Polling interval
|
---|
| 185 |
|
---|
| 186 | _high_speed_config_descr_end:
|
---|
| 187 |
|
---|
| 188 | ;;; ----------------------------------------------------------------
|
---|
| 189 | ;;; descriptors used when operating at full speed (12Mb/sec)
|
---|
| 190 | ;;; ----------------------------------------------------------------
|
---|
| 191 |
|
---|
| 192 | .even
|
---|
| 193 | _full_speed_device_descr::
|
---|
| 194 | .db DSCR_DEVICE_LEN
|
---|
| 195 | .db DSCR_DEVICE
|
---|
| 196 | .db <USB_VER ; Specification version (LSB)
|
---|
| 197 | .db >USB_VER ; Specification version (MSB)
|
---|
| 198 | .db 0x00 ; device class (vendor specific)
|
---|
| 199 | .db 0x00 ; device subclass (vendor specific)
|
---|
| 200 | .db 0x00 ; device protocol (vendor specific)
|
---|
| 201 | .db 64 ; bMaxPacketSize0 for endpoint 0
|
---|
| 202 | .db <VID ; idVendor
|
---|
| 203 | .db >VID ; idVendor
|
---|
| 204 | .db <PID ; idProduct
|
---|
| 205 | .db >PID ; idProduct
|
---|
| 206 | .db <VERSION ; bcdDevice
|
---|
| 207 | .db >VERSION ; bcdDevice
|
---|
| 208 | .db SI_VENDOR ; iManufacturer (string index)
|
---|
| 209 | .db SI_PRODUCT ; iProduct (string index)
|
---|
| 210 | .db SI_SERIAL ; iSerial number (None)
|
---|
| 211 | .db 1 ; bNumConfigurations
|
---|
| 212 |
|
---|
| 213 | ;;; describes the other speed (480Mb/sec)
|
---|
| 214 | .even
|
---|
| 215 | _full_speed_devqual_descr::
|
---|
| 216 | .db DSCR_DEVQUAL_LEN
|
---|
| 217 | .db DSCR_DEVQUAL
|
---|
| 218 | .db <USB_VER ; bcdUSB
|
---|
| 219 | .db >USB_VER ; bcdUSB
|
---|
| 220 | .db 0xFF ; bDeviceClass
|
---|
| 221 | .db 0xFF ; bDeviceSubClass
|
---|
| 222 | .db 0xFF ; bDeviceProtocol
|
---|
| 223 | .db 64 ; bMaxPacketSize0
|
---|
| 224 | .db 1 ; bNumConfigurations (one config at 480Mb/sec)
|
---|
| 225 | .db 0 ; bReserved
|
---|
| 226 |
|
---|
| 227 | .even
|
---|
| 228 | _full_speed_config_descr::
|
---|
| 229 | .db DSCR_CONFIG_LEN
|
---|
| 230 | .db DSCR_CONFIG
|
---|
| 231 | .db <(_full_speed_config_descr_end - _full_speed_config_descr) ; LSB
|
---|
| 232 | .db >(_full_speed_config_descr_end - _full_speed_config_descr) ; MSB
|
---|
| 233 | .db 2 ; bNumInterfaces
|
---|
| 234 | .db 1 ; bConfigurationValue
|
---|
| 235 | .db 0 ; iConfiguration
|
---|
| 236 | .db USB_ATTR ; bmAttributes
|
---|
| 237 | .db MAX_POWER ; bMaxPower [Unit: 0.5 mA]
|
---|
| 238 |
|
---|
| 239 | ;; interface descriptor
|
---|
| 240 |
|
---|
| 241 | .db DSCR_INTRFC_LEN
|
---|
| 242 | .db DSCR_INTRFC
|
---|
| 243 | .db 0 ; bInterfaceNumber (zero based)
|
---|
| 244 | .db 0 ; bAlternateSetting
|
---|
| 245 | .db 2 ; bNumEndpoints
|
---|
| 246 | .db 0xFF ; bInterfaceClass (vendor specific)
|
---|
| 247 | .db 0xFF ; bInterfaceSubClass (vendor specific)
|
---|
| 248 | .db 0xFF ; bInterfaceProtocol (vendor specific)
|
---|
| 249 | .db SI_PRODUCT ; iInterface (description)
|
---|
| 250 |
|
---|
| 251 | ;; endpoint descriptor
|
---|
| 252 |
|
---|
| 253 | .db DSCR_ENDPNT_LEN
|
---|
| 254 | .db DSCR_ENDPNT
|
---|
| 255 | .db 0x81 ; bEndpointAddress (ep 1 IN)
|
---|
| 256 | .db ET_BULK ; bmAttributes
|
---|
| 257 | .db <64 ; wMaxPacketSize (LSB)
|
---|
| 258 | .db >64 ; wMaxPacketSize (MSB)
|
---|
| 259 | .db 0 ; bInterval (iso only)
|
---|
| 260 |
|
---|
| 261 | ;; endpoint descriptor
|
---|
| 262 |
|
---|
| 263 | .db DSCR_ENDPNT_LEN
|
---|
| 264 | .db DSCR_ENDPNT
|
---|
| 265 | .db 0x02 ; bEndpointAddress (ep 2 OUT)
|
---|
| 266 | .db ET_BULK ; bmAttributes
|
---|
| 267 | .db <64 ; wMaxPacketSize (LSB)
|
---|
| 268 | .db >64 ; wMaxPacketSize (MSB)
|
---|
| 269 | .db 0 ; bInterval (iso only)
|
---|
| 270 |
|
---|
| 271 | ;; interface descriptor
|
---|
| 272 |
|
---|
| 273 | .db DSCR_INTRFC_LEN
|
---|
| 274 | .db DSCR_INTRFC
|
---|
| 275 | .db 1 ; bInterfaceNumber (zero based)
|
---|
| 276 | .db 0 ; bAlternateSetting
|
---|
| 277 | .db 2 ; bNumEndpoints
|
---|
| 278 | .db 0xFF ; bInterfaceClass (vendor specific)
|
---|
| 279 | .db 0xFF ; bInterfaceSubClass (vendor specific)
|
---|
| 280 | .db 0xFF ; bInterfaceProtocol (vendor specific)
|
---|
| 281 | .db SI_PRODUCT ; iInterface (description)
|
---|
| 282 |
|
---|
| 283 | ;; endpoint descriptor
|
---|
| 284 |
|
---|
| 285 | .db DSCR_ENDPNT_LEN
|
---|
| 286 | .db DSCR_ENDPNT
|
---|
[136] | 287 | .db 0x86 ; bEndpointAddress (ep 6 IN)
|
---|
[7] | 288 | .db ET_BULK ; bmAttributes
|
---|
| 289 | .db 0x40 ; wMaxPacketSize (LSB)
|
---|
| 290 | .db 0x00 ; wMaxPacketSize (MSB)
|
---|
| 291 | .db 0 ; bInterval (iso only)
|
---|
| 292 |
|
---|
| 293 | ;; endpoint descriptor
|
---|
| 294 |
|
---|
| 295 | .db DSCR_ENDPNT_LEN
|
---|
| 296 | .db DSCR_ENDPNT
|
---|
[136] | 297 | .db 0x08 ; bEndpointAddress (ep 8 OUT)
|
---|
[7] | 298 | .db ET_BULK ; bmAttributes
|
---|
| 299 | .db 0x40 ; wMaxPacketSize (LSB)
|
---|
| 300 | .db 0x00 ; wMaxPacketSize (MSB)
|
---|
| 301 | .db 0 ; bInterval (iso only)
|
---|
| 302 |
|
---|
| 303 |
|
---|
| 304 | _full_speed_config_descr_end:
|
---|
| 305 |
|
---|
| 306 | ;;; ----------------------------------------------------------------
|
---|
| 307 | ;;; string descriptors
|
---|
| 308 | ;;; ----------------------------------------------------------------
|
---|
| 309 |
|
---|
| 310 | _nstring_descriptors::
|
---|
| 311 | .db (_string_descriptors_end - _string_descriptors) / 2
|
---|
| 312 |
|
---|
| 313 | _string_descriptors::
|
---|
| 314 | .db <str0, >str0
|
---|
| 315 | .db <str1, >str1
|
---|
| 316 | .db <str2, >str2
|
---|
[24] | 317 | .db <str3, >str3
|
---|
[7] | 318 | _string_descriptors_end:
|
---|
| 319 |
|
---|
| 320 | SI_NONE = 0
|
---|
| 321 | ;; str0 contains the language ID's.
|
---|
| 322 | .even
|
---|
| 323 | _str0::
|
---|
| 324 | str0: .db str0_end - str0
|
---|
| 325 | .db DSCR_STRING
|
---|
| 326 | .db 0
|
---|
| 327 | .db 0
|
---|
| 328 | .db <0x0409 ; magic code for US English (LSB)
|
---|
| 329 | .db >0x0409 ; magic code for US English (MSB)
|
---|
| 330 | str0_end:
|
---|
| 331 |
|
---|
| 332 | SI_VENDOR = 1
|
---|
| 333 | .even
|
---|
| 334 | _str1::
|
---|
| 335 | str1: .db str1_end - str1
|
---|
| 336 | .db DSCR_STRING
|
---|
| 337 | .db 'A, 0 ; 16-bit unicode
|
---|
| 338 | .db 'l, 0
|
---|
| 339 | .db 't, 0
|
---|
| 340 | .db 'e, 0
|
---|
| 341 | .db 'r, 0
|
---|
| 342 | .db 'a, 0
|
---|
| 343 | str1_end:
|
---|
| 344 |
|
---|
| 345 | SI_PRODUCT = 2
|
---|
| 346 | .even
|
---|
| 347 | _str2::
|
---|
| 348 | str2: .db str2_end - str2
|
---|
| 349 | .db DSCR_STRING
|
---|
| 350 | .db 'U, 0
|
---|
| 351 | .db 'S, 0
|
---|
| 352 | .db 'B, 0
|
---|
| 353 | .db '-, 0
|
---|
| 354 | .db 'B, 0
|
---|
| 355 | .db 'l, 0
|
---|
| 356 | .db 'a, 0
|
---|
| 357 | .db 's, 0
|
---|
| 358 | .db 't, 0
|
---|
| 359 | .db 'e, 0
|
---|
| 360 | .db 'r, 0
|
---|
| 361 | str2_end:
|
---|
| 362 |
|
---|
| 363 | SI_SERIAL = 3
|
---|
| 364 | .even
|
---|
| 365 | _str3::
|
---|
| 366 | str3: .db str3_end - str3
|
---|
| 367 | .db DSCR_STRING
|
---|
| 368 | .db '0, 0
|
---|
| 369 | .db '0, 0
|
---|
| 370 | .db '0, 0
|
---|
| 371 | .db '0, 0
|
---|
| 372 | .db '0, 0
|
---|
| 373 | .db '0, 0
|
---|
| 374 | .db '0, 0
|
---|
| 375 | .db '0, 0
|
---|
| 376 | str3_end:
|
---|
| 377 |
|
---|
| 378 |
|
---|