[USBSTOR] Do not try to retry a failed request
[reactos.git] / drivers / usb / usbstor / usbstor.h
index cd7172f..d2a72ec 100644 (file)
@@ -9,6 +9,7 @@
 
 #define USB_STOR_TAG 'sbsu'
 #define USB_MAXCHILDREN              (16)
+#define USBSTOR_DEFAULT_MAX_TRANSFER_LENGTH 0x10000
 
 #define HTONS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))
 #define NTOHS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))
@@ -68,7 +69,7 @@ typedef struct
     USBSTOR_COMMON_DEVICE_EXTENSION Common;
     PDEVICE_OBJECT LowerDeviceObject;                                                    // points to FDO
     UCHAR LUN;                                                                           // lun id
-    PVOID InquiryData;                                                                   // USB SCSI inquiry data
+    PINQUIRYDATA InquiryData;                                                            // USB SCSI inquiry data
     PUCHAR FormatData;                                                                   // USB SCSI Read Format Capacity Data
     UCHAR Claimed;                                                                       // indicating if it has been claimed by upper driver
     ULONG BlockLength;                                                                   // length of block
@@ -105,6 +106,10 @@ C_ASSERT(sizeof(CBW) == 31);
 
 #define MAX_LUN 0xF
 
+#define CSW_STATUS_COMMAND_PASSED 0x00
+#define CSW_STATUS_COMMAND_FAILED 0x01
+#define CSW_STATUS_PHASE_ERROR    0x02
+
 typedef struct
 {
     ULONG Signature;                                                 // CSW signature
@@ -113,42 +118,6 @@ typedef struct
     UCHAR Status;                                                    // CSW status
 }CSW, *PCSW;
 
-//--------------------------------------------------------------------------------------------------------------------------------------------
-//
-// UFI INQUIRY command
-//
-typedef struct
-{
-    UCHAR Code;                                                      // operation code 0x12
-    UCHAR LUN;                                                       // lun address
-    UCHAR PageCode;                                                  // product data information, always 0x00
-    UCHAR Reserved;                                                  // reserved 0x00
-    UCHAR AllocationLength;                                          // length of inquiry data to be returned, default 36 bytes
-    UCHAR Reserved1[7];                                              //reserved bytes 0x00
-}UFI_INQUIRY_CMD, *PUFI_INQUIRY_CMD;
-
-C_ASSERT(sizeof(UFI_INQUIRY_CMD) == 12);
-
-#define UFI_INQUIRY_CMD_LEN 0x6
-
-//
-// UFI INQUIRY command response
-//
-typedef struct
-{
-    UCHAR DeviceType;                                                // device type
-    UCHAR RMB;                                                       // removable media bit
-    UCHAR Version;                                                   // contains version 0x00
-    UCHAR Format;                                                    // response format
-    UCHAR Length;                                                    // additional length
-    UCHAR Reserved[3];                                               // reserved
-    UCHAR Vendor[8];                                                 // vendor identification string
-    UCHAR Product[16];                                               // product identification string
-    UCHAR Revision[4];                                               // product revision code
-}UFI_INQUIRY_RESPONSE, *PUFI_INQUIRY_RESPONSE;
-
-C_ASSERT(sizeof(UFI_INQUIRY_RESPONSE) == 36);
-
 //--------------------------------------------------------------------------------------------------------------------------------------------
 //
 // UFI read cmd
@@ -162,8 +131,8 @@ typedef struct
     UCHAR LogicalBlockByte2;                                         // lba byte 2
     UCHAR LogicalBlockByte3;                                         // lba byte 3
     UCHAR Reserved;                                                  // reserved 0x00
-    UCHAR ContiguousLogicBlocksByte0;                                // msb contigious logic blocks byte
-    UCHAR ContiguousLogicBlocksByte1;                                // msb contigious logic blocks
+    UCHAR ContiguousLogicBlocksByte0;                                // msb contiguous logic blocks byte
+    UCHAR ContiguousLogicBlocksByte1;                                // msb contiguous logic blocks
     UCHAR Reserved1[3];                                              // reserved 0x00
 }UFI_READ_WRITE_CMD;
 
@@ -190,7 +159,7 @@ C_ASSERT(sizeof(UFI_CAPACITY_CMD) == 12);
 #define UFI_CAPACITY_CMD_LEN 0xA //FIXME support length 16 too if requested
 
 //
-// UFI Read Capcacity command response
+// UFI Read Capacity command response
 //
 typedef struct
 {
@@ -283,7 +252,7 @@ typedef struct
     UCHAR BlockLengthByte2;
 }UFI_CAPACITY_DESCRIPTOR, *PUFI_CAPACITY_DESCRIPTOR;
 
-#define UNFORMATED_MEDIA_CODE_DESCRIPTORY_TYPE (1)
+#define UNFORMATTED_MEDIA_CODE_DESCRIPTORY_TYPE (1)
 #define FORMAT_MEDIA_CODE_DESCRIPTOR_TYPE      (2)
 #define CARTRIDGE_MEDIA_CODE_DESCRIPTOR_TYPE   (3)
 
@@ -314,21 +283,18 @@ typedef struct
 
 typedef struct
 {
+    PIRP Irp;
+    PFDO_DEVICE_EXTENSION FDODeviceExtension;
+    ULONG ErrorIndex;
+    ULONG StallRetryCount;                                            // the number of retries after receiving USBD_STATUS_STALL_PID status
     union
     {
-        PCBW cbw;
-        PCSW csw;
+        CBW cbw;
+        CSW csw;
     };
     URB Urb;
-    PIRP Irp;
-    ULONG TransferDataLength;
-    PUCHAR TransferData;
-    PFDO_DEVICE_EXTENSION FDODeviceExtension;
-    PPDO_DEVICE_EXTENSION PDODeviceExtension;
-    PMDL TransferBufferMDL;
-    ULONG ErrorIndex;
-    ULONG RetryCount;
-}IRP_CONTEXT, *PIRP_CONTEXT;
+    SCSI_REQUEST_BLOCK SenseSrb;
+} IRP_CONTEXT, *PIRP_CONTEXT;
 
 typedef struct _ERRORHANDLER_WORKITEM_DATA
 {
@@ -440,23 +406,10 @@ USBSTOR_GetPipeHandles(
 NTSTATUS
 USBSTOR_HandleExecuteSCSI(
     IN PDEVICE_OBJECT DeviceObject,
-    IN PIRP Irp,
-    IN ULONG RetryCount);
-
-NTSTATUS
-NTAPI
-USBSTOR_CSWCompletionRoutine(
-    PDEVICE_OBJECT DeviceObject,
-    PIRP Irp,
-    PVOID Ctx);
+    IN PIRP Irp);
 
 NTSTATUS
-USBSTOR_SendCBW(
-    PIRP_CONTEXT Context,
-    PIRP Irp);
-
-VOID
-USBSTOR_SendCSW(
+USBSTOR_SendCSWRequest(
     PIRP_CONTEXT Context,
     PIRP Irp);