Author: pschweitzer
Date: Sun Feb 14 19:53:47 2016
New Revision: 70746
URL:
http://svn.reactos.org/svn/reactos?rev=70746&view=rev
Log:
[FLOPPY]
When discovering floppy controlers, immediately probe controlers to check whether they
have a disk and if so, what's its geometry.
This avoids waiting for the first read, which will obviously never happen because FSD will
try other operations depending on not set geometry.
This implies a modification in RWDetermineMediaType() to avoid infinite wait, in case
there's no disk at all in the controler.
Addendum to r70725
Modified:
trunk/reactos/drivers/storage/floppy/floppy.c
trunk/reactos/drivers/storage/floppy/readwrite.c
trunk/reactos/drivers/storage/floppy/readwrite.h
Modified: trunk/reactos/drivers/storage/floppy/floppy.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/floppy/flo…
==============================================================================
--- trunk/reactos/drivers/storage/floppy/floppy.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/floppy/floppy.c [iso-8859-1] Sun Feb 14 19:53:47 2016
@@ -987,6 +987,11 @@
/* 3k: Clear the DO_DEVICE_INITIALIZING flag */
gControllerInfo[i].DriveInfo[j].DeviceObject->Flags &=
~DO_DEVICE_INITIALIZING;
+
+ /* 3l: Attempt to get drive info - if a floppy is already present */
+ StartMotor(&gControllerInfo[i].DriveInfo[j]);
+ RWDetermineMediaType(&gControllerInfo[i].DriveInfo[j], TRUE);
+ StopMotor(gControllerInfo[i].DriveInfo[j].ControllerInfo);
}
}
Modified: trunk/reactos/drivers/storage/floppy/readwrite.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/floppy/rea…
==============================================================================
--- trunk/reactos/drivers/storage/floppy/readwrite.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/floppy/readwrite.c [iso-8859-1] Sun Feb 14 19:53:47
2016
@@ -149,8 +149,8 @@
}
-static NTSTATUS NTAPI
-RWDetermineMediaType(PDRIVE_INFO DriveInfo)
+NTSTATUS NTAPI
+RWDetermineMediaType(PDRIVE_INFO DriveInfo, BOOLEAN OneShot)
/*
* FUNCTION: Determine the media type of the disk in the drive and fill in the geometry
* ARGUMENTS:
@@ -177,8 +177,8 @@
/*
* This algorithm assumes that a 1.44MB floppy is in the drive. If it's not,
- * it works backwards until the read works. Note that only 1.44 has been tested
- * at all.
+ * it works backwards until the read works unless OneShot try is asked.
+ * Note that only 1.44 has been tested at all.
*/
do
@@ -249,7 +249,10 @@
if(HwReadIdResult(DriveInfo->ControllerInfo, NULL, NULL) != STATUS_SUCCESS)
{
WARN_(FLOPPY, "RWDetermineMediaType(): ReadIdResult failed;
continuing\n");
- continue;
+ if (OneShot)
+ break;
+ else
+ continue;
}
/* Found the media; populate the geometry now */
@@ -492,7 +495,7 @@
*/
if(DriveInfo->DiskGeometry.MediaType == Unknown)
{
- if(RWDetermineMediaType(DriveInfo) != STATUS_SUCCESS)
+ if(RWDetermineMediaType(DriveInfo, FALSE) != STATUS_SUCCESS)
{
WARN_(FLOPPY, "ReadWritePassive(): unable to determine media type;
completing with STATUS_UNSUCCESSFUL\n");
IoCompleteRequest(Irp, IO_NO_INCREMENT);
Modified: trunk/reactos/drivers/storage/floppy/readwrite.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/floppy/rea…
==============================================================================
--- trunk/reactos/drivers/storage/floppy/readwrite.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/floppy/readwrite.h [iso-8859-1] Sun Feb 14 19:53:47
2016
@@ -33,3 +33,6 @@
VOID NTAPI
ReadWritePassive(PDRIVE_INFO DriveInfo, PIRP Irp);
+
+NTSTATUS NTAPI
+RWDetermineMediaType(PDRIVE_INFO DriveInfo, BOOLEAN OneShot);