Add first draft of the TPI NVM commands for reading, writing and erasing a target...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / MassStorage.h
index 17e5bab..1c8b07f 100644 (file)
@@ -9,13 +9,13 @@
 /*\r
   Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
 \r
 /*\r
   Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
 \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
+  Permission to use, copy, modify, distribute, and sell this \r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in \r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting \r
+  documentation, and that the name of the author not be used in \r
+  advertising or publicity pertaining to distribution of the \r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
                                                  *   the interface is enumerated.\r
                                                  */\r
                        } USB_ClassInfo_MS_Host_t;\r
                                                  *   the interface is enumerated.\r
                                                  */\r
                        } USB_ClassInfo_MS_Host_t;\r
-\r
-                       /** Type define for a SCSI Sense structure. Structures of this type are filled out by the\r
-                        *  device via the MassStore_RequestSense() function, indicating the current sense data of the\r
-                        *  device (giving explicit error codes for the last issued command). For details of the\r
-                        *  structure contents, refer to the SCSI specifications.\r
-                        */\r
-                       typedef struct\r
-                       {\r
-                               uint8_t       ResponseCode;\r
-\r
-                               uint8_t       SegmentNumber;\r
-                               \r
-                               unsigned char SenseKey            : 4;\r
-                               unsigned char _RESERVED1          : 1;\r
-                               unsigned char ILI                 : 1;\r
-                               unsigned char EOM                 : 1;\r
-                               unsigned char FileMark            : 1;\r
-                               \r
-                               uint8_t      Information[4];\r
-                               uint8_t      AdditionalLength;\r
-                               uint8_t      CmdSpecificInformation[4];\r
-                               uint8_t      AdditionalSenseCode;\r
-                               uint8_t      AdditionalSenseQualifier;\r
-                               uint8_t      FieldReplaceableUnitCode;\r
-                               uint8_t      SenseKeySpecific[3];\r
-                       } SCSI_Request_Sense_Response_t;\r
-\r
-                       /** Type define for a SCSI Inquiry structure. Structures of this type are filled out by the\r
-                        *  device via the MassStore_Inquiry() function, retrieving the attached device's information.\r
-                        *  For details of the structure contents, refer to the SCSI specifications.\r
-                        */\r
-                       typedef struct\r
-                       {\r
-                               unsigned char DeviceType          : 5;\r
-                               unsigned char PeripheralQualifier : 3;\r
-                               \r
-                               unsigned char _RESERVED1          : 7;\r
-                               unsigned char Removable           : 1;\r
-                               \r
-                               uint8_t      Version;\r
-                               \r
-                               unsigned char ResponseDataFormat  : 4;\r
-                               unsigned char _RESERVED2          : 1;\r
-                               unsigned char NormACA             : 1;\r
-                               unsigned char TrmTsk              : 1;\r
-                               unsigned char AERC                : 1;\r
-\r
-                               uint8_t      AdditionalLength;\r
-                               uint8_t      _RESERVED3[2];\r
-\r
-                               unsigned char SoftReset           : 1;\r
-                               unsigned char CmdQue              : 1;\r
-                               unsigned char _RESERVED4          : 1;\r
-                               unsigned char Linked              : 1;\r
-                               unsigned char Sync                : 1;\r
-                               unsigned char WideBus16Bit        : 1;\r
-                               unsigned char WideBus32Bit        : 1;\r
-                               unsigned char RelAddr             : 1;\r
-                               \r
-                               uint8_t      VendorID[8];\r
-                               uint8_t      ProductID[16];\r
-                               uint8_t      RevisionID[4];\r
-                       } SCSI_Inquiry_Response_t;\r
                        \r
                        /** SCSI capacity structure, to hold the total capacity of the device in both the number\r
                         *  of blocks in the current LUN, and the size of each block. This structure is filled by\r
                        \r
                        /** SCSI capacity structure, to hold the total capacity of the device in both the number\r
                         *  of blocks in the current LUN, and the size of each block. This structure is filled by\r
                         *  UNit, a logical drive) in the device. This value can then be used in the other functions of the Mass Storage\r
                         *  Host mode Class driver to address a specific LUN within the device.\r
                         *\r
                         *  UNit, a logical drive) in the device. This value can then be used in the other functions of the Mass Storage\r
                         *  Host mode Class driver to address a specific LUN within the device.\r
                         *\r
+                        *  \note Some devices do not support this request, and will STALL it when issued. To get around this,\r
+                        *        on unsupported devices the max LUN index will be reported as zero and no error will be returned\r
+                        *        if the device STALLs the request.\r
+                        *\r
                         *  \param[in,out] MSInterfaceInfo  Pointer to a structure containing a MS Class host configuration and state\r
                         *  \param[out] MaxLUNIndex  Pointer to a location where the highest LUN index value should be stored\r
                         *\r
                         *  \param[in,out] MSInterfaceInfo  Pointer to a structure containing a MS Class host configuration and state\r
                         *  \param[out] MaxLUNIndex  Pointer to a location where the highest LUN index value should be stored\r
                         *\r
                        #define COMMAND_DIRECTION_DATA_OUT     (0 << 7)\r
                        #define COMMAND_DIRECTION_DATA_IN      (1 << 7)\r
                        \r
                        #define COMMAND_DIRECTION_DATA_OUT     (0 << 7)\r
                        #define COMMAND_DIRECTION_DATA_IN      (1 << 7)\r
                        \r
-                       #define COMMAND_DATA_TIMEOUT_MS        2000\r
+                       #define COMMAND_DATA_TIMEOUT_MS        10000\r
 \r
                        #define MS_FOUND_DATAPIPE_IN           (1 << 0)\r
                        #define MS_FOUND_DATAPIPE_OUT          (1 << 1)\r
 \r
                        #define MS_FOUND_DATAPIPE_IN           (1 << 0)\r
                        #define MS_FOUND_DATAPIPE_OUT          (1 << 1)\r