1 /*********************************************************************** 2 * $Id:: mw_usbd_msc.h 331 2012-08-09 18:54:34Z usb10131 $ 3 * 4 * Project: USB device ROM Stack 5 * 6 * Description: 7 * Mass Storage Class definitions. 8 * 9 *********************************************************************** 10 * Copyright(C) 2011, NXP Semiconductor 11 * All rights reserved. 12 * 13 * Software that is described herein is for illustrative purposes only 14 * which provides customers with programming information regarding the 15 * products. This software is supplied "AS IS" without any warranties. 16 * NXP Semiconductors assumes no responsibility or liability for the 17 * use of the software, conveys no license or title under any patent, 18 * copyright, or mask work right to the product. NXP Semiconductors 19 * reserves the right to make changes in the software without 20 * notification. NXP Semiconductors also make no representation or 21 * warranty that such application will be suitable for the specified 22 * use without further testing or modification. 23 **********************************************************************/ 24 25 #ifndef __MSC_H__ 26 #define __MSC_H__ 27 28 #include "usbd.h" 29 30 /** \file 31 * \brief Mass Storage class (MSC) descriptors. 32 * 33 * Definition of MSC class descriptors and their bit defines. 34 * 35 */ 36 37 /* MSC Subclass Codes */ 38 #define MSC_SUBCLASS_RBC 0x01 39 #define MSC_SUBCLASS_SFF8020I_MMC2 0x02 40 #define MSC_SUBCLASS_QIC157 0x03 41 #define MSC_SUBCLASS_UFI 0x04 42 #define MSC_SUBCLASS_SFF8070I 0x05 43 #define MSC_SUBCLASS_SCSI 0x06 44 45 /* MSC Protocol Codes */ 46 #define MSC_PROTOCOL_CBI_INT 0x00 47 #define MSC_PROTOCOL_CBI_NOINT 0x01 48 #define MSC_PROTOCOL_BULK_ONLY 0x50 49 50 51 /* MSC Request Codes */ 52 #define MSC_REQUEST_RESET 0xFF 53 #define MSC_REQUEST_GET_MAX_LUN 0xFE 54 55 56 /* MSC Bulk-only Stage */ 57 #define MSC_BS_CBW 0 /* Command Block Wrapper */ 58 #define MSC_BS_DATA_OUT 1 /* Data Out Phase */ 59 #define MSC_BS_DATA_IN 2 /* Data In Phase */ 60 #define MSC_BS_DATA_IN_LAST 3 /* Data In Last Phase */ 61 #define MSC_BS_DATA_IN_LAST_STALL 4 /* Data In Last Phase with Stall */ 62 #define MSC_BS_CSW 5 /* Command Status Wrapper */ 63 #define MSC_BS_ERROR 6 /* Error */ 64 65 66 /* Bulk-only Command Block Wrapper */ 67 PRE_PACK struct POST_PACK _MSC_CBW 68 { 69 uint32_t dSignature; 70 uint32_t dTag; 71 uint32_t dDataLength; 72 uint8_t bmFlags; 73 uint8_t bLUN; 74 uint8_t bCBLength; 75 uint8_t CB[16]; 76 } ; 77 typedef struct _MSC_CBW MSC_CBW; 78 79 /* Bulk-only Command Status Wrapper */ 80 PRE_PACK struct POST_PACK _MSC_CSW 81 { 82 uint32_t dSignature; 83 uint32_t dTag; 84 uint32_t dDataResidue; 85 uint8_t bStatus; 86 } ; 87 typedef struct _MSC_CSW MSC_CSW; 88 89 #define MSC_CBW_Signature 0x43425355 90 #define MSC_CSW_Signature 0x53425355 91 92 93 /* CSW Status Definitions */ 94 #define CSW_CMD_PASSED 0x00 95 #define CSW_CMD_FAILED 0x01 96 #define CSW_PHASE_ERROR 0x02 97 98 99 /* SCSI Commands */ 100 #define SCSI_TEST_UNIT_READY 0x00 101 #define SCSI_REQUEST_SENSE 0x03 102 #define SCSI_FORMAT_UNIT 0x04 103 #define SCSI_INQUIRY 0x12 104 #define SCSI_MODE_SELECT6 0x15 105 #define SCSI_MODE_SENSE6 0x1A 106 #define SCSI_START_STOP_UNIT 0x1B 107 #define SCSI_MEDIA_REMOVAL 0x1E 108 #define SCSI_READ_FORMAT_CAPACITIES 0x23 109 #define SCSI_READ_CAPACITY 0x25 110 #define SCSI_READ10 0x28 111 #define SCSI_WRITE10 0x2A 112 #define SCSI_VERIFY10 0x2F 113 #define SCSI_READ12 0xA8 114 #define SCSI_WRITE12 0xAA 115 #define SCSI_MODE_SELECT10 0x55 116 #define SCSI_MODE_SENSE10 0x5A 117 118 119 #endif /* __MSC_H__ */ 120