Disable flushing if the device doesn't support it or if it isn't enabled.
authorHartmut Birr <osexpert@googlemail.com>
Wed, 28 Sep 2005 19:34:07 +0000 (19:34 +0000)
committerHartmut Birr <osexpert@googlemail.com>
Wed, 28 Sep 2005 19:34:07 +0000 (19:34 +0000)
svn path=/trunk/; revision=18139

reactos/drivers/storage/atapi/atapi.c

index 434ade1..c111fef 100644 (file)
@@ -1171,6 +1171,11 @@ AtapiFindDevices(PATAPI_MINIPORT_EXTENSION DeviceExtension,
                  DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_DMA_CMD;
                }
 #endif
+              if (!(DeviceExtension->DeviceParams[UnitNumber].SupportedFeatures83 & 0x1000) ||
+                 !(DeviceExtension->DeviceParams[UnitNumber].EnabledFeatures86 & 0x1000))
+                {
+                  DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_NO_FLUSH;                      
+                }
              DeviceFound = TRUE;
            }
          else
@@ -1212,6 +1217,22 @@ AtapiFindDevices(PATAPI_MINIPORT_EXTENSION DeviceExtension,
                  DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_DMA_CMD;
                }
 #endif
+              if (DeviceExtension->DeviceFlags[UnitNumber] & DEVICE_48BIT_ADDRESS)
+                {
+                  if (!(DeviceExtension->DeviceParams[UnitNumber].SupportedFeatures83 & 0x2000) ||
+                     !(DeviceExtension->DeviceParams[UnitNumber].EnabledFeatures86 & 0x2000))
+                    {
+                      DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_NO_FLUSH;                      
+                    }
+                }
+              else
+                {
+                  if (!(DeviceExtension->DeviceParams[UnitNumber].SupportedFeatures83 & 0x1000) ||
+                     !(DeviceExtension->DeviceParams[UnitNumber].EnabledFeatures86 & 0x1000))
+                    {
+                      DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_NO_FLUSH;                      
+                    }
+                }
              DeviceFound = TRUE;
            }
          else
@@ -2311,12 +2332,8 @@ AtapiFlushCache(PATAPI_MINIPORT_EXTENSION DeviceExtension,
        * it doesn't make sense to flush cache on devices we don't
        * write to.
        */
-      return SRB_STATUS_INVALID_REQUEST;
-    }
-
-  if (!(DeviceExtension->DeviceParams[Srb->TargetId].SupportedFeatures83 & 0x1000))
-    {
-      /* The device states it doesn't support the command */
+       
+      /* The device states it doesn't support the command or it is disabled */      
       DPRINT("The drive doesn't support FLUSH_CACHE\n");
       return SRB_STATUS_INVALID_REQUEST;
     }