00001
00038 #ifndef USB_MSC_PROTOCOL_H_INCLUDED
00039 #define USB_MSC_PROTOCOL_H_INCLUDED
00040
00041 #include <types.h>
00042
00064 enum usb_msc_interface_subclass {
00065 USB_MSC_SUBCLASS_RBC = 0x01,
00066 USB_MSC_SUBCLASS_ATAPI = 0x02,
00067 USB_MSC_SUBCLASS_QIC_157 = 0x03,
00068 USB_MSC_SUBCLASS_UFI = 0x04,
00069 USB_MSC_SUBCLASS_SFF_8070I = 0x05,
00070 USB_MSC_SUBCLASS_TRANSPARENT = 0x06,
00071 };
00072
00079 enum usb_msc_interface_protocol {
00080 USB_MSC_PROTOCOL_CBI = 0x00,
00081 USB_MSC_PROTOCOL_CBI_ALT = 0x01,
00082 USB_MSC_PROTOCOL_BULK = 0x50,
00083 };
00084
00088 enum usb_msc_reqid {
00089 USB_MSC_REQ_BULK_RESET = 0xff,
00090 USB_MSC_REQ_GET_MAX_LUN = 0xfe,
00091 };
00092
00093 COMPILER_PACK_SET(1);
00094
00098 struct usb_msc_cbw {
00099 le32_t dCBWSignature;
00100 le32_t dCBWTag;
00101 le32_t dCBWDataTransferLength;
00102 uint8_t bmCBWFlags;
00103 uint8_t bCBWLUN;
00104 uint8_t bCBWCBLength;
00105 uint8_t CDB[16];
00106 };
00107
00108 #define USB_CBW_SIGNATURE 0x43425355 //!< dCBWSignature value
00109 #define USB_CBW_DIRECTION_IN (1 << 7) //!< Data from device to host
00110 #define USB_CBW_LUN_MASK 0x0f //!< Valid bits in bCBWLUN
00111 #define USB_CBW_LEN_MASK 0x1f //!< Valid bits in bCBWCBLength
00112
00116 struct usb_msc_csw {
00117 le32_t dCSWSignature;
00118 le32_t dCSWTag;
00119 le32_t dCSWDataResidue;
00120 uint8_t bCSWStatus;
00121 };
00122
00123 #define USB_CSW_SIGNATURE 0x53425355 //!< dCSWSignature value
00124 #define USB_CSW_STATUS_PASS 0x00 //!< Command Passed
00125 #define USB_CSW_STATUS_FAIL 0x01 //!< Command Failed
00126 #define USB_CSW_STATUS_PE 0x02 //!< Phase Error
00127
00128 COMPILER_PACK_RESET();
00129
00131
00132 #endif