[USBSTOR]
[reactos.git] / drivers / usb / usbstor / usbstor.h
index cebd436..3f3b907 100644 (file)
                   ((((unsigned long)(n) & 0xFF0000)) >> 8) | \
                   ((((unsigned long)(n) & 0xFF000000)) >> 24))
 
-NTSTATUS NTAPI
-IoAttachDeviceToDeviceStackSafe(
-  IN PDEVICE_OBJECT SourceDevice,
-  IN PDEVICE_OBJECT TargetDevice,
-  OUT PDEVICE_OBJECT *AttachedToDeviceObject);
+#define USB_RECOVERABLE_ERRORS (USBD_STATUS_STALL_PID | USBD_STATUS_DEV_NOT_RESPONDING \
+       | USBD_STATUS_ENDPOINT_HALTED | USBD_STATUS_NO_BANDWIDTH)
 
 typedef struct __COMMON_DEVICE_EXTENSION__
 {
@@ -57,6 +54,7 @@ typedef struct
     USB_BUS_INTERFACE_USBDI_V2 BusInterface;                                             // bus interface of device
     PUSB_DEVICE_DESCRIPTOR DeviceDescriptor;                                             // usb device descriptor
     PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;                               // usb configuration descriptor
+    PUSB_STRING_DESCRIPTOR SerialNumber;                                                 // usb serial number
     PUSBD_INTERFACE_INFORMATION InterfaceInformation;                                    // usb interface information
     USBD_CONFIGURATION_HANDLE ConfigurationHandle;                                       // usb configuration handle
     UCHAR BulkInPipeIndex;                                                               // bulk in pipe index
@@ -68,6 +66,7 @@ typedef struct
     BOOLEAN IrpListFreeze;                                                               // if true the irp list is freezed
     BOOLEAN ResetInProgress;                                                             // if hard reset is in progress
     ULONG IrpPendingCount;                                                               // count of irp pending
+    BOOLEAN SrbActive;                                                                   // debug field if srb is pending
 }FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
 
 typedef struct
@@ -81,9 +80,6 @@ typedef struct
     ULONG LastLogicBlockAddress;                                                         // last block address
 }PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
 
-
-
-
 //
 // max lun command identifier
 //
@@ -164,7 +160,8 @@ typedef struct
     UCHAR LogicalBlockByte2;                                         // lba byte 2
     UCHAR LogicalBlockByte3;                                         // lba byte 3
     UCHAR Reserved;                                                  // reserved 0x00
-    USHORT ContiguousLogicBlocks;                                    // num of contiguous logical blocks
+    UCHAR ContiguousLogicBlocksByte0;                                // msb contigious logic blocks byte
+    UCHAR ContiguousLogicBlocksByte1;                                // msb contigious logic blocks
     UCHAR Reserved1[3];                                              // reserved 0x00
 }UFI_READ_WRITE_CMD;
 
@@ -278,6 +275,13 @@ typedef struct
     PKEVENT Event;
 }IRP_CONTEXT, *PIRP_CONTEXT;
 
+typedef struct _ERRORHANDLER_WORKITEM_DATA
+{
+       PDEVICE_OBJECT DeviceObject;
+       PIRP Irp;
+       PIRP_CONTEXT Context;
+       WORK_QUEUE_ITEM WorkQueueItem;
+} ERRORHANDLER_WORKITEM_DATA, *PERRORHANDLER_WORKITEM_DATA;
 
 
 //---------------------------------------------------------------------
@@ -424,3 +428,16 @@ VOID
 USBSTOR_QueueInitialize(
     PFDO_DEVICE_EXTENSION FDODeviceExtension);
 
+VOID
+NTAPI
+ErrorHandlerWorkItemRoutine(
+       PVOID Context);
+
+VOID
+USBSTOR_QueueNextRequest(
+    IN PDEVICE_OBJECT DeviceObject);
+
+VOID
+USBSTOR_QueueTerminateRequest(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN BOOLEAN ModifySrbState);