[ros-diffs] [hpoussin] 43565: [freeldr/i386] Read up to 128 sectors at once

hpoussin at svn.reactos.org hpoussin at svn.reactos.org
Sun Oct 18 20:24:35 CEST 2009


Author: hpoussin
Date: Sun Oct 18 20:24:35 2009
New Revision: 43565

URL: http://svn.reactos.org/svn/reactos?rev=43565&view=rev
Log:
[freeldr/i386] Read up to 128 sectors at once

Modified:
    trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c
    trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c
    trunk/reactos/boot/freeldr/freeldr/include/arch.h

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c?rev=43565&r1=43564&r2=43565&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] Sun Oct 18 20:24:35 2009
@@ -467,7 +467,7 @@
 {
     DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
     UCHAR* Ptr = (UCHAR*)Buffer;
-    ULONG i, Length;
+    ULONG i, Length, Sectors;
     BOOLEAN ret;
 
     *Count = 0;
@@ -475,12 +475,13 @@
     while (N > 0)
     {
         Length = N;
-        if (Length > Context->SectorSize)
-            Length = Context->SectorSize;
+        if (Length > DISKREADBUFFER_SIZE)
+            Length = DISKREADBUFFER_SIZE;
+        Sectors = (Length + Context->SectorSize - 1) / Context->SectorSize;
         ret = MachDiskReadLogicalSectors(
             Context->DriveNumber,
             Context->SectorNumber + Context->SectorOffset + i,
-            1,
+            Sectors,
             (PVOID)DISKREADBUFFER);
         if (!ret)
             return EIO;
@@ -488,7 +489,7 @@
         Ptr += Length;
         *Count += Length;
         N -= Length;
-        i++;
+        i += Sectors;
     }
 
     return ESUCCESS;

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c?rev=43565&r1=43564&r2=43565&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c [iso-8859-1] Sun Oct 18 20:24:35 2009
@@ -168,7 +168,7 @@
 {
     DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
     UCHAR* Ptr = (UCHAR*)Buffer;
-    ULONG i, Length;
+    ULONG i, Length, Sectors;
     BOOLEAN ret;
 
     *Count = 0;
@@ -176,12 +176,13 @@
     while (N > 0)
     {
         Length = N;
-        if (Length > Context->SectorSize)
-            Length = Context->SectorSize;
+        if (Length > DISKREADBUFFER_SIZE)
+            Length = DISKREADBUFFER_SIZE;
+        Sectors = (Length + Context->SectorSize - 1) / Context->SectorSize;
         ret = MachDiskReadLogicalSectors(
             Context->DriveNumber,
             Context->SectorNumber + Context->SectorOffset + i,
-            1,
+            Sectors,
             (PVOID)DISKREADBUFFER);
         if (!ret)
             return EIO;
@@ -189,7 +190,7 @@
         Ptr += Length;
         *Count += Length;
         N -= Length;
-        i++;
+        i += Sectors;
     }
 
     return ESUCCESS;

Modified: trunk/reactos/boot/freeldr/freeldr/include/arch.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/include/arch.h?rev=43565&r1=43564&r2=43565&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/include/arch.h [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/include/arch.h [iso-8859-1] Sun Oct 18 20:24:35 2009
@@ -46,6 +46,7 @@
 #define BIOSCALLBUFOFFSET	0x0000	/* Buffer to store temporary data for any Int386() call */
 #define FILESYSBUFFER		0x80000	/* Buffer to store file system data (e.g. cluster buffer for FAT) */
 #define DISKREADBUFFER		0x90000	/* Buffer to store data read in from the disk via the BIOS */
+#define DISKREADBUFFER_SIZE 0x10000
 #elif defined(_M_PPC) || defined(_M_MIPS) || defined(_M_ARM)
 #define DISKREADBUFFER		    0x80000000
 #define FILESYSBUFFER           0x80000000




More information about the Ros-diffs mailing list