text: /***********************************************************************
  * $Id:: mw_usbd_msc.h 331 2012-08-09 18:54:34Z usb10131                       $
  *
  * Project: USB device ROM Stack
  *
  * Description:
  *     Mass Storage Class definitions.
  *
  ***********************************************************************
  *   Copyright(C) 2011, NXP Semiconductor
  *   All rights reserved.
  *
  * Software that is described herein is for illustrative purposes only
  * which provides customers with programming information regarding the
  * products. This software is supplied "AS IS" without any warranties.
  * NXP Semiconductors assumes no responsibility or liability for the
  * use of the software, conveys no license or title under any patent,
  * copyright, or mask work right to the product. NXP Semiconductors
  * reserves the right to make changes in the software without
  * notification. NXP Semiconductors also make no representation or
  * warranty that such application will be suitable for the specified
  * use without further testing or modification.
  **********************************************************************/
  
  #ifndef __MSC_H__
  #define __MSC_H__
  
  #include "usbd.h"
  
  /** \file
   *  \brief Mass Storage class (MSC) descriptors.
   *
   *  Definition of MSC class descriptors and their bit defines.
   *
   */
  
  /* MSC Subclass Codes */
  #define MSC_SUBCLASS_RBC                0x01
  #define MSC_SUBCLASS_SFF8020I_MMC2      0x02
  #define MSC_SUBCLASS_QIC157             0x03
  #define MSC_SUBCLASS_UFI                0x04
  #define MSC_SUBCLASS_SFF8070I           0x05
  #define MSC_SUBCLASS_SCSI               0x06
  
  /* MSC Protocol Codes */
  #define MSC_PROTOCOL_CBI_INT            0x00
  #define MSC_PROTOCOL_CBI_NOINT          0x01
  #define MSC_PROTOCOL_BULK_ONLY          0x50
  
  
  /* MSC Request Codes */
  #define MSC_REQUEST_RESET               0xFF
  #define MSC_REQUEST_GET_MAX_LUN         0xFE
  
  
  /* MSC Bulk-only Stage */
  #define MSC_BS_CBW                      0       /* Command Block Wrapper */
  #define MSC_BS_DATA_OUT                 1       /* Data Out Phase */
  #define MSC_BS_DATA_IN                  2       /* Data In Phase */
  #define MSC_BS_DATA_IN_LAST             3       /* Data In Last Phase */
  #define MSC_BS_DATA_IN_LAST_STALL       4       /* Data In Last Phase with Stall */
  #define MSC_BS_CSW                      5       /* Command Status Wrapper */
  #define MSC_BS_ERROR                    6       /* Error */
  
  
  /* Bulk-only Command Block Wrapper */
  PRE_PACK struct POST_PACK _MSC_CBW
  {
    uint32_t dSignature;
    uint32_t dTag;
    uint32_t dDataLength;
    uint8_t  bmFlags;
    uint8_t  bLUN;
    uint8_t  bCBLength;
    uint8_t  CB[16];
  } ;
  typedef struct _MSC_CBW MSC_CBW;
  
  /* Bulk-only Command Status Wrapper */
  PRE_PACK struct POST_PACK _MSC_CSW
  {
    uint32_t dSignature;
    uint32_t dTag;
    uint32_t dDataResidue;
    uint8_t  bStatus;
  } ;
  typedef struct _MSC_CSW MSC_CSW;
  
  #define MSC_CBW_Signature               0x43425355
  #define MSC_CSW_Signature               0x53425355
  
  
  /* CSW Status Definitions */
  #define CSW_CMD_PASSED                  0x00
  #define CSW_CMD_FAILED                  0x01
  #define CSW_PHASE_ERROR                 0x02
  
  
  /* SCSI Commands */
  #define SCSI_TEST_UNIT_READY            0x00
  #define SCSI_REQUEST_SENSE              0x03
  #define SCSI_FORMAT_UNIT                0x04
  #define SCSI_INQUIRY                    0x12
  #define SCSI_MODE_SELECT6               0x15
  #define SCSI_MODE_SENSE6                0x1A
  #define SCSI_START_STOP_UNIT            0x1B
  #define SCSI_MEDIA_REMOVAL              0x1E
  #define SCSI_READ_FORMAT_CAPACITIES     0x23
  #define SCSI_READ_CAPACITY              0x25
  #define SCSI_READ10                     0x28
  #define SCSI_WRITE10                    0x2A
  #define SCSI_VERIFY10                   0x2F
  #define SCSI_READ12                     0xA8
  #define SCSI_WRITE12                    0xAA
  #define SCSI_MODE_SELECT10              0x55
  #define SCSI_MODE_SENSE10               0x5A
  
  
  #endif  /* __MSC_H__ */
  