00001
00002
00003
00004
00005
00006
00007
00008
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00043 #ifndef _CSL_MSC_H_
00044 #define _CSL_MSC_H_
00045
00046 #ifdef __cplusplus
00047 extern "C" {
00048 #endif
00049
00050 #include <cslr.h>
00051 #include <csl_error.h>
00052 #include <csl_types.h>
00053 #include <cslr_usb.h>
00054 #include <csl_usb.h>
00055 #include <soc.h>
00056 #include <csl_general.h>
00057
00058
00077
00078
00079
00086 #define CSL_MSC_CBW_0 (1)
00087
00088 #define CSL_MSC_CBW_1 (2)
00089
00090 #define CSL_MSC_CBW_2 (3)
00091
00092 #define CSL_MSC_CBW_3 (4)
00093
00094 #define CSL_MSC_CBW_4 (5)
00095
00096 #define CSL_MSC_CBW_5 (6)
00097
00098 #define CSL_MSC_CBW_6 (7)
00099
00100 #define CSL_MSC_CBW_7 (8)
00101
00102 #define CSL_MSC_CBW_8 (9)
00103
00104 #define CSL_MSC_CBW_9 (10)
00105
00106 #define CSL_MSC_CBW_10 (11)
00107
00108 #define CSL_MSC_CBW_11 (12)
00109
00110 #define CSL_MSC_CBW_12 (13)
00111
00112 #define CSL_MSC_CBW_13 (14)
00113
00114 #define CSL_MSC_CBW_14 (15)
00115
00116 #define CSL_MSC_CBW_15 (16)
00117
00120 #define CSL_MSC_CSW_2 (3)
00121
00122 #define CSL_MSC_CSW_3 (4)
00123
00124 #define CSL_MSC_CSW_4 (5)
00125
00126 #define CSL_MSC_CSW_5 (6)
00127
00128 #define CSL_MSC_CSW_6 (7)
00129
00131 #define CSL_MSC_CBW_SIGNATURE (0x43425355)
00132
00133 #define CSL_MSC_CSW_SIGNATURE (0x53425355)
00134
00135 #define CSL_MSC_CBW_DATADIR_IN (0x80)
00136
00137 #define CSL_MSC_CBW_DATADIR_OUT (0x0)
00138
00139 #define CSL_MSC_CBW_DIRBIT_MASK (0x80)
00140
00143 #define CSL_MSC_MEDIA_PRESENT (0x1)
00144
00145 #define CSL_MSC_MEDIA_LOCKED (0x2)
00146
00147 #define CSL_MSC_MEDIA_WRITEPENDING (0x4)
00148
00149 #define CSL_MSC_MEDIA_BAD (0x8)
00150
00151 #define CSL_MSC_MEDIA_WRITEENABLE (0x0001)
00152
00155 #define CSL_MSC_DEVICE_DESCRIPTOR_TYPE (0x01)
00156
00157 #define CSL_MSC_DEVICE_QUAL_DESCRIPTOR_TYPE (0x06)
00158
00159 #define CSL_MSC_CONFIGURATION_DESCRIPTOR_TYPE (0x02)
00160
00161 #define CSL_MSC_OTHERSPEED_CFG_DESCRIPTOR_TYPE (0x07)
00162
00163 #define CSL_MSC_STRING_DESCRIPTOR_TYPE (0x03)
00164
00165 #define CSL_MSC_INTERFACE_DESCRIPTOR_TYPE (0x04)
00166
00167 #define CSL_MSC_ENDPOINT_DESCRIPTOR_TYPE (0x05)
00168
00169 #define CSL_MSC_POWER_DESCRIPTOR_TYPE (0x06)
00170
00171 #define CSL_MSC_HID_DESCRIPTOR_TYPE (0x21)
00172
00175 #define CSL_MSC_FEATURE_ENDPOINT_STALL (0x0000)
00176
00177 #define CSL_MSC_FEATURE_REMOTE_WAKEUP (0x0001)
00178
00181 #define CSL_MSC_VERIFY_PASSED (0x0)
00182
00183 #define CSL_MSC_VERIFY_FAILED (0x1)
00184
00185 #define CSL_MSC_UNIT_REMOVEABLE (0x1)
00186
00187 #define CSL_MSC_CURRDEV_STAT (0x01)
00188
00189 #define CSL_MSC_CURRINTRF_STAT (0x00)
00190
00191 #define CSL_MSC_NO_ENDPTOBJECT (5)
00192
00193 #define CSL_MSC_DEVDESC_LEN (10)
00194
00195 #define CSL_MSC_CFGDESC_TOTAL_LEN (17)
00196
00197 #define CSL_MSC_DEVQUALDESC_LEN (6)
00198
00199 #define CSL_MSC_CONFDESC_LEN (6)
00200
00201 #define CSL_MSC_MS_INTDESC_LEN (6)
00202
00203 #define CSL_MSC_MS_BULKOUT_ENDPTDESC_LEN (5)
00204
00205 #define CSL_MSC_MS_BULKIN_ENDPTDESC_LEN (5)
00206
00207 #define CSL_MSC_STRDESC_LANGID_LEN (4)
00208
00209 #define CSL_MSC_SCSI_INQUIRY_LEN (50)
00210
00211 #define CSL_MSC_SENSEDATA_LEN (15)
00212
00213 #define CSL_MSC_LUN_MAX (4)
00214
00215 #define CSL_MSC_CBWSIZE (17)
00216
00217 #define CSL_MSC_CSWSIZE (8)
00218
00219 #define CSL_MSC_READCAP (6)
00220
00221 #define CSL_MSC_CTRLBUFF_LEN (5)
00222
00223 #define CSL_MSC_SCSI_INQUIRY_CONF_LEN (24)
00224
00225 #define CSL_MSC_DEVICE_CLASS_STORAGE (0x08)
00226
00227 #define CSL_MSC_SCSI_DATA_PROTECT (0x0007)
00228
00231 #define CSL_MSC_REQUEST_GET_STATUS (0x8000)
00232
00233 #define CSL_MSC_REQUEST_CLEAR_FEATURE (0x0001)
00234
00235 #define CSL_MSC_REQUEST_SET_FEATURE (0x0003)
00236
00237 #define CSL_MSC_REQUEST_SET_ADDRESS (0x0005)
00238
00239 #define CSL_MSC_REQUEST_GET_DESCRIPTOR (0x8006)
00240
00241 #define CSL_MSC_REQUEST_SET_DESCRIPTOR (0x0007)
00242
00243 #define CSL_MSC_REQUEST_GET_CONFIGURATION (0x8008)
00244
00245 #define CSL_MSC_REQUEST_SET_CONFIGURATION (0x0009)
00246
00247 #define CSL_MSC_REQUEST_GET_INTERFACE (0x800A)
00248
00249 #define CSL_MSC_REQUEST_SET_INTERFACE (0x000B)
00250
00251 #define CSL_MSC_REQUEST_SYNC_FRAME (0x800C)
00252
00253 #define CSL_MSC_REQUEST_BOT_MSC_RESET (0x20FF)
00254
00255 #define CSL_MSC_REQUEST_GET_MAX_LUN (0xA0FE)
00256
00257 #define CSL_MSC_REQUEST_TYPE_BASE (0x80)
00258
00259 #define CSL_MSC_REQUEST_TYPE_DEVICE_STATUS (0x0)
00260
00261 #define CSL_MSC_REQUEST_TYPE_INTERFACE_STATUS (0x1)
00262
00263 #define CSL_MSC_REQUEST_TYPE_EP_STATUS (0x2)
00264
00267 #define CSL_MSC_DEVICE_SUSPENDED (0x01)
00268
00269 #define CSL_MSC_DEVICE_NOT_SUSPENDED (0x0)
00270
00271 #define CSL_MSC_LUN_LOCKED (0x01)
00272
00273 #define CSL_MSC_LUN_NOT_LOCKED (0x0)
00274
00275 #define CSL_MSC_ACTIVITY_PRESENT (0x01)
00276
00277 #define CSL_MSC_ACTIVITY_NOT_PRESENT (0x0)
00278
00280 #define CSL_MSC_16BIT_MASK (0xFFFF)
00281
00282 #define CSL_MSC_16BIT_SHIFT (16)
00283
00285 #define CSL_MSC_24BIT_SHIFT (24)
00286
00288 #define CSL_MSC_8BIT_MASK (0xFF)
00289
00290 #define CSL_MSC_8BIT_HIGH_MASK (0xFF00)
00291
00292 #define CSL_MSC_8BIT_SHIFT (8)
00293
00294 #define CSL_MSC_UNICODE_SIZE (66)
00295
00297 #define CSL_MSC_DEVICE_DESC_DEFLEN (18)
00298
00299 #define CSL_MSC_DEVICE_DESC0_DEFVAL (0x0000)
00300
00301 #define CSL_MSC_DEVICE_DESC2_DEFVAL (0x0200)
00302
00303 #define CSL_MSC_DEVICE_DESC3_DEFVAL (0x0000)
00304
00305 #define CSL_MSC_DEVICE_DESC4_DEFVAL (0x4000)
00306
00307 #define CSL_MSC_DEVICE_DESC5_DEFVAL (0x0451)
00308
00309 #define CSL_MSC_DEVICE_DESC6_DEFVAL (0x9010)
00310
00311 #define CSL_MSC_DEVICE_DESC7_DEFVAL (0x0001)
00312
00313 #define CSL_MSC_DEVICE_DESC8_DEFVAL (0x0201)
00314
00315 #define CSL_MSC_DEVICE_DESC9_DEFVAL (0x0103)
00316
00318 #define CSL_MSC_DEVICE_QUAL_DESC_DEFLEN (10)
00319
00320 #define CSL_MSC_DEVICE_QUAL_DESC0_DEFVAL (0x0000)
00321
00322 #define CSL_MSC_DEVICE_QUAL_DESC2_DEFVAL (0x0200)
00323
00324 #define CSL_MSC_DEVICE_QUAL_DESC3_DEFVAL (0x0000)
00325
00326 #define CSL_MSC_DEVICE_QUAL_DESC4_DEFVAL (0x4000)
00327
00328 #define CSL_MSC_DEVICE_QUAL_DESC5_DEFVAL (0x0001)
00329
00331 #define CSL_MSC_CONF_DESC_DEFLEN (9)
00332
00333 #define CSL_MSC_CONF_DESC0_DEFVAL (0x0000)
00334
00335 #define CSL_MSC_CONF_DESC2_DEFVAL (32)
00336
00337 #define CSL_MSC_CONF_DESC3_DEFVAL (0x0101)
00338
00339 #define CSL_MSC_CONF_DESC4_DEFVAL (0xC004)
00340
00341 #define CSL_MSC_CONF_DESC5_DEFVAL (50)
00342
00344 #define CSL_MSC_INTERFACE_DESC_DEFLEN (9)
00345
00346 #define CSL_MSC_INTERFACE_DESC0_DEFVAL (0x0000)
00347
00348 #define CSL_MSC_INTERFACE_DESC2_DEFVAL (0x0000)
00349
00350 #define CSL_MSC_INTERFACE_DESC3_DEFVAL ((CSL_MSC_DEVICE_CLASS_STORAGE<<8) | 2)
00351
00352 #define CSL_MSC_INTERFACE_DESC4_DEFVAL (0x5006)
00353
00354 #define CSL_MSC_INTERFACE_DESC5_DEFVAL (0x05)
00355
00357 #define CSL_MSC_BULKOUTEP_DESC_DEFLEN (7)
00358
00359 #define CSL_MSC_BULKOUTEP_DESC0_DEFVAL (0x0000)
00360
00361 #define CSL_MSC_BULKOUTEP_DESC2_DEFVAL (0x0202)
00362
00363 #define CSL_MSC_BULKOUTEP_DESC3_DEFVAL (0x0040)
00364
00365 #define CSL_MSC_BULKOUTEP_DESC4_DEFVAL (0x00)
00366
00368 #define CSL_MSC_BULKINEP_DESC_DEFLEN (7)
00369
00370 #define CSL_MSC_BULKINEP_DESC0_DEFVAL (0x0000)
00371
00372 #define CSL_MSC_BULKINEP_DESC2_DEFVAL (0x0282)
00373
00374 #define CSL_MSC_BULKINEP_DESC3_DEFVAL (0x0040)
00375
00376 #define CSL_MSC_BULKINEP_DESC4_DEFVAL (0x00)
00377
00379 #define CSL_MSC_HS_CFG_DESC0_DEFVAL (0x0000)
00380
00381 #define CSL_MSC_HS_CFG_DESC2_DEFVAL (32)
00382
00383 #define CSL_MSC_HS_CFG_DESC3_DEFVAL (0x0101)
00384
00385 #define CSL_MSC_HS_CFG_DESC4_DEFVAL (0xC004)
00386
00387 #define CSL_MSC_HS_CFG_DESC5_DEFVAL (0x0932)
00388
00389 #define CSL_MSC_HS_CFG_DESC6_DEFVAL (CSL_MSC_INTERFACE_DESCRIPTOR_TYPE)
00390
00391 #define CSL_MSC_HS_CFG_DESC7_DEFVAL (0x0200)
00392
00393 #define CSL_MSC_HS_CFG_DESC8_DEFVAL (0x0600 | CSL_MSC_DEVICE_CLASS_STORAGE)
00394
00395 #define CSL_MSC_HS_CFG_DESC9_DEFVAL (0x0550)
00396
00397 #define CSL_MSC_HS_CFG_DESC10_DEFVAL ((CSL_MSC_ENDPOINT_DESCRIPTOR_TYPE<<8) | 7)
00398
00399 #define CSL_MSC_HS_CFG_DESC11_DEFVAL (0x0202)
00400
00401 #define CSL_MSC_HS_CFG_DESC12_DEFVAL (0x0200)
00402
00403 #define CSL_MSC_HS_CFG_DESC13_DEFVAL (0x0700)
00404
00405 #define CSL_MSC_HS_CFG_DESC14_DEFVAL (0x8100 | CSL_MSC_ENDPOINT_DESCRIPTOR_TYPE)
00406
00407 #define CSL_MSC_HS_CFG_DESC15_DEFVAL (0x0002)
00408
00409 #define CSL_MSC_HS_CFG_DESC16_DEFVAL (0x0002)
00410
00412 #define CSL_MSC_FS_CFG_DESC0_DEFVAL (0x0000)
00413
00414 #define CSL_MSC_FS_CFG_DESC2_DEFVAL (32)
00415
00416 #define CSL_MSC_FS_CFG_DESC3_DEFVAL (0x0101)
00417
00418 #define CSL_MSC_FS_CFG_DESC4_DEFVAL (0xC004)
00419
00420 #define CSL_MSC_FS_CFG_DESC5_DEFVAL (0x0932)
00421
00422 #define CSL_MSC_FS_CFG_DESC6_DEFVAL (CSL_MSC_INTERFACE_DESCRIPTOR_TYPE)
00423
00424 #define CSL_MSC_FS_CFG_DESC7_DEFVAL (0x0200)
00425
00426 #define CSL_MSC_FS_CFG_DESC8_DEFVAL (0x0600 | CSL_MSC_DEVICE_CLASS_STORAGE)
00427
00428 #define CSL_MSC_FS_CFG_DESC9_DEFVAL (0x0550)
00429
00430 #define CSL_MSC_FS_CFG_DESC10_DEFVAL ((CSL_MSC_ENDPOINT_DESCRIPTOR_TYPE<<8) | 7)
00431
00432 #define CSL_MSC_FS_CFG_DESC11_DEFVAL (0x0202)
00433
00434 #define CSL_MSC_FS_CFG_DESC12_DEFVAL (0x0040)
00435
00436 #define CSL_MSC_FS_CFG_DESC13_DEFVAL (0x0700)
00437
00438 #define CSL_MSC_FS_CFG_DESC14_DEFVAL (0x8100 | CSL_MSC_ENDPOINT_DESCRIPTOR_TYPE)
00439
00440 #define CSL_MSC_FS_CFG_DESC15_DEFVAL (0x4002)
00441
00442 #define CSL_MSC_FS_CFG_DESC16_DEFVAL (0x0000)
00443
00445 #define CSL_MSC_LANGID_DEFLEN (4)
00446
00447 #define CSL_MSC_LANGID0_DEFVAL (0x0000)
00448
00449 #define CSL_MSC_LANGID2_DEFVAL (0x0409)
00450
00451 #define CSL_MSC_LANGID3_DEFVAL (0x0000)
00452
00454 #define CSL_MSC_SENSE_DATA0_DEFVAL (26)
00455
00456 #define CSL_MSC_SENSE_DATA1_DEFVAL (0)
00457
00458 #define CSL_MSC_SENSE_DATA2_DEFVAL (0x0070)
00459
00460 #define CSL_MSC_SENSE_DATA3_DEFVAL (0x0000)
00461
00462 #define CSL_MSC_SENSE_DATA4_DEFVAL (0x0000)
00463
00464 #define CSL_MSC_SENSE_DATA5_DEFVAL ((11<<8) | 0)
00465
00467 #define CSL_MSC_MODESENSE_DATA0_DEFVAL (0x08)
00468
00469 #define CSL_MSC_MODESENSE_DATA1_DEFVAL (0x0)
00470
00471 #define CSL_MSC_MODESENSE_DATA2_DEFVAL (0x03)
00472
00473 #define CSL_MSC_MODESENSE_DATA3_DEFVAL (0x0)
00474
00475 #define CSL_MSC_MODESENSE_DATA4_DEFVAL (0x0)
00476
00477
00479 #define CSL_MSC_READ_CAPACITY0_DEFVAL (8)
00480
00482 #define CSL_MSC_CSW0_DEFVAL (0)
00483
00484 #define CSL_MSC_CSW1_DEFVAL (0x5355)
00485
00486 #define CSL_MSC_CSW2_DEFVAL (0x5342)
00487
00490 #define CSL_MSC_STORAGE_STATE_RESET (0)
00491
00492 #define CSL_MSC_STORAGE_STATE_WAIT_FOR_CBW (1)
00493
00494 #define CSL_MSC_STORAGE_STATE_SENDING_STALL (2)
00495
00496 #define CSL_MSC_STORAGE_STATE_SENDING_DATA (3)
00497
00498 #define CSL_MSC_STORAGE_STATE_SENDING_CSW (4)
00499
00500 #define CSL_MSC_STORAGE_STATE_READ (5)
00501
00502 #define CSL_MSC_STORAGE_STATE_WRITE (6)
00503
00504 #define CSL_MSC_STORAGE_STATE_SENDING_SHORT_PKT (7)
00505
00507 #define CSL_MSC_STATE_RESET_DATA_SIZE (31)
00508
00509 #define CSL_MSC_CBW_DATA_SIZE (31)
00510
00511 #define CSL_MSC_CSW_DATA_SIZE (13)
00512
00515 #define CSL_MSC_SCSI_COMMAND_TEST_UNIT_READY (0x00)
00516
00517 #define CSL_MSC_SCSI_COMMAND_REQUEST_SENSE (0x03)
00518
00519 #define CSL_MSC_SCSI_COMMAND_FORMAT_UNIT (0x04)
00520
00521 #define CSL_MSC_SCSI_COMMAND_INQUIRY (0x12)
00522
00523 #define CSL_MSC_SCSI_COMMAND_MODE_SELECT_6 (0x15)
00524
00525 #define CSL_MSC_SCSI_COMMAND_RESERVE_6 (0x16)
00526
00527 #define CSL_MSC_SCSI_COMMAND_RELEASE_6 (0x17)
00528
00529 #define CSL_MSC_SCSI_COMMAND_MODE_SENSE_6 (0x1A)
00530
00531 #define CSL_MSC_SCSI_COMMAND_MODE_SENSE_10 (0x5A)
00532
00533 #define CSL_MSC_SCSI_COMMAND_START_STOP_UNIT (0x1B)
00534
00535 #define CSL_MSC_SCSI_COMMAND_PREVENT_ALLOW_MEDIA_REMOVAL (0x1E)
00536
00537 #define CSL_MSC_SCSI_COMMAND_READ_CAPACITY (0x25)
00538
00539 #define CSL_MSC_SCSI_COMMAND_READ_10 (0x28)
00540
00541 #define CSL_MSC_SCSI_COMMAND_WRITE_10 (0x2A)
00542
00543 #define CSL_MSC_SCSI_COMMAND_VERIFY_10 (0x2F)
00544
00545 #define CSL_MSC_SCSI_COMMAND_SYNCHRONIZE_CACHE (0x35)
00546
00547 #define CSL_MSC_SCSI_COMMAND_WRITE_BUFFER (0x3B)
00548
00549 #define CSL_MSC_SCSI_COMMAND_PERSISTENT_RESERVE_IN (0x5E)
00550
00551 #define CSL_MSC_SCSI_COMMAND_PERSISTENT_RESERVE_OUT (0x5F)
00552
00555 #define CSL_MSC_SCSI_SENSEKEY_NO_SENSE (0x00)
00556
00557 #define CSL_MSC_SCSI_SENSEKEY_RECOVERED_ERROR (0x01)
00558
00559 #define CSL_MSC_SCSI_SENSEKEY_NOT_READY (0x02)
00560
00561 #define CSL_MSC_SCSI_SENSEKEY_MEDIA_ERROR (0x03)
00562
00563 #define CSL_MSC_SCSI_SENSEKEY_HARDWARE_ERROR (0x04)
00564
00565 #define CSL_MSC_SCSI_SENSEKEY_ILLEGAL_REQUEST (0x05)
00566
00567 #define CSL_MSC_SCSI_SENSEKEY_UNIT_ATTENTION (0x06)
00568
00569 #define CSL_MSC_SCSI_SENSEKEY_DATA_PROTECT (0x07)
00570
00571 #define CSL_MSC_SCSI_SENSEKEY_BLANK_CHECK (0x08)
00572
00573 #define CSL_MSC_SCSI_SENSEKEY_VENDOR_SPECIFIC (0x09)
00574
00575 #define CSL_MSC_SCSI_SENSEKEY_COPY_ABORTED (0x0A)
00576
00577 #define CSL_MSC_SCSI_SENSEKEY_ABORTED_COMMAND (0x0B)
00578
00579 #define CSL_MSC_SCSI_SENSEKEY_EQUAL (0x0C)
00580
00581 #define CSL_MSC_SCSI_SENSEKEY_VOLUME_OVERFLOW (0x0D)
00582
00583 #define CSL_MSC_SCSI_SENSEKEY_MISCOMPARE (0x0E)
00584
00585 #define CSL_MSC_SCSI_SENSEKEY_RESERVED (0x0F)
00586
00587 #define CSL_MSC_SCSI_ASC_MISCOMPARE_VERIFY (0x001D)
00588
00591 #define CSL_MSC_SCSI_ASC_NO_ADDITIONAL_SENSE_INFORMATION (0x0000)
00592
00593 #define CSL_MSC_SCSI_ASC_MEDIA_NOT_PRESENT (0x003A)
00594
00595 #define CSL_MSC_SCSI_ASC_INVALID_COMMAND_OPERATION_CODE (0x0020)
00596
00597 #define CSL_MSC_SCSI_ASC_MEDIA_MAY_HAVE_CHANGED (0x0028)
00598
00599 #define CSL_MSC_SCSI_ASC_MEDIA_MANUALINTERVENTION_REQUIRED (0x0004)
00600
00601 #define CSL_MSC_SCSI_ASC_MEDIA_OUTOFRANGE (0x0021)
00602
00603 #define CSL_MSC_SCSI_ASC_WRITE_PROTECTED (0x0027)
00604
00605 #define CSL_MSC_SCSI_ASC_MEDIA_REMOVAL_PREVENTED (0x0253)
00606
00609 #define CSL_MSC_CSW_STATUS_COMMAND_PASSED (0x00)
00610
00611 #define CSL_MSC_CSW_STATUS_COMMAND_FAILED (0x01)
00612
00613 #define CSL_MSC_CSW_STATUS_PHASE_ERROR (0x02)
00614
00616 #define CSL_MSC_RC_1 (2)
00617
00618 #define CSL_MSC_RC_2 (3)
00619
00620 #define CSL_MSC_RC_3 (4)
00621
00622 #define CSL_MSC_RC_4 (5)
00623
00625 #define CSL_MSC_SSD_2 (3)
00626
00627 #define CSL_MSC_SSD_7 (8)
00628
00630 #define CSL_SCSI_DATA0_DEFVAL (96)
00631
00632 #define CSL_SCSI_DATA1_DEFVAL (0x0)
00633
00634 #define CSL_SCSI_DATA2_DEFVAL (0x8000)
00635
00636 #define CSL_SCSI_DATA3_DEFVAL (0x0200)
00637
00638 #define CSL_SCSI_DATA4_DEFVAL (92)
00639
00640 #define CSL_SCSI_DATA5_DEFVAL (0x0000)
00641
00642 #define CSL_SCSI_DATA30_DEFVAL (0x0000)
00643
00644 #define CSL_SCSI_DATA31_DEFVAL (0x2002)
00645
00646 #define CSL_SCSI_DATA32_DEFVAL (0x3802)
00647
00648 #define CSL_SCSI_DATA_NULL_VAL (0x0000)
00649
00650 #define CSL_SCSI_DATA_SIZE1 (6)
00651
00652 #define CSL_SCSI_DATA_SIZE2 (30)
00653
00654 #define CSL_SCSI_DATA_SIZE3 (33)
00655
00656 #define CSL_SCSI_DATA_SIZE4 (50)
00657
00659 #define CSL_MSC_ERROR_BASE (CSL_EUSB_FIRST)
00660
00661 #define CSL_MSC_INVALID_REQUEST_HANDLER (CSL_MSC_ERROR_BASE - 1)
00662
00663
00665 #define CSL_MSC_REQUEST_ARGS CSL_UsbDevNum devNum, \
00666 CSL_UsbSetupStruct *usbSetup, \
00667 pUsbEpHandle hInEp, \
00668 pUsbEpHandle hOutEp, \
00669 void *pMsc
00670
00675
00676
00677
00678
00685 typedef enum {
00686
00687 CSL_MSC_REQUEST_DONE = 0,
00688
00689 CSL_MSC_REQUEST_STALL,
00690
00691 CSL_MSC_REQUEST_SEND_ACK,
00692
00693 CSL_MSC_REQUEST_GET_ACK,
00694
00695 CSL_MSC_REQUEST_DATA_IN,
00696
00697 CSL_MSC_REQUEST_DATA_OUT
00698 } CSL_MscRequestRet;
00699
00703 typedef enum {
00705 CSL_MSC_MEDIACCESS_OVERFLOW,
00707 CSL_MSC_MEDIACCESS_SUCCESS,
00709 CSL_MSC_MEDIACCESS_NOTPRESENT,
00711 CSL_MSC_MEDIACCESS_WRITEPROTECT,
00713 CSL_MSC_MEDIACCESS_BADMEDIA
00714 } CSL_MscMediaStatus;
00715
00719 typedef enum {
00721 CSL_MSC_UNLOCK = 0,
00723 CSL_MSC_LOCK
00724 } CSL_MscMediaLockStatus;
00725
00730
00731
00732
00733
00744 typedef struct CSL_MscRequestStruct {
00746 WORD request;
00748 CSL_MscRequestRet (*fpRequestHandler)(CSL_MSC_REQUEST_ARGS);
00749 } CSL_MscRequestStruct;
00750
00757 typedef struct CSL_MscInitStructApp {
00759 void *pMscObj;
00761 Uint16 pId;
00763 Uint16 vId;
00765 Uint16 numLun;
00767 char **strDescrApp;
00770 Uint16 *lbaBufferApp;
00772 CSL_MscRequestStruct *mscReqTableApp;
00775 void (*bulkHandler)();
00778 void (*ctrlHandler)();
00780 CSL_MscMediaStatus (*readMediaApp)(Uint16, Uint16*, Uint32, Uint16);
00782 CSL_MscMediaStatus (*writeMediaApp)(Uint16, Uint16*, Uint32, Uint16);
00784 CSL_MscMediaStatus (*mediaGetPresentStateApp)(Uint16);
00786 CSL_MscMediaStatus (*mediaInitApp)(Uint16);
00788 CSL_MscMediaStatus (*mediaEjectApp)(Uint16);
00790 CSL_MscMediaStatus (*mediaLockUnitApp)(Uint16,CSL_MscMediaLockStatus);
00792 Uint32 (*getMediaSizeApp)(Uint16);
00793 } CSL_MscInitStructApp;
00794
00796 typedef CSL_MscInitStructApp *pMscAppClassHandle;
00797
00804 typedef struct CSL_MscLunAttribApp {
00806 Uint32 lbaSizeApp;
00808 Uint32 mediaSizeApp;
00810 Uint16 removeableApp;
00812 Uint16 scsiInquiryConfData [CSL_MSC_SCSI_INQUIRY_CONF_LEN];
00814 Uint16 mediaStateApp;
00816 Uint16 readwriteApp;
00817 } CSL_MscLunAttribApp;
00818
00820 typedef CSL_MscLunAttribApp *pMscAppLunAttribHandle;
00821
00823 typedef CSL_MscRequestRet (*fpMSC_REQ_HANDLER)(CSL_MSC_REQUEST_ARGS);
00824
00832 typedef struct CSL_MscLogicalUnit {
00834 Uint16 scsiInquiryData[CSL_MSC_SCSI_INQUIRY_LEN];
00837 Uint32 mediaSize;
00839 Uint32 currLba;
00841 Uint32 lbaSize;
00843 Uint16 removeable;
00845 Uint16 mediaState;
00847 Uint16 readwrite;
00849 Uint16 lbaCnt;
00851 Uint16 verifyFlag;
00852 } CSL_MscLogicalUnit;
00853
00859 typedef struct CSL_MscObject {
00861 CSL_MscMediaStatus (*readMedia)(Uint16 , Uint16* , Uint32, Uint16 );
00863 CSL_MscMediaStatus (*writeMedia)(Uint16 , Uint16* , Uint32, Uint16 );
00865 CSL_MscMediaStatus (*mediaGetPresentState)(Uint16 );
00867 CSL_MscMediaStatus (*mediaInit)(Uint16 );
00869 CSL_MscMediaStatus (*mediaEject)(Uint16 );
00871 CSL_MscMediaStatus (*mediaLockUnit)(Uint16,CSL_MscMediaLockStatus);
00873 Uint32 (*getMediaSize)(Uint16 );
00875 Uint16 *lbaBuffer;
00877 Uint32 cbwDataTransferLength;
00879 CSL_MscLogicalUnit lun[CSL_MSC_LUN_MAX];
00881 Uint16 senseData[CSL_MSC_SENSEDATA_LEN];
00883 Uint16 activityPresentFlag;
00885 Uint16 csw[CSL_MSC_CSWSIZE];
00887 Uint16 readCapacity[CSL_MSC_READCAP];
00889 Uint16 cbw[CSL_MSC_CBWSIZE];
00891 CSL_UsbEpObj bulkInEpObj;
00893 CSL_UsbEpObj bulkOutEpObj;
00895 Uint16 noOfLun;
00897 Uint16 storageState;
00899 Uint16 modeSenseData[5];
00901 Bool writeToMedia;
00902 } CSL_MscObject;
00903
00909 typedef struct CSL_MscCtrlObject {
00911 CSL_UsbEpObj ctrlInEpObj;
00913 CSL_UsbDevNum devNum;
00915 CSL_UsbEpObj ctrlOutEpObj;
00917 Uint16 suspendFlag;
00919 pUsbEpHandle hEpObjArray[CSL_MSC_NO_ENDPTOBJECT];
00921 CSL_UsbSetupStruct usbSetup;
00923 Uint16 highSpeedCfgDescr[CSL_MSC_CFGDESC_TOTAL_LEN];
00925 Uint16 fullSpeedCfgDescr[CSL_MSC_CFGDESC_TOTAL_LEN];
00927 Uint16 deviceDescr[CSL_MSC_DEVDESC_LEN];
00929 Uint16 deviceQualDescr[CSL_MSC_DEVQUALDESC_LEN];
00931 Uint16 confDescr[CSL_MSC_CONFDESC_LEN];
00933 Uint16 massStorageIntDescr[CSL_MSC_MS_INTDESC_LEN];
00935 Uint16 massStorageBulkOutEndptDescr[CSL_MSC_MS_BULKOUT_ENDPTDESC_LEN];
00937 CSL_UsbDataStruct massStorageInterfcLnk;
00939 Uint16 massStorageBulkInEndptDescr[CSL_MSC_MS_BULKIN_ENDPTDESC_LEN];
00941 CSL_UsbDataStruct massStorageBulkOutEndptLnk;
00943 Uint16 stringDescrLangid[CSL_MSC_STRDESC_LANGID_LEN];
00945 Uint16 curConfigStat;
00947 CSL_UsbDataStruct massStorageBulkInEndptLnk;
00949 Uint16 ctrlBuffer[CSL_MSC_CTRLBUFF_LEN];
00951 CSL_UsbDataStruct configDescrLnk;
00953 char **strDescr;
00955 CSL_MscRequestStruct *mscReqTable;
00957 CSL_MscRequestRet (*fpRequestHandler)(CSL_MSC_REQUEST_ARGS);
00961 Bool usbSpeedCfg;
00964 Uint16 *pCfgDescr;
00967 Uint16 *pOtherSpeedCfgDescr;
00968 } CSL_MscCtrlObject;
00969
00975 typedef struct CSL_MscClassStruct {
00977 CSL_MscCtrlObject ctrlHandle;
00979 CSL_MscObject mscHandle;
00980 } CSL_MscClassStruct;
00981
00983 typedef CSL_MscClassStruct *pMscClassHandle;
00984
00988
00989
00990
00991
01041 CSL_Status MSC_Open(pMscAppClassHandle pAppClassHandle);
01042
01089 CSL_Status MSC_OpenFullspeed(pMscAppClassHandle pAppClassHandle);
01090
01139 static CSL_Status MSC_Setup(pMscAppClassHandle pAppClassHandle,
01140 Bool usbSpeedCfg);
01141
01186 CSL_Status MSC_Close(pMscAppClassHandle pAppClassHandle);
01187
01240 CSL_Status MSC_SetLunAttr(pMscAppClassHandle pAppClassHandle,
01241 CSL_MscLunAttribApp *lunHandle,
01242 Uint16 lunNum);
01243
01291 CSL_Status MSC_Ctrl(void *pMSC);
01292
01340 CSL_Status MSC_Bulk(void *pMSC);
01341
01388 Uint16 MSC_GetLunLockedStatus(void *pMSC,
01389 Uint16 lunNum);
01390
01436 Uint16 MSC_GetactivityFlagStatus(void *pMSC);
01437
01483 Uint16 MSC_GetsuspendFlagStatus(void *pMSC);
01484
01519 static CSL_Status MSC_initCtrlDesc(CSL_MscCtrlObject *pCtrlHandle);
01520
01555 static CSL_Status MSC_initMscVal(CSL_MscObject *pMscHandle);
01556
01605 CSL_Status MSC_HandleStateWaitForCBW(CSL_MscObject *pMscHandle,
01606 pUsbEpHandle hUsbOutEp,
01607 pUsbEpHandle hUsbInEp);
01608
01661 CSL_Status MSC_ExecuteRead(CSL_MscObject *pMscHandle,
01662 Uint16 lunNum,
01663 Uint16 first);
01664
01717 CSL_Status MSC_ExecuteWrite(CSL_MscObject *pMscHandle,
01718 Uint16 lunNum,
01719 Uint16 first);
01720
01766 CSL_Status MSC_HandleTestUnitReady(CSL_MscObject *pMscHandle,
01767 pUsbEpHandle hUsbInEp,
01768 Uint16 logicalUnit);
01769
01815 CSL_Status MSC_HandlePreventAllowMediaRemoval(CSL_MscObject *pMscHandle,
01816 pUsbEpHandle hUsbInEp,
01817 Uint16 logicalUnit);
01818
01864 CSL_Status MSC_HandleReadCapacity(CSL_MscObject *pMscHandle,
01865 pUsbEpHandle hUsbInEp,
01866 Uint16 logicalUnit);
01867
01918 CSL_MscRequestRet MSC_reqGetDescriptor(CSL_UsbDevNum devNum,
01919 CSL_UsbSetupStruct *usbSetup,
01920 pUsbEpHandle hInEp,
01921 pUsbEpHandle hOutEp,
01922 void *pMsc);
01923
01979 CSL_MscRequestRet MSC_reqBotMscReset(CSL_UsbDevNum devNum,
01980 CSL_UsbSetupStruct *usbSetup,
01981 pUsbEpHandle hInEp,
01982 pUsbEpHandle hOutEp,
01983 void *pMsc);
01984
02033 CSL_Status MSC_sendCswWithPhaseError(CSL_MscObject *pMscHandle,
02034 pUsbEpHandle hUsbInEp);
02035
02086 CSL_Status MSC_handleDataDirMisMatch(CSL_MscObject *pMscHandle,
02087 Uint16 dataDir);
02093 #ifdef __cplusplus
02094 }
02095 #endif
02096
02097 #endif //_CSL_MSC_H_
02098